|
|
- #include <Arduino.h>. d4 ^/ Q0 z( B8 E/ \+ F
- #include <Wire.h>9 b, k E' t+ F$ ?
- #include <Servo.h>9 s$ V% e. O0 q% C+ \% {
- + B m9 h7 B: u5 v9 f
- #include "MePort.h") Q B& v8 G- [; [
- #include "MeUltrasonic.h"
) `3 I3 Y: ~1 o l/ `: T - #include "MeDCMotor.h"" p! r1 Z! b& x6 o" K- K
- , p1 @* g( g0 C0 n* U4 |% ^
- //double Input, Output ;
7 k2 m; h- ~$ r- D/ ^+ v - float MaxSpeed = 255;
; A' @. o8 R; F% X. \6 l# N( u - float MaxPower = 180;
1 j+ p- a% E& \& j' a - float MinPower = 120;5 T& @# ]8 x. a2 A6 Z9 a
- float Error,ErrorAcc,ErrorDec;
3 S! V. X) Z8 s6 S4 |3 Q: g
% `+ I @/ A# x& Q, T8 f- float Kp=0.14;5 j/ b/ Z/ }5 `$ f5 e1 ~
- float Kd=0.00020;//23;: P0 v, h+ a" o
- float Ki=0.000201;! B6 G# |: I* W1 Y( m3 G% B
- 8 \7 m3 N; H' V) P
- float nPower;+ H6 x* C. t6 h3 \; J
- MePort lightsensor_6(6);
+ |& i5 X8 r$ P, ]4 J9 \7 j - MePort lightsensor_8(8);% E. b' @- a# g" B% K4 ]3 h
- MeDCMotor motor_9(9);
; ^$ Z( V) V& {; [4 P - MeDCMotor motor_10(10);9 S) `' R; g+ `* w! B$ z) z2 f
- unsigned long previousMillis = 0;( C2 r5 H7 u6 E1 l2 h _! m2 V" [# d7 b
- const long interval = 1;/ H% k8 g$ r% ~' {' ?
9 J3 Q1 G; L! e H( D; L- void setup(){. F8 x0 o4 `8 E X2 G# W2 `: c4 m
- lightsensor_6.dWrite1(1);( e$ a$ _/ f* X- q) k5 @* g( I2 P/ s
- nPower = 160;
+ L3 @- R; O7 q# p - Error=0;' U% E' i9 I( T3 ^& i
- ErrorAcc=0;
( g) P% \! N8 _3 z$ M) S: a - }
% y% U( N5 c- R! @
7 H& Z1 @" F) P- void loop(){' S+ h+ R+ U0 y* {
- unsigned long StartTime = millis();
, r' b4 z; [- ]" z5 Q9 q4 s+ W& P - if(ErrorAcc < 18000 && ErrorAcc > -18000){% ]2 L3 [. A/ x0 K
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();, V& G- c/ @6 p7 |
- ErrorAcc += nError*Kd ;$ [4 W2 {) Z4 v
- ErrorDec -= nError*Ki ;/ j* }1 a; Y" k1 _/ |- x' w# x
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
- t: }- Z/ d2 X5 J. p3 p, F3 c# | - if(nError < 80 && nError > -80){( M! r' _' g5 Y }, Y( r, ^, G" q% e
- if(nPower < MaxPower){( v; p- [" H& x4 P) X
- nPower += 3;
?, ?7 {1 l/ r7 A2 Y( b# Z - }, e& U+ S& g0 i9 N9 m3 L
- } else{
' }" r% O$ \; f: t* v - if(nPower > MinPower){- r! l, z, g! `. J
- nPower -= 2;
! y( Z& u! m2 v0 v8 { - }
, e7 d$ a% g& @5 O& s* w6 U - }
t/ d6 z# A# c5 k& v - MotoL(nPower-Error);
3 I4 n! x; j: C - MotoR(nPower+Error);
2 p7 n$ x8 ]1 J* U - }else{
( _! a' ^1 E6 E+ a( ~- d4 z - motor_9.run(0);
3 U/ f8 B- Z. u+ J& r1 K - motor_10.run(0);4 r+ D, ]: }" g* F$ O" F \
- }
; l( d! f( o0 ~9 I - do{}while(millis() - StartTime < interval);4 j# I; U8 [) x3 s% ?/ X
- }) ^: f% a/ T! I O, t
9 U1 r( k9 m7 T3 e* B# g5 n7 ]0 @- void MotoL(int Power){
7 I+ D: g( B+ R7 K- t* I - if (Power > MaxSpeed){
/ X% q6 {8 a9 A" v' {, k' N ~ - Power = MaxSpeed;
* E0 t5 c: k% A) ?1 g9 H - }
0 {& ?- h( x5 \0 j* U( n - if (Power < -MaxSpeed){
1 `' C) G: L/ Z( Q) c! s# s - Power = -MaxSpeed;
5 a- z) g" v; I: @7 K1 e8 ^( y - } , f# _6 E' K$ ?1 A0 ]# q
- motor_9.run(Power);& _ c5 u1 f; @4 M
- } # u2 y( ~' I3 W! }7 J9 X
- ; i" q4 s0 e* V, l
- void MotoR(int Power){
" X' @% |4 K% S/ M - if (Power > MaxSpeed){, y$ i# H" f4 y. P9 B' ~! h& X! [
- Power = MaxSpeed;! X* J9 t2 e$ q6 j+ |3 y
- } 0 c! a3 T4 H" A& `
- if (Power < -MaxSpeed){2 f% r! d6 ^% D& Q: T7 x! f+ Y
- Power = -MaxSpeed;$ l* R- H% | s! V+ U
- }
1 @* |+ i% [3 {5 |! a! z - motor_10.run(Power);
1 {& G4 J/ u3 n0 T/ {* f - }
複製代碼
2 ^1 m# h- H* ?6 U# ~
$ n$ e S- s; l! G5 N |
|