|
|
- #include <Arduino.h>* R+ {) ^2 ^/ _& B/ j! y
- #include <Wire.h>$ S" N$ L5 C c2 [+ ]
- #include <Servo.h>
# b2 b% c6 ?- I; g0 V
7 V# R) o5 E$ O1 v- #include "MePort.h"+ Z2 a5 I/ \! T( E
- #include "MeUltrasonic.h"4 v3 P4 ]* W" M {0 S( w
- #include "MeDCMotor.h"
( m* O' A+ Q" Q( C$ B - , Q' L) ?1 v+ _
- //double Input, Output ;* A/ j; ]" }* z2 t5 q
- float MaxSpeed = 255;+ p! f, P0 T, D8 b; ?
- float MaxPower = 180;
P- Z1 s# j6 x6 q8 y g - float MinPower = 120;
' J$ H R; h( d - float Error,ErrorAcc,ErrorDec;
* @4 e& c. M5 u" J2 ` - 3 ]5 ]0 b8 f, n) R! V
- float Kp=0.14;% _" D' Z& s+ a1 d! F: T# e$ B
- float Kd=0.00020;//23;# K% D9 S* T+ [
- float Ki=0.000201;
* G1 g# l3 j! }
% t+ u; q, G0 q3 B/ k- float nPower;
/ n, A/ k& a* k4 M* ~ - MePort lightsensor_6(6);6 k4 S% R5 t2 m
- MePort lightsensor_8(8);
" K, N$ _6 B# R0 H - MeDCMotor motor_9(9);
- _0 C( W2 S8 R/ z) u$ L - MeDCMotor motor_10(10);
3 ?7 ]( k# g+ Z1 f( c - unsigned long previousMillis = 0;5 c( h- c/ R. ~- u% e4 z, S
- const long interval = 1;
; H, X1 `: y, H7 h5 W5 i: R - 8 U2 q) |7 K. X, J' s( [
- void setup(){
& \$ n$ |5 p% w - lightsensor_6.dWrite1(1);
2 O4 n& X4 n/ Q! B3 {) K* n - nPower = 160;
! T% V5 j2 w: @0 S# L& r - Error=0;
% Z' d$ G: N; h; c" r, V - ErrorAcc=0;( l3 `( m3 t* d8 p7 O1 p
- }. ^0 _ _7 t7 i* T! ?; W' q
5 ^5 T3 E u7 p; o- S& ?& r- void loop(){$ k% J9 X7 J$ P3 b/ B( s
- unsigned long StartTime = millis();
, k& l1 o/ W. F+ P. t9 w - if(ErrorAcc < 18000 && ErrorAcc > -18000){3 _$ A' U$ L5 T
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();/ i* s' y$ S1 h/ o
- ErrorAcc += nError*Kd ;" n, B Q+ C5 ^; B% Q3 E7 U( K* q
- ErrorDec -= nError*Ki ;- v& m2 k( B8 G2 h7 b; D- ~
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
* n# s! U2 P n2 F; Y - if(nError < 80 && nError > -80){; T& b F( v+ {, }; l- y( y
- if(nPower < MaxPower){
( X# K1 {0 {8 C7 g# d - nPower += 3;
; z9 F4 U+ ], B6 S0 b. W: ?- u7 \( F: b - }) \" o' ^4 `5 Y) ]" A
- } else{
# }) [ Y2 b" i9 E - if(nPower > MinPower){$ z! J! B( V+ u. @) j
- nPower -= 2;
; U" V5 o) l" m9 m - }3 D# Y1 Z; D" I; I4 x7 m
- } " X* N' V9 B3 p% H+ w. W9 a
- MotoL(nPower-Error);
( A1 w+ ]# O: ^0 B8 b ] - MotoR(nPower+Error); + g1 Q, ]# t: |* I+ C5 r2 B
- }else{" q- h7 J6 |; g/ u. X G. ]( N; M
- motor_9.run(0);
% ^# W9 y3 G+ c3 k4 Z - motor_10.run(0);5 z4 E. [$ X9 R" w0 X% P/ q6 f
- }
3 F/ d3 g- m: w# N! [' P5 w - do{}while(millis() - StartTime < interval);$ L6 d3 O; K6 p% b% w
- }0 L( c# E* a. i/ ?
! k: h* f4 C" ?6 `# B9 B8 V- void MotoL(int Power){
$ h3 u, ]2 T$ l0 [# h, v( Y - if (Power > MaxSpeed){& W- ~" ? j+ `2 }1 e* B
- Power = MaxSpeed;
% D" V* T0 ]/ {3 a - } - J t8 n( B2 u- e% l
- if (Power < -MaxSpeed){
; v6 Y. G, K3 d8 c1 U% N - Power = -MaxSpeed;9 }' Y7 O, h) | M* E
- }
" A r. f# D6 s; f# @& R - motor_9.run(Power);$ l" u; l9 A$ |0 ]8 p# c; ~
- }
$ x1 u$ m7 O8 m# [ - ( D) B& _ c$ z* ~& z1 S
- void MotoR(int Power){
% P8 M7 B4 N3 M- m7 k5 k: r - if (Power > MaxSpeed){: R: P8 B$ l" O6 r- X; V7 F
- Power = MaxSpeed;, e/ {& l$ X6 |! m7 F
- } 8 X( i' g! D3 e- X: s- h* Q# }2 x! P# h
- if (Power < -MaxSpeed){
, [( a3 ]2 v( x, y! O# X: k1 ^ G( d - Power = -MaxSpeed;2 o- E" Q% ^5 _9 H7 p1 @( R
- }
2 M/ I5 R( d T: z) t M: } - motor_10.run(Power);
2 d0 |- u2 }) S: R# F) E - }
複製代碼
9 z$ \ L6 T9 u2 `! x
v/ `, v% q W0 z s" W; a$ T |
|