|
|
- #include <Arduino.h>6 c8 d- J4 ]+ `+ e8 T( H2 q
- #include <Wire.h>
5 I; ^0 r' r, a2 a& `( c" p - #include <Servo.h>, g' J A: J+ c* T) }' t' ^
- 5 _ b* d* r& e& K
- #include "MePort.h"
. V# m8 F) r) K# z6 j/ n - #include "MeUltrasonic.h"
1 O% h. h' P9 y - #include "MeDCMotor.h"
: }, G' r, M1 _+ \* p9 x& [, E - ; N; E5 }9 ?% l0 P5 I
- //double Input, Output ;
+ n$ g1 S: y. Q$ {% n$ L - float MaxSpeed = 255;
, p) W! c$ z+ v; I/ j q - float MaxPower = 180;* r( r& D9 b8 Y; a+ g
- float MinPower = 120;8 b- g( {* R$ Z' B7 K/ x7 q
- float Error,ErrorAcc,ErrorDec;
' p! P% y( K7 c' U
. l, d7 g, [& w8 s2 f. w( m8 v- float Kp=0.14;
3 ]1 F: c7 H) D6 I( E - float Kd=0.00020;//23;
/ ^$ [- F% ^+ y' ?: R - float Ki=0.000201;
7 q5 Z* z; }& S8 h7 y+ S - / E; ~& D8 c4 @! A" {; z& C$ i
- float nPower;( }8 ]/ ~9 E* _# E" J
- MePort lightsensor_6(6);
+ E% b' ^8 ?- a* i+ j. U N - MePort lightsensor_8(8);. n6 k% u8 {4 u, X$ e3 @
- MeDCMotor motor_9(9);
$ ?$ S) V8 p4 K/ `% w - MeDCMotor motor_10(10);
0 `& v2 C4 J' o! G/ L - unsigned long previousMillis = 0;
* }. a1 O6 s9 ~2 \ - const long interval = 1;; I( |+ b9 z; p. v" m
- v, X6 y; x7 F% \9 R- void setup(){
1 N! C3 \ ], T$ F# S% t7 ` - lightsensor_6.dWrite1(1);
* K0 W1 c/ f, T$ i: Y0 l - nPower = 160;
, w1 o$ z1 Z5 }2 Z - Error=0;
1 j% y+ Z% e% K6 H8 x" k+ ^ - ErrorAcc=0;, C/ q+ r. f1 h4 ^
- }
( q" F- \! I- {: P! K
, ^- g5 I! N! n! H- void loop(){: j. T6 G: N8 z- y/ o/ v- \7 P' s
- unsigned long StartTime = millis();/ T# s' K) p8 ?$ \2 E
- if(ErrorAcc < 18000 && ErrorAcc > -18000){, h5 J2 W5 N! {, ?0 P
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();( x P8 B/ r4 w; q' L
- ErrorAcc += nError*Kd ;
. \5 P6 g* a% `8 j: n - ErrorDec -= nError*Ki ;
+ X; y: C7 x3 R1 \0 {4 l4 s9 \ - Error = int(nError*Kp+ErrorAcc+ErrorDec);: Q k9 [% M8 K2 h, |( ]
- if(nError < 80 && nError > -80){3 X0 x8 Q. r/ Z/ U( |7 S
- if(nPower < MaxPower){
+ q; }2 p9 K5 } J |' A - nPower += 3;
$ @, p9 M0 I x) _0 y3 J3 Y - }( w: X/ f: V* c/ K2 u+ L
- } else{" l/ f3 b9 g; G: @: V
- if(nPower > MinPower){
: b |5 G. q- p, g - nPower -= 2;- A( N- K: k, t) |1 g! Q, a( V8 t$ M$ |. d
- }& t# r* I- u$ @
- }
8 O& ]4 U; z% f, _# W; i6 | - MotoL(nPower-Error);
/ d2 p6 t+ o4 L' e H/ j8 e - MotoR(nPower+Error);
$ {$ p" p: i% A% | - }else{
6 ]* \. ?. u& t( [7 e, G - motor_9.run(0);
1 M& |! T* Z5 q# y" p - motor_10.run(0);9 H" S. i5 k; e7 Q4 z
- }6 K# ]# W5 K: o% Q. J' s
- do{}while(millis() - StartTime < interval);
( P) A6 T: K. [4 P - }! ^. Q1 ~9 \% P2 o! I1 I5 p% \
6 M+ J9 Z! J. U7 S; c- void MotoL(int Power){) \: h1 Q5 [: \" L6 N, G
- if (Power > MaxSpeed){1 B; |7 D8 T' a `
- Power = MaxSpeed;2 I. _1 z- ^" E5 m" a+ k8 Z1 b
- }
9 s, _. M$ K2 s w3 x4 T - if (Power < -MaxSpeed){5 `* a: \) s0 |6 D3 b* }/ D+ n* [3 @
- Power = -MaxSpeed;+ h; r5 [/ n2 v) L0 Y0 G
- } & a- a: x9 k6 r% @" {# U6 ]5 s
- motor_9.run(Power);5 V% L# |. ?. K) H
- } & H1 p7 C, w. J, ^: ~) u
- ! y3 B6 B# c, I
- void MotoR(int Power){" \, T5 [# W' }) q' d4 M
- if (Power > MaxSpeed){
5 F5 t# z0 [- P) ] - Power = MaxSpeed;
( `- ?( {5 I: N; H1 w - } 5 w0 k% M3 z1 r8 H' S' ~" J/ H6 H
- if (Power < -MaxSpeed){: z- G7 d$ I& Y8 m/ R1 I
- Power = -MaxSpeed;) |% L2 v1 Q5 s- S; J
- }
/ X! l8 ^6 s4 J! ~# H - motor_10.run(Power);
) ?0 K3 O2 l. K; X8 j8 ?4 V& R - }
複製代碼 ( }: ]! N4 X0 j4 V7 ~/ B1 v1 m
0 ?$ G4 T# ?/ t |
|