|
|
- #include <Arduino.h>. o" }2 l& e. V' L) h
- #include <Wire.h>8 w/ h" \2 u3 A) U/ F' S* v; ~
- #include <Servo.h>
! B0 ~! V3 i2 {) Q
6 \; T# c# f+ _$ p- #include "MePort.h"
: T3 E* V" C0 Y; s( g/ p - #include "MeUltrasonic.h"
+ N- Z; \: l. r: N+ `9 d - #include "MeDCMotor.h"
9 k t; J, |( T. `6 o* o - + F! K6 e4 } `% E
- //double Input, Output ;
/ P W: X7 Z: ?# A8 x3 \ - float MaxSpeed = 255;
- D3 S: Y7 ?; G! \! E6 ` - float MaxPower = 180;0 s, p! \7 \9 x% w/ [! @: b$ x5 D
- float MinPower = 120;: `, y! M _4 S( t D* Z- i
- float Error,ErrorAcc,ErrorDec;
; ]% v( c9 F; |" r# T8 z- C - 4 u& u1 z! A; `/ `* C5 {, `
- float Kp=0.14;2 S$ `' p8 E; \) \- }4 W
- float Kd=0.00020;//23;
3 R; E6 O. U' c( C, M* x - float Ki=0.000201;
: E3 ^# _" g2 |( o0 A
# e; o2 ~5 c3 C5 v- float nPower;5 N% S' `/ U8 Q5 v+ o9 B" A
- MePort lightsensor_6(6);
! u6 Z! w5 C% w, P# S1 i - MePort lightsensor_8(8);# N6 z& C+ ~- H% |1 J( h; E
- MeDCMotor motor_9(9);5 K9 P& L j$ [
- MeDCMotor motor_10(10);: l2 [0 W. m$ |; k0 e" U
- unsigned long previousMillis = 0;( e7 g# `" I0 ^
- const long interval = 1;! K- O& F) x8 @2 S8 T" t
- / R+ I* a6 _1 o* I* G& [# i9 I8 T
- void setup(){
2 X. g" [; j1 C* Q& E) V3 D - lightsensor_6.dWrite1(1);
9 O& ]1 m/ G# x$ [( e8 v - nPower = 160;* Z7 g! I% P0 J
- Error=0;/ D# o. N/ ?/ W9 G, G
- ErrorAcc=0;
7 U& h1 Z# [+ }2 f - }) g- t! h( u6 x* P5 t' p2 U8 J
3 ~) d& H7 m2 d E# v" k) |- void loop(){
- V( k* ? u& ]+ g, C8 g8 b3 C* @ - unsigned long StartTime = millis();# p' k# Y5 e" p+ X9 C
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
5 Y8 R* K: I0 D) N9 V' t, Y - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();/ C& n$ ^8 U5 ]: Z* h# z
- ErrorAcc += nError*Kd ;8 |9 n4 \# {" a$ G, J2 A
- ErrorDec -= nError*Ki ;
) f: M7 ~4 P6 S$ i$ G) v& _3 K5 ] - Error = int(nError*Kp+ErrorAcc+ErrorDec);) p5 s' B! S8 D
- if(nError < 80 && nError > -80){
) C) t/ v/ Y& V) X: G - if(nPower < MaxPower){
& l6 o! M1 Q h$ |+ G* w - nPower += 3;
7 O E0 h: k0 u( L - }
8 H- }. Z" z* k' p" [2 P - } else{
8 z2 T I) _/ e: I5 s - if(nPower > MinPower){
3 C9 W' T9 @3 H0 s0 f% P" a - nPower -= 2;
; \& t0 E: m2 k5 [* ^ - }) i% A$ c. H. [. t' c' [$ H
- } ) j8 Y, x* _4 |5 P+ \
- MotoL(nPower-Error);
5 x0 z- {! R- e; p* O - MotoR(nPower+Error);
6 |/ a% \6 H! c: S# t" f - }else{
8 y- j( r7 \! D( c' y4 v1 q9 x - motor_9.run(0);
9 r8 ^! T! v% Y6 S/ E- J* V - motor_10.run(0);0 `; O3 S8 V: b/ w. Z: C# t
- }
- D8 d5 v* ]" u# ~1 z6 C- k) k - do{}while(millis() - StartTime < interval);5 X; U. x+ n3 z' ^; f
- }
" d% g& V+ O( i, H
; N5 e: O' G( o3 u, m+ f" j- void MotoL(int Power){% }9 D8 g; O5 V
- if (Power > MaxSpeed){6 _" R, E' S! O; `
- Power = MaxSpeed;
1 b; Q' M& }/ C0 A7 e. C - } 2 i* j2 i# r$ I, W+ @' e
- if (Power < -MaxSpeed){
6 V9 g. u6 i, B - Power = -MaxSpeed;* P( y7 ?; |6 f8 N
- }
+ _% D3 x% `3 o - motor_9.run(Power);3 {7 k3 G0 }1 S; u0 ~+ U
- } , C3 X: a. U ]8 k* ?4 X
- / G# ]+ V& z9 R! d& n4 Y( l& ~5 b* I3 N
- void MotoR(int Power){
. t0 ?7 L3 b1 [, @% k* u6 q - if (Power > MaxSpeed){& T2 |5 k3 a, p3 C6 d& F/ q
- Power = MaxSpeed;
. a0 E. t: M/ @; b" u: O - }
4 Q4 \0 x, ^$ x - if (Power < -MaxSpeed){( d- j% a8 g7 L5 {. a, l) v$ Q
- Power = -MaxSpeed;- V# s* N! |( p5 O3 O5 {2 k3 B
- } 5 s" c9 d4 m$ Q* i' w5 d2 g, m
- motor_10.run(Power);
$ t1 M0 V% z9 L \% l$ q5 C8 b - }
複製代碼 % p1 k& z5 T8 g* `% T+ C
0 d3 {4 h' S! p) \; y
|
|