|
- #include <Arduino.h>" g! n- o g2 U5 U
- #include <Wire.h>, J1 j% O9 L/ R- ~2 m4 K
- #include <Servo.h>
+ e. ~# t/ u& z2 \ - , {5 R( Q+ L3 M0 P- f* p( j. }/ W& \- A7 B
- #include "MePort.h". o, u& n. i3 T7 R# x" I2 `
- #include "MeUltrasonic.h"
+ T: u: K- u4 S e& H& m# B: [ - #include "MeDCMotor.h"
; D- q) z( j" e# C! w6 I
8 S2 T1 o# \4 \# T$ o" ?- //double Input, Output ; s W' V' ]; w/ C9 p( g
- float MaxSpeed = 255;
) R/ y) v+ g' g% B- u# t& J - float MaxPower = 180;1 k$ Z- M U- \) o; {% q
- float MinPower = 120;2 n' R. _, b. j5 a4 Z# v
- float Error,ErrorAcc,ErrorDec;
, ^+ L. O7 ]; L, c* m9 c" y- O" ^
4 [$ D& `3 C& c7 t- float Kp=0.14;, y6 T. e6 U* c
- float Kd=0.00020;//23;
2 p ?5 n$ w w$ o% N! p+ k! }) I - float Ki=0.000201;
% X/ q) B1 T& W9 @4 k k0 b - 6 ^$ ~6 [% h' _3 i
- float nPower;
, |& \0 p" N2 g8 R: l - MePort lightsensor_6(6);
4 ?% h( B7 t4 r - MePort lightsensor_8(8);) t2 f$ ]& B* f+ E
- MeDCMotor motor_9(9);
; @5 i: G$ m% E - MeDCMotor motor_10(10);$ [/ z6 M& o3 e& F! j
- unsigned long previousMillis = 0;9 n4 F1 o- g& w) e& g5 C
- const long interval = 1;
$ X1 \4 t9 L, ?) r P0 G9 m9 t
) T7 v Z7 c6 F& S0 _8 J- void setup(){& n# M7 Z( b: v% P3 a
- lightsensor_6.dWrite1(1);
* G0 H/ f9 y1 R - nPower = 160;
. V, g" e1 E* S% O5 z+ C - Error=0;2 O2 a4 C# G. K: }! R6 V
- ErrorAcc=0;: N+ h8 W3 h+ F R: ^0 W% o
- }9 w" `& @$ W, g
- + n% o; j, j0 V; t9 M
- void loop(){: p" T# ]; @7 s( @* q
- unsigned long StartTime = millis();' r3 K( \9 P' s; e }1 r
- if(ErrorAcc < 18000 && ErrorAcc > -18000){( R2 e# l: @2 D. p
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();+ x% x6 V, I& X; ~ j
- ErrorAcc += nError*Kd ;# }1 P& M O! b! m
- ErrorDec -= nError*Ki ;
- S- ]* D4 N7 v2 f - Error = int(nError*Kp+ErrorAcc+ErrorDec);
/ J8 q4 X4 t* @$ I; `+ ^+ m - if(nError < 80 && nError > -80){
4 g' E, j. h4 U) l% H8 k% f) i - if(nPower < MaxPower){
2 _; e+ A+ b% O& _2 I2 N - nPower += 3;
G# n6 k8 I7 e& ^. h* q7 [; d a - }+ X) G! \/ u/ P2 U
- } else{
: k& ], x: u4 q1 E5 M D - if(nPower > MinPower){$ p5 M. @+ C/ B: @: G6 t
- nPower -= 2;- F5 O W7 T6 |
- }$ f% J2 [# R; [6 r$ E2 |6 n
- } 7 @4 i& {/ V* W, @8 [
- MotoL(nPower-Error);8 _) ]2 U# q! _0 P" d# \
- MotoR(nPower+Error); 8 V- K: n5 `& E Y/ n2 b
- }else{5 ~. g2 N4 H- D5 }8 k
- motor_9.run(0);
! ^( N* \) w5 C - motor_10.run(0);
: m8 s5 g# ?* O" h3 l - }
6 ], q) `; @7 P& g7 f7 R. @ - do{}while(millis() - StartTime < interval);
9 b- j9 ?* s+ J - }
1 b! |2 M( I# G
[( Y0 e2 Z! O( t! \/ c4 j- void MotoL(int Power){4 u1 E! x; S. L& ~: U
- if (Power > MaxSpeed){+ i* W. }, Z- i$ [& c2 y1 D. s
- Power = MaxSpeed;2 z4 T) o( c7 w% O' S
- }
+ P/ D8 ~' z0 s/ C - if (Power < -MaxSpeed){) L, E4 X* c% B2 ?0 d8 Q4 r
- Power = -MaxSpeed;
! w# d0 J/ w( {0 v - } ' u9 Q- t a, a
- motor_9.run(Power);
- J" f% M0 K s - }
7 o8 K9 X* A5 |% O. }% _
4 q" l3 H9 L% f! ^' d- void MotoR(int Power){
! l0 w) v) d; h$ L3 ~/ ?! L8 R - if (Power > MaxSpeed){
8 I& i* A5 H$ t& M7 |4 j5 z# N - Power = MaxSpeed;
3 k" U& A b8 L2 c - } 0 S% y3 {' h/ G- ^0 U
- if (Power < -MaxSpeed){
0 o/ M- _# w- G2 T+ v* U - Power = -MaxSpeed;
* }! a8 G, E; X, M3 Q. A! U - } C- @* U9 d* N7 q9 U
- motor_10.run(Power);
- q" {- d. v0 D' J' J6 ^) F - }
複製代碼
* j& e% E% o. W6 N. Q' j: H/ h4 W3 p" m6 \- K ~* h
|
|