|
|
- #include <Arduino.h>
: W2 ^$ Y* x- s F) h3 [! P8 ~ - #include <Wire.h>& T0 I- z2 z/ W3 @' [
- #include <Servo.h>! K( u4 X# E& w: g5 ], ` o
% p, `* X& D+ | e: I) v- #include "MePort.h"9 \+ f G+ t& a1 ^; ]$ B$ F1 f. v4 f
- #include "MeUltrasonic.h"# D9 @; [! }3 Y+ o) R; K+ r
- #include "MeDCMotor.h"
+ y- L' D0 `2 z7 z: z. B" T4 X, q - * x% |% R7 z Z8 n% N; c
- //double Input, Output ;
$ @& m6 t T8 q( V& _ - float MaxSpeed = 255;$ {8 v' S. o+ v# Z2 P
- float MaxPower = 180;3 F* u( D8 B* d0 a
- float MinPower = 120;
9 v, R) [$ b, L& H - float Error,ErrorAcc,ErrorDec;
) J/ w$ G/ B4 e2 W9 q. i! p* I6 U - ( r' o5 A( x* V$ G- h) a7 a! Q; Y
- float Kp=0.14;
; ^0 P' J( b9 V; q/ \ - float Kd=0.00020;//23;
- P, B" x2 R, |4 g/ n - float Ki=0.000201;% q) g/ E! B5 j6 g' L; X. T
- , m2 V6 d0 h8 \1 o9 |: s
- float nPower;. |1 V: i' U9 \. b# t
- MePort lightsensor_6(6);* {) `& v( ^' i1 d3 Q5 j+ N+ S- L9 _4 T
- MePort lightsensor_8(8);
3 N/ p }2 p; g( A/ ? - MeDCMotor motor_9(9);
# C- F X8 L- ]& g - MeDCMotor motor_10(10);3 j& X# {5 {* w4 l# |# N1 ^
- unsigned long previousMillis = 0;
1 d$ z" S/ G, U9 _3 q$ m: L% j - const long interval = 1;
9 c0 s- y y# X" g1 J& x9 s/ W - ! e' e! _5 n( d- h8 ~9 e
- void setup(){
1 A& W2 g& q" z2 E1 B - lightsensor_6.dWrite1(1);2 m7 s7 F1 m% W: @
- nPower = 160;
6 C x4 j1 E: R - Error=0;
) b' o# B) q8 x6 B - ErrorAcc=0;
" \1 i6 O& |8 T" } - }5 |/ z1 ^) t8 d
# z) N% ]; ]. @5 K- j- void loop(){
0 ]: O! M+ c: z8 p& @) N - unsigned long StartTime = millis();
$ t. b, A! U0 M8 O5 j, D/ A5 J - if(ErrorAcc < 18000 && ErrorAcc > -18000){
7 q0 M5 c* s) x - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();$ z" K% o9 X) O5 H: O
- ErrorAcc += nError*Kd ;0 [5 K6 W1 }/ a9 I& D8 _
- ErrorDec -= nError*Ki ;
) ]. M9 i# f/ I* ~0 Z4 a; T: Y - Error = int(nError*Kp+ErrorAcc+ErrorDec);5 H7 _) ]2 C! Z$ y* `' t
- if(nError < 80 && nError > -80){
+ {5 l' l. \5 ~* v% {( p - if(nPower < MaxPower){
& v" X3 ? ]7 T( F) O0 X# @( L - nPower += 3;
0 P( U: e, c- X6 B: Q - }
( Y' T/ L }& b8 _# Y; \% U - } else{/ K0 m1 T0 M5 M/ G
- if(nPower > MinPower){
! V( q+ Y+ p2 J - nPower -= 2;
! X1 _* t5 g( f - }/ H2 d8 g. a4 g- @' M5 N6 H1 \6 I) S
- } + a" `2 K6 i& Z3 {1 r: @8 s1 o
- MotoL(nPower-Error);
7 b6 ^4 N/ Q$ j6 V - MotoR(nPower+Error);
9 N. h6 V0 l- ` S0 V* K) [, p1 k6 N9 ? - }else{6 w( m) s+ I% k; l, Y& F
- motor_9.run(0);
7 i+ y) p8 L, X1 J8 s - motor_10.run(0);
6 N9 |- W4 D" x8 x8 M( v# t% l - }# [; s% e3 ]' Z9 G% G0 G
- do{}while(millis() - StartTime < interval);
5 |3 J7 B9 O0 r, r' {$ n) e - }, d* f d1 V* k/ m: E
+ F3 X! D5 S0 h- U8 W: P- void MotoL(int Power){
3 h/ d/ j! M& }1 D) R" u2 I' I - if (Power > MaxSpeed){3 j) A3 V/ L0 N1 z( V1 A
- Power = MaxSpeed;: V7 [2 o# V; Z, H" F3 {" w4 P# s
- }
3 u1 B: F# i1 X! B( l - if (Power < -MaxSpeed){
& ^) a: U, O" }0 q/ E2 ~ - Power = -MaxSpeed;
9 ]6 ]3 z, F! u( Q% } - } 6 w2 d$ \0 u# v2 Q) N' e
- motor_9.run(Power);
7 E4 K) q% {9 }% V; Y! j2 z - }
" Y H9 d: j+ @& Z2 }% }
% H! M" T" ], ?- void MotoR(int Power){ d% p. z, [3 Q& X) L3 I
- if (Power > MaxSpeed){
) E; R" U( C. v' O+ g* S - Power = MaxSpeed;
( B1 g7 ~0 B- F9 D - } 2 o2 C% b! ]9 m$ v3 `- N
- if (Power < -MaxSpeed){- [& C8 ]7 t" j1 e
- Power = -MaxSpeed;) J G9 s1 V6 @0 e
- }
2 W" F, [+ K/ D. ~+ M - motor_10.run(Power);
! p# o" z9 @+ F" ]/ f - }
複製代碼
- \0 v" Q# I5 n( P( g( `+ Y& T$ z& E3 r( S* I* w& P
|
|