|
|
- #include <Arduino.h>
6 T9 H1 l* f# D - #include <Wire.h>
* Q6 z3 t$ P6 K; V/ l2 ^ - #include <Servo.h>
# m' Q$ }" Y! q6 r$ ?
! _* o9 |" n! y6 g( e/ C- #include "MePort.h"1 s- V% X* H: Q. U1 b6 T
- #include "MeUltrasonic.h"
: Q$ Q- p1 ]$ k: i - #include "MeDCMotor.h"
$ M2 C& a$ o4 [- c6 Z9 L! B Y - 0 h% ?' {* D# w7 t5 g( d$ p y
- //double Input, Output ;4 q; e- v0 A4 a( O$ ^+ z6 C. s$ L7 D
- float MaxSpeed = 255;% B7 X0 w. n4 M ]7 H2 {
- float MaxPower = 180;/ V8 V+ G; L/ A! O
- float MinPower = 120;, @! a: R9 E0 D( L& o7 V- f
- float Error,ErrorAcc,ErrorDec;8 A7 E+ a6 I( [' C- e
- 4 n$ P% g5 A3 g( V( ^: ~2 g
- float Kp=0.14;
" T! c3 m% f% Y/ H' o2 m6 ? - float Kd=0.00020;//23;
, A9 m+ o0 T; B* K+ } - float Ki=0.000201;
# L8 [3 m% l. g
" n1 k+ v) D1 g* t- float nPower; L( b' J2 E8 }0 S3 y
- MePort lightsensor_6(6);
' c" L7 g9 V. j2 m5 }8 s - MePort lightsensor_8(8);* M0 ? m' x5 _ Z
- MeDCMotor motor_9(9);
* x0 v, f& \' ~: U* K, G - MeDCMotor motor_10(10);
5 q0 _3 j+ i( Q, k+ { - unsigned long previousMillis = 0;$ L, _) N; u' l7 q+ d; [' x
- const long interval = 1;, |0 F; N' W8 s5 q9 c- I
/ [+ M; d( H$ ^( b- void setup(){
- [; e+ f1 Y, e - lightsensor_6.dWrite1(1);; o3 W) G: Q7 W: r) A
- nPower = 160;
2 f! p% x5 ~$ ]5 n/ s4 l; i. H - Error=0;" q( M; n: I3 ~3 t; b6 k- v6 A, C: \
- ErrorAcc=0; I& }. Z7 o. O3 b- k; Y, f. n* _
- }- k( K; I p' `9 C8 Z3 A
- " s8 O$ s5 w6 v" x! P
- void loop(){
; @. t* v+ U: k% S - unsigned long StartTime = millis();# o# b6 w' M$ w4 N$ j1 a2 d
- if(ErrorAcc < 18000 && ErrorAcc > -18000){% t3 T( j) |3 O: P" t
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
% ]( g- [$ V5 e4 R. l, u/ r9 \ - ErrorAcc += nError*Kd ;
6 y* m K3 |2 F8 ?* n# m - ErrorDec -= nError*Ki ;6 ]9 C7 E/ L$ O
- Error = int(nError*Kp+ErrorAcc+ErrorDec);+ w, K; }) j( d- v/ d& J- I
- if(nError < 80 && nError > -80){# T* b, z" \$ m+ s9 ? I2 y) n
- if(nPower < MaxPower){& h+ {& W" u7 T7 q
- nPower += 3;& p; {" o0 j1 i4 j! O% g8 S' x6 U
- }
. m3 t' `; x4 i; b8 `+ E: p& r - } else{- k, L- D5 G( ~& ~% O- g; U" w
- if(nPower > MinPower){
% X4 b5 a6 w! p8 v, I" l r' W$ I - nPower -= 2;
, Q& t. h& x! [) ~8 n7 G# @! p - }. O- `8 l4 ~7 k! ^9 F/ j0 @
- }
0 ?6 O$ w; m6 F4 C5 D- z: v7 z, R4 h$ ^. H - MotoL(nPower-Error);5 L, U9 P! v- `; K2 f
- MotoR(nPower+Error);
4 e0 J- C/ T1 n - }else{
1 r: |; k6 Z2 _& }! l( V1 e' z - motor_9.run(0);* u `& B9 t0 \# v& W; K
- motor_10.run(0);
) M' b$ G/ K: @ h - }" l4 w) w, k; _5 ?1 q6 r( {
- do{}while(millis() - StartTime < interval);
# e) ]% ~) T1 r3 i, l* |6 W - }. c! W) m; p6 W+ U: }
( l: j, @& g6 ^5 m* C- void MotoL(int Power){
+ b* C, G3 J" w- h5 e- c - if (Power > MaxSpeed){; Y+ i, r( n. u7 j' x3 p
- Power = MaxSpeed;
% m: ~) ^% q6 ~0 E4 n - } 7 o* e$ u5 N9 w
- if (Power < -MaxSpeed){! R0 e' L6 \) l4 W) c
- Power = -MaxSpeed;
! ~6 D/ n6 Q8 L - }
9 g0 L1 E, X4 }7 ~ - motor_9.run(Power);
. q1 U ]0 a: ~6 Y2 M& P - }
1 n2 J8 u: l* ]
# T# i6 H: d& G9 t- void MotoR(int Power){% n7 L) B3 B2 t3 p9 ]" U
- if (Power > MaxSpeed){9 o8 G! F0 O4 Q# M0 m/ s& Z
- Power = MaxSpeed;
" v* K; E+ t) c) V( x! `0 K' h8 o# Q - }
7 V2 {4 b! k2 I3 q' Q, a - if (Power < -MaxSpeed){
7 u7 U/ ^3 q8 a: | - Power = -MaxSpeed;
5 N* O2 @9 w b3 [% {6 n. E - }
# v0 Z& K2 [; c; q - motor_10.run(Power);
7 S7 L: g1 N) `7 w2 v# V& J - }
複製代碼 1 k) L `0 a; @, D) \
* b3 V7 Q' e3 h, a/ |; Z+ m0 V |
|