|
|
- #include <Arduino.h># ~; y* M/ C' b
- #include <Wire.h>
, N/ N3 p% R1 |- x: v/ ~ - #include <Servo.h>
/ v( P7 K6 \ d) ~" K- B$ P
7 r3 r# H" i" z+ j |! T% e5 [0 n- #include "MePort.h"
: F4 d, v* j, Q$ e1 J4 O! ~7 U - #include "MeUltrasonic.h"/ J. i+ m2 r- j. P+ ~! w" T
- #include "MeDCMotor.h"
, z" s# i( E- |+ e P* E m - % q8 H' F( u( `+ Z3 Z) h
- //double Input, Output ;
/ P5 M0 S) O: p( u( O$ e - float MaxSpeed = 255;
0 X B# ?1 L0 U3 |: [ - float MaxPower = 180;
/ H# } e1 z3 e: ~ - float MinPower = 120;5 k! d3 ?7 p6 ]" [% z
- float Error,ErrorAcc,ErrorDec;
4 a6 M* w; i C* A/ u+ a
1 u: C9 |& c3 v- float Kp=0.14;- N8 [2 k: |# m8 s% V7 k
- float Kd=0.00020;//23;
# g: ~, z; M2 y/ G - float Ki=0.000201;! ?% o. W& Y+ K0 J
- 2 D7 H; ?' A! I6 w- X s
- float nPower;
2 e* K' A. a+ f9 }+ j% E2 y - MePort lightsensor_6(6);
T* M6 {( y4 T' l( Z- x - MePort lightsensor_8(8);7 x; ?, x4 P; y& g6 A& ^
- MeDCMotor motor_9(9);& G: R+ ]# |& H. R& E* p+ A
- MeDCMotor motor_10(10);
) F( A$ ^' }* F1 P& a# M7 B - unsigned long previousMillis = 0;
3 Q: ~* `" ?% l# s% E1 t5 { - const long interval = 1;
* a9 k U9 E4 L7 s. n% \: } - + a/ Y8 x+ x+ ]: Z0 E8 M( v
- void setup(){" y7 r$ A+ V& {& }" H# K3 |- |0 t( L8 F
- lightsensor_6.dWrite1(1);
" Q) e1 j7 B# L( G8 g) t1 W. I/ } - nPower = 160;
4 y: \ C( K9 V0 e - Error=0;
, ~8 E9 \9 ]1 Z$ L9 m: x' q5 Z - ErrorAcc=0;5 q, J' n% ]; k- h1 s4 C. q. v
- }
1 g! ? r6 \6 V% Y - / L$ ~" \# g5 R: C
- void loop(){
& I$ T- \8 l/ m/ G( J. g# M - unsigned long StartTime = millis();
5 {+ v' d; B6 i: Z2 i$ R - if(ErrorAcc < 18000 && ErrorAcc > -18000){
' `! a2 m* o, `: s% D; G - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();, Z+ ^2 a( V$ s4 V+ J0 F5 T, K
- ErrorAcc += nError*Kd ;5 N; |: X& _7 k; R
- ErrorDec -= nError*Ki ;
' x2 d9 B: h* \2 S2 [ - Error = int(nError*Kp+ErrorAcc+ErrorDec);
/ H- V. ?& \' w$ U - if(nError < 80 && nError > -80){
; Q2 I6 q" P" z% Q0 Y( @ - if(nPower < MaxPower){
6 z$ L. B7 D7 l0 A3 S8 x- O2 T - nPower += 3;/ r* D8 C3 O- ]5 W9 W4 Z8 ~& B
- }( @+ q* V" t* z- r% x( `
- } else{
& \, N) b* H0 \% C; r, B+ o& Y - if(nPower > MinPower){
& u- `4 N% H) H$ k g - nPower -= 2;! V) |3 s! Q R
- }
7 U! c2 @ @; u( ?6 l - }
1 s& r5 j% s3 l7 m b* N - MotoL(nPower-Error);
& M( p1 M4 N1 j" n1 X - MotoR(nPower+Error);
- [" h' w, }/ ~% \, }0 y3 X - }else{; R5 ?5 |# T* P, G( X" n# |4 m
- motor_9.run(0);2 o* W2 s- [4 e7 N
- motor_10.run(0);
7 k! x8 [' k9 ` - }) I! \# b7 x8 ^3 g
- do{}while(millis() - StartTime < interval);7 N5 k7 l! K; G' i! k& C1 B
- }
& v: p) C5 ~; L
' t! ?, g s% [+ N8 s- void MotoL(int Power){6 \5 K( ]4 o, U) k
- if (Power > MaxSpeed){! q+ O( o: I( B- B8 J2 z
- Power = MaxSpeed;
. x$ a9 _9 n# i6 P9 @ - }
9 [1 o. k, e9 g7 a/ [7 C# G - if (Power < -MaxSpeed){
[/ E, x0 M4 s: I( ]$ a - Power = -MaxSpeed;; g2 W' |- r; R* q! ^
- }
x/ W% ~& X4 X+ H. g - motor_9.run(Power);7 I& c1 D7 c; f+ L$ K0 r
- } / Z8 V8 e! ?- q" `: o6 Z
" P+ d7 d- P& ?: I4 B+ j" d" ~- void MotoR(int Power){
% i4 n! n; [7 o' {4 V* E; N - if (Power > MaxSpeed){$ k/ t* B/ ` {% q1 |
- Power = MaxSpeed;; B" s& S, i2 D( ^0 V& W
- } 6 r- ]- m/ ^- U& U
- if (Power < -MaxSpeed){
; S/ i4 @. D; ?9 Z5 \; F5 { - Power = -MaxSpeed;% K0 }3 {5 Y- ^ B' Y
- } 0 J" T R" P3 ~% T
- motor_10.run(Power);; B- A" ` H6 r' P
- }
複製代碼
) ?4 s3 p# w J2 y# }6 Y
+ F N& ^, _3 X% D! |6 I' \+ y. |2 v# O |
|