|
- #include <Arduino.h>
: o W) V# p: [% Y0 I5 K" t - #include <Wire.h>
0 P7 v" W8 Y! y - #include <Servo.h>
" B, i9 n5 T$ L
/ Y* L9 F- T5 X5 k- #include "MePort.h"; k5 P9 y J# Y8 Y; d5 T
- #include "MeUltrasonic.h"" u$ x; G. ?9 ] y$ ^; y
- #include "MeDCMotor.h"
( h" ?( i0 }* i
! {7 b$ g) o4 w- //double Input, Output ;; B6 L4 H3 X- `" M7 q
- float MaxSpeed = 255;5 {/ l: `6 t; I3 M- ]9 `
- float MaxPower = 180;9 x" k- W8 y- s/ p: K* S% ?! \
- float MinPower = 120;& q! j' L9 n$ e4 R. q
- float Error,ErrorAcc,ErrorDec;8 \) U; M6 a, Q9 N( K7 S
3 b# j/ J% b- n/ J8 \0 i- float Kp=0.14;' P2 C7 s' d* L
- float Kd=0.00020;//23;3 k" z: N7 ]; A- u/ a6 z
- float Ki=0.000201;
% c, Q# y6 s+ V" |- P3 t0 s
7 v: T9 D n) T* S1 N! o0 h- float nPower;' ~( |7 f, M' u
- MePort lightsensor_6(6);
* c# {% O5 c6 e1 c+ V* c - MePort lightsensor_8(8);# l9 P0 R7 ?: L/ [
- MeDCMotor motor_9(9);
6 z' k' C' Z, Q* i% G; k - MeDCMotor motor_10(10);
2 ~4 @6 f }( U - unsigned long previousMillis = 0;4 p7 T; C7 Z% V9 F
- const long interval = 1;' V* x4 B$ Q3 l1 ~' U1 \
. n9 j; F x7 v, Q$ |4 D- void setup(){
4 v% D/ R$ E! P5 Y0 b5 V - lightsensor_6.dWrite1(1);( m+ ]/ Y9 s; @" i
- nPower = 160;. h5 c* u' R) P M, U1 i' A
- Error=0;
4 r5 Q. M9 S6 N ~ - ErrorAcc=0;
" h5 G M) ]2 }" ?9 [2 L% C! u - }
! k: i# f6 F! X5 D$ U3 Q - % e7 p* F% D- s- w$ s | V
- void loop(){
8 t! T* D" o: f5 e/ } - unsigned long StartTime = millis();+ ?% ^2 B- e7 D" S! d
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
% T+ l$ a( n1 v$ b( q( b - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
2 Y1 B; w+ [ `& a2 T) F - ErrorAcc += nError*Kd ;
0 Y4 v' l+ y: h ]$ y0 f$ W - ErrorDec -= nError*Ki ;0 `; z- V) x* E
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
! q- {# G3 [6 `- _/ ?& R - if(nError < 80 && nError > -80){
& o7 y* L- G% D; @) q& u& ]: Q - if(nPower < MaxPower){3 V9 q0 {0 Z7 X8 Z* P" n- T6 G
- nPower += 3;
7 o% l' q# G: u/ X) [3 `; a7 k - }! K6 n- Z4 L3 W s5 ~2 O- e
- } else{3 K+ S- @0 B3 |! m0 s( F2 q
- if(nPower > MinPower){
( o6 e5 Y! P1 o! B' ]: S+ ]2 K - nPower -= 2;
% [5 {5 K) A4 z& H - }7 m: B$ u& c/ P) l0 y
- } 8 }+ M- q( m: p8 V/ V2 C6 h
- MotoL(nPower-Error);
( f; M$ ^, v* e - MotoR(nPower+Error); ( s5 G1 @+ c* ` @9 B1 y
- }else{% t" U1 E8 q4 J# z* h- ^, Q5 `4 j
- motor_9.run(0);$ A1 z) K; D2 d; e9 I. L0 m
- motor_10.run(0);5 R2 `; K+ @+ T* t1 X, @9 n" h
- }
. y! D+ o' G! V2 C: y& N. l - do{}while(millis() - StartTime < interval);
1 `# c" M: F2 v- f- n( F: A. |3 { - }
/ k& j: q; M9 d% i$ J0 T# Z K
/ B: G, j7 B4 o( t* A8 R. r- void MotoL(int Power){
/ ^8 }1 Z1 n# B6 ?: n. H - if (Power > MaxSpeed){
: p4 n6 f; j7 Q+ L2 S* j- { - Power = MaxSpeed;
7 r2 u' n# H% Y7 U% Y - }
5 Y( U% I& @) f, ` - if (Power < -MaxSpeed){; L1 A- O2 ?/ H6 T: s
- Power = -MaxSpeed;
# X: V, S4 w) e5 k, C7 {6 P0 S - }
; c' N* s! I1 x ^! C - motor_9.run(Power);
5 J' ^( Q% R' ~4 G - } e+ o2 k) p) J& P
. b$ f8 J: s* v* b3 k- void MotoR(int Power){5 z E: \0 Y+ b4 X" D& m
- if (Power > MaxSpeed){. e* d' p0 |3 ^. f0 D, p8 D0 ]
- Power = MaxSpeed;
! f% i. N5 k* | - } ' c! n% `" u$ {9 B V, M6 O
- if (Power < -MaxSpeed){
& [* m. [/ y+ R$ j - Power = -MaxSpeed;7 V; x* ^. K" |4 H( N7 c! G
- } ( k& B$ U2 j' W5 A9 P" K
- motor_10.run(Power);
Q# I" l6 y1 R - }
複製代碼
) O' C3 h, w% q3 L4 L8 l% I3 K0 H
# B* w, X& h$ ^/ E- `9 H1 p |
|