|
|
- #include <Arduino.h>! n- B* f' B$ q* ]
- #include <Wire.h>1 X/ w; [" T0 V* f/ k
- #include <Servo.h>
6 U J1 F3 l& \ W( X* f% |9 ^ - . C( t$ p& U/ R3 O
- #include "MePort.h"
& \+ ^4 @" z6 R8 B" S - #include "MeUltrasonic.h"5 \* O: O) j& I" \( L8 R
- #include "MeDCMotor.h"
$ f. }$ z, H( V
/ m) t6 C6 K% _+ H- //double Input, Output ;1 S% l" ?4 n$ g+ d) L% _/ `6 [6 ^
- float MaxSpeed = 255;
! I$ I9 J% e. x# N' L3 r0 z q) y5 S - float MaxPower = 180;
" Y0 \+ D/ N5 Q! p _* M a - float MinPower = 120;
# E1 a) ]" W, x4 {- a8 G - float Error,ErrorAcc,ErrorDec;+ m! X& R9 |' N. T- N
- 5 s0 F0 j+ U7 E
- float Kp=0.14;
, ?3 L% Y; h T2 l: c9 _$ A0 e - float Kd=0.00020;//23;6 N& b6 j7 w% P* y$ i1 G; D# e5 r
- float Ki=0.000201;4 |- R1 Z: @5 j3 J! X
- 3 e3 L7 k4 z* c5 w
- float nPower;
1 @$ V/ S; `, R! ?7 Y9 J - MePort lightsensor_6(6);/ l5 H( I/ z9 Z$ F B; v
- MePort lightsensor_8(8);! y& E: [ V& V
- MeDCMotor motor_9(9);
# I) F$ B! P; n9 I* N - MeDCMotor motor_10(10);3 i* a) P0 R! z; [: f- Y; A& c
- unsigned long previousMillis = 0;( l7 z5 \" c$ U1 P! w% o
- const long interval = 1;6 l( }/ O& g5 \$ X
3 l7 ]5 ^, ]* o- a- void setup(){- H$ C7 R" d6 U. W, J
- lightsensor_6.dWrite1(1);- `7 J1 `- O5 Y! k) X0 v& q6 z1 Z
- nPower = 160;
+ Y+ Q- X+ y% _9 t$ x7 I& C L - Error=0; {- o3 `( \# ]1 s/ T
- ErrorAcc=0;
8 Z5 W1 E9 y% T0 M - }
0 d' v+ F; H: {* O
3 R" y) F4 t- |' Z+ Z7 h- void loop(){' \6 S; h# x$ v8 H7 P: T
- unsigned long StartTime = millis();
m5 r: u a9 ^3 I- t! j6 {( D" e - if(ErrorAcc < 18000 && ErrorAcc > -18000){
j. [: }; Q% P& k - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
( Q# b, S: w4 J3 S( } - ErrorAcc += nError*Kd ;
/ k) t, u. X5 {. F% d$ P - ErrorDec -= nError*Ki ;
- R: x' w. i4 C! O5 `- ` - Error = int(nError*Kp+ErrorAcc+ErrorDec);
1 ^. W( B; p# T3 U8 r- X7 |, z - if(nError < 80 && nError > -80){) j7 M% d) T" f& Y
- if(nPower < MaxPower){+ s/ B+ D4 p) o8 I z
- nPower += 3;5 W2 ~4 u1 c/ B) s1 i' Q5 n, ?2 Q
- }' ~; Q% `. L* x7 {* a5 h
- } else{
/ W, x9 z \, W3 q - if(nPower > MinPower){
$ {5 p! {3 F$ f1 C7 s0 P5 G, [ - nPower -= 2;4 [& T. l9 j2 [6 `1 o* ]2 J
- }
! s$ m$ v# z; O - }
5 ~' T3 N$ w! q* I. w - MotoL(nPower-Error);
( [4 s: |8 b/ Y6 R: |& x) ] - MotoR(nPower+Error); ; W9 L: a9 ^+ @+ H
- }else{
: q2 H1 b2 |/ t2 ~0 G/ z/ p1 b - motor_9.run(0);3 {4 z2 `2 \' N1 i
- motor_10.run(0);. _% }; E& M z
- }8 x; F' G7 t5 ^+ t, I7 ?/ ]: r
- do{}while(millis() - StartTime < interval);( l, t* p. p$ E1 q- e% U# S1 ]
- }
. q/ U/ i) v) S3 x - # p) K7 B4 W8 |
- void MotoL(int Power){
I- Z& R7 x! c - if (Power > MaxSpeed){
% E3 A; V+ A7 T: r5 S - Power = MaxSpeed;
5 f" S$ ~, a# G2 E - } 9 A3 c: y) S! {7 r6 n! |$ \0 V* T
- if (Power < -MaxSpeed){' _: J) a* A3 s* x8 u4 v
- Power = -MaxSpeed;7 @" b7 p b# s! a5 Z
- } : D1 ^! d+ v* M6 g% e
- motor_9.run(Power);
. ]0 e" E, A* p7 v% ^ - } - m) u' v2 C. d3 r1 O
+ g1 Q7 [% k+ M2 A" j- void MotoR(int Power){$ e% N" _" [5 x$ h; ^* O/ e* Z
- if (Power > MaxSpeed){ T/ n, s4 l, N& E( _% w
- Power = MaxSpeed;' F: Q2 F8 N: ], B+ r! E/ q
- } 1 O; f! y! E y1 A8 O
- if (Power < -MaxSpeed){& z) Y' [- d6 t. n0 W& q% Y/ }
- Power = -MaxSpeed;# ^* D2 E8 A8 T e* v: e
- } S6 f7 O& w8 J8 h( o
- motor_10.run(Power);" ?' J# E5 I r, h5 W: Y
- }
複製代碼 4 v. [( k' Y9 A# U7 I
$ j3 b8 a" i8 D% a |
|