|
|
- #include <Arduino.h>/ D6 Z! e( r. O* ^. F9 J6 O9 u
- #include <Wire.h>
+ [0 D4 \$ _, X - #include <Servo.h>
+ Y: R2 k4 l, T' ]* Z) V1 A
' ?; Z" v# k* g2 ~1 M- #include "MePort.h"
/ T1 g/ {& |: a( p. W4 ~6 z - #include "MeUltrasonic.h"
4 K, w4 M/ C& e/ { - #include "MeDCMotor.h"! [9 I) h! R1 E' u# ~* P
: V' ~4 F+ d! [ u4 i/ J- //double Input, Output ;( J! [3 \1 z+ \6 y* T( y
- float MaxSpeed = 255;+ e1 _2 [1 a/ Z) }* a, B
- float MaxPower = 180;- V; o0 B: p; i \
- float MinPower = 120;8 ~4 U# T7 r f7 K0 ?
- float Error,ErrorAcc,ErrorDec;
, ?! ~# c( Q. ~8 q |0 e9 L# } - 2 P7 {% S6 f3 f- V
- float Kp=0.14;2 @8 ~+ q' o7 @8 G$ U$ K
- float Kd=0.00020;//23;
5 M0 f, s" U! w* { - float Ki=0.000201;' t8 O2 u7 _* y! Q
8 N& h8 V9 R5 C- float nPower;) C1 R. U" j' [4 P
- MePort lightsensor_6(6);' l p- q/ D; f. y; ^
- MePort lightsensor_8(8);; K4 Y* P+ F0 P% D* R# L
- MeDCMotor motor_9(9);, A9 m6 n7 E" ~+ x/ h" B1 q
- MeDCMotor motor_10(10);8 ]# E/ t4 y- C- B3 A7 N9 x
- unsigned long previousMillis = 0;
# e$ M$ i2 z" ^8 I. g/ D8 X - const long interval = 1;8 c: U3 k3 s6 }7 ^0 i6 `; l0 k
0 t. l/ E; l+ O# W* t/ ~- void setup(){
) ?; z6 E1 H+ `0 I2 `, ] - lightsensor_6.dWrite1(1);
; r6 u/ e2 V6 X# y - nPower = 160;
4 v. L3 ~4 S# W. v - Error=0;
3 H& m: i" p* h0 i - ErrorAcc=0;4 A9 J# n3 C% i" d' W C) p
- }7 z, p& Y$ h/ T
- - i; c1 `( z# r& B
- void loop(){
3 t* g8 b8 @- j2 [- e) n6 A - unsigned long StartTime = millis();
' Q5 i1 @" b4 e$ U! c6 G5 F' J& c - if(ErrorAcc < 18000 && ErrorAcc > -18000){
2 g- _6 I! q# f/ M/ I/ }2 {: l - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
# F' @6 P0 Y! N2 x - ErrorAcc += nError*Kd ;/ }- Q+ [/ t2 ^
- ErrorDec -= nError*Ki ;1 i8 v" u5 |& Q9 @# d
- Error = int(nError*Kp+ErrorAcc+ErrorDec);3 S" s9 r/ C4 e, Y- ]
- if(nError < 80 && nError > -80){. k0 ~3 K( x3 V* I: [
- if(nPower < MaxPower){
' a; Y$ L! I; h7 t# v) S* \5 g - nPower += 3;
, o% g" N8 `1 b8 G; c - }0 k/ P& |+ z, Y
- } else{( Q+ r6 ~: u7 a; v4 ]
- if(nPower > MinPower){
) K) e7 w; @" f* \+ A8 f4 S - nPower -= 2;
& l- L3 j' M) c! A& I6 l: F7 O - }
& d5 k/ ]$ ^' S l$ V. m - }
7 j3 J$ m- N7 m$ w$ C2 ^0 P6 I - MotoL(nPower-Error);
- Z; q6 o5 `. p/ e- H( q - MotoR(nPower+Error); , \, Y/ a; v9 S& D
- }else{
; m; X" X; ~! H& c# o - motor_9.run(0);
! C4 ]* D, o! W- r% ?$ v% G/ ^0 m1 q+ L - motor_10.run(0);8 a/ Y. u. P, B
- }
6 M! B0 E, G) B+ L/ s: V - do{}while(millis() - StartTime < interval);
. G' t) w% T d- q - }
: Z+ w1 y$ M# c8 `% X
! t! Z) Z, G' W- E- void MotoL(int Power){
D @) @+ z2 Q - if (Power > MaxSpeed){) I" g: a; m' I V. V8 b
- Power = MaxSpeed;2 O! u _& r0 |. `
- } ; P" z5 W9 d+ h( M: C. [3 u# h
- if (Power < -MaxSpeed){
3 G3 Q: ^' t2 u# [0 R. [! T - Power = -MaxSpeed;# w. h7 [8 O) B- l5 k
- } 0 N2 A# H6 J5 s7 y) p0 K" ?
- motor_9.run(Power);
# A X3 n3 e4 t6 d6 L. u- p/ v - }
( E2 l9 S' k1 `$ f
6 b2 R$ I" [! v4 Z. e P% ]$ X- void MotoR(int Power){$ e9 N5 R7 o. ^0 z
- if (Power > MaxSpeed){
7 i8 Q- V" @( g2 U8 N - Power = MaxSpeed;7 Y% ?6 r( X( h2 G8 M0 @, R
- }
+ t* o9 }4 U' l$ d& A) r2 x, f% y - if (Power < -MaxSpeed){
7 R2 `" y5 E9 ]+ E - Power = -MaxSpeed;
" H- [2 k- g! P; g- @6 ^ - }
; T- a0 A8 d+ i( f% f - motor_10.run(Power);
7 S2 M2 ^ A& {% f - }
複製代碼
5 I' n* `' _7 m7 s( z6 e# S
" k' z K Z& Z% J& u2 Q- X |
|