|
|
- #include <Arduino.h>
! H2 Q/ k, K$ P! u% \/ b1 S - #include <Wire.h>
4 d( ~& v# R# T. D; U. i, d - #include <Servo.h>& ~ |- c$ U# P& _
! Z9 P& L2 N! K& e8 |, `: D- #include "MePort.h"& M" P) H1 C6 V* J) N; H" W6 |' F
- #include "MeUltrasonic.h"
! G7 |. V3 r. ? - #include "MeDCMotor.h"/ y# b3 e( x: D h/ Q8 w
, [6 P4 E; o4 c- //double Input, Output ;2 Y5 V$ z" _" L2 U+ W S5 r2 O
- float MaxSpeed = 255;% ~( O& k. K: Z$ m) y/ b
- float MaxPower = 180;+ g4 _/ Q) y d
- float MinPower = 120;' d- }) F0 d* |7 h( r
- float Error,ErrorAcc,ErrorDec;
% @ r U- s( A - , S: o. @3 L4 |' F/ e1 [( F S
- float Kp=0.14;9 `- k) _; a# ^
- float Kd=0.00020;//23;1 {% p( W5 }3 V
- float Ki=0.000201;' }1 G9 f |% e3 ]5 q
( e7 g' R$ f* k: ]- float nPower; i5 j, T* x, H# k5 R' ~
- MePort lightsensor_6(6);
+ M1 `/ ^# L C2 G( _) z h - MePort lightsensor_8(8);! t& u: r- ?6 s7 k
- MeDCMotor motor_9(9);
7 O3 B0 G7 {. y& B% O& k - MeDCMotor motor_10(10);4 p. B* G' Q1 x- n2 k
- unsigned long previousMillis = 0;; S- b6 i& H7 I" _8 R% w1 g4 f/ F
- const long interval = 1;
8 {. A0 m% E" f5 m% P8 w
1 h) h6 I: \4 K) z& ~% h7 X# @- void setup(){" C1 X+ d7 ?3 m+ [% F
- lightsensor_6.dWrite1(1);
6 r: ^) i8 S5 z$ n! u! E/ y+ m - nPower = 160;. x6 |, j' ?; C* @
- Error=0;8 d* g3 r; K+ G8 y* F
- ErrorAcc=0;
1 |% u1 E* O1 {5 O - }
# L9 N$ u8 S' `: y" L9 z0 ^ - ; `: f7 @) O; B6 r& w8 m
- void loop(){
: v: z, d, f% F5 e3 ?6 Z" n4 P - unsigned long StartTime = millis();
! c0 }, i; x: M$ ~- w$ X, c - if(ErrorAcc < 18000 && ErrorAcc > -18000){
# b$ B4 {" G9 d) a; R7 L4 M9 S - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
2 u8 K& I5 K _4 J7 j- t6 I; P - ErrorAcc += nError*Kd ;
2 j4 j* p) h& P. n* M - ErrorDec -= nError*Ki ;
6 f e9 |7 {' n - Error = int(nError*Kp+ErrorAcc+ErrorDec);) K# i6 ~5 C/ ~4 z( i
- if(nError < 80 && nError > -80){
* q8 {/ y( {; R' R4 ^ - if(nPower < MaxPower){
; f4 c2 k0 Y0 \* T. p$ _/ C - nPower += 3;
6 e5 s. T1 p4 t& c' ?8 k - }
+ b! Y9 T/ y9 G+ j' u( J - } else{
0 M) |1 Z" j0 e+ p, Q( }2 H - if(nPower > MinPower){- `& J8 D% w/ t( d3 i
- nPower -= 2;- f! V# t; F2 h- B) c9 n* ~3 {8 J0 s
- }
) o8 h8 y' r: H' h% P - } + w; U, O, Q$ t0 t# d
- MotoL(nPower-Error);
7 M+ T, Q9 e+ L% p* Z - MotoR(nPower+Error); 2 }: v/ f" S% D
- }else{
, h1 z+ ?( {, R J; U, |" E& G - motor_9.run(0);; q0 S/ b& n6 m8 J8 z
- motor_10.run(0);
0 c) Y2 T! S$ ~8 G - }
! Y) b9 E6 f4 U; x1 i0 R - do{}while(millis() - StartTime < interval);/ G" T6 w! z# i% Y
- }
' V( k& S# {. m# K, B# w% Y
; F0 D j1 j3 o+ u0 r- void MotoL(int Power){2 ]# `, h. y. h5 \1 r# s7 H
- if (Power > MaxSpeed){
/ G* a1 d. j, U: V; V - Power = MaxSpeed;
0 I# }0 J- W+ E. R/ [2 [+ R. l* F - } 5 O# Y; [* E1 w! i6 U) N. q9 [4 a
- if (Power < -MaxSpeed){
7 Z" R3 D" F! u1 V( [ - Power = -MaxSpeed;
" m& l: }' F c( u8 E - }
& H; y" J3 r% O9 r6 q7 x* `; P - motor_9.run(Power);
+ U3 u# h' ^: w* o% P - }
! ?- j* ?2 c' ~: X( P - 4 I. {, M9 t) [- e2 W
- void MotoR(int Power){( v2 d" @# M; m3 A6 u
- if (Power > MaxSpeed){
; a) z- F8 m/ I, x/ `2 D6 h - Power = MaxSpeed;
: u$ U- L" m( A! d; W( Q) p. ~ - } 5 E" i! k3 [. u# X' L$ ^. h6 y
- if (Power < -MaxSpeed){6 {8 P, B0 G4 g, c! Y# Q8 X. y
- Power = -MaxSpeed;
) l. B1 _! [/ O' Z) h - }
' Z: e) `3 Z1 P& c - motor_10.run(Power);* N6 H% t6 |& A9 B1 c% O- n
- }
複製代碼
, x3 w3 R% r: ^2 B8 W5 k W
?5 B' T u; d1 B6 p2 v6 S# z1 ? |
|