|
|
- #include <Arduino.h>
. O6 d. z6 o" T! E" a - #include <Wire.h>' F$ t6 d0 P. M' l
- #include <Servo.h>& ^& ?$ Q( c2 B
6 {: @# e* ~) e1 y1 H$ b' O- #include "MePort.h"
& z3 B! |, ]. V3 r# U' s. _$ F - #include "MeUltrasonic.h"2 ^ {5 R3 k1 e# F7 Z
- #include "MeDCMotor.h"& P- L! Z/ ~7 ]5 f
' C* F9 A u! p7 X( q- //double Input, Output ;
/ d# Y+ k1 d; a- j - float MaxSpeed = 255;9 y# z9 f9 b/ a) E
- float MaxPower = 180;
, r" [4 m, V/ ]8 ?2 k - float MinPower = 120;
5 V) x: ~6 U. b7 U - float Error,ErrorAcc,ErrorDec;, P+ I) x' e8 Q0 }- T! s' ]
; B* M; m, y) y2 V' [- B6 J C% s- float Kp=0.14;
; D5 P$ N, l, A - float Kd=0.00020;//23;: t& u9 C1 q1 M* f' m
- float Ki=0.000201;
8 O" m3 C }) A! W l- @ - . M: [& W3 A: d6 X% Z! o* u4 ]4 s
- float nPower;$ [7 P; e8 C) u9 m' F
- MePort lightsensor_6(6);* I5 y3 `7 ]# O) _+ A6 H7 F
- MePort lightsensor_8(8);
9 |2 F6 o0 |) F' L, M( X# C - MeDCMotor motor_9(9);
5 N2 A+ A3 w4 d' ~! m# c - MeDCMotor motor_10(10);1 b/ b0 | z$ B
- unsigned long previousMillis = 0;
! I/ d0 k/ v* _: s k1 l9 ` - const long interval = 1;4 ~% J" U+ c/ ^' c
2 }6 v( ~/ X, E, Q- void setup(){2 w$ {6 O. t; W+ M3 l5 |
- lightsensor_6.dWrite1(1);
, b3 P' n R7 b* o; J9 n, M9 \5 c - nPower = 160;; s2 f" s- D6 _1 O& R
- Error=0;
: R) t+ k) ]8 P6 \ - ErrorAcc=0;
+ m) @" Z2 i9 t5 X - }& m L9 O" F' N: O: t1 b$ p
4 v0 h U. l' f. x! u- void loop(){& |, n5 ~- a$ U. w* E
- unsigned long StartTime = millis(); R' l, h8 B1 a5 R
- if(ErrorAcc < 18000 && ErrorAcc > -18000){8 [; Y( Q( {; B8 S
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();# Q) b( c$ k7 P- S
- ErrorAcc += nError*Kd ;* o( Z" t& P& \6 P! D
- ErrorDec -= nError*Ki ;
1 I9 a9 x2 O+ R6 Q- r6 { - Error = int(nError*Kp+ErrorAcc+ErrorDec);
3 u4 `- W4 z7 I, d2 K& d - if(nError < 80 && nError > -80){
! G* U3 ?9 \" o8 X) d - if(nPower < MaxPower){
. v+ L: b4 P' M; p* M) \7 V - nPower += 3;5 b) ]2 a5 d) b# `* k8 M. b" M& a& q
- }" C5 p9 R9 D8 I( Y, j. Q
- } else{
, J8 b- F& K- Z) a& z3 S - if(nPower > MinPower){8 w# q+ p/ {) y* u/ c( T
- nPower -= 2;2 R1 T' U4 B) G: I) k- W
- }
9 p, W* T7 u# a' `1 h/ G0 g - } * P+ }' Y6 A: V% @& G+ u2 Z+ f
- MotoL(nPower-Error);: d( W& f- Z- {) B
- MotoR(nPower+Error); 6 v0 r( M2 }" q4 f3 X
- }else{) k# L/ `; W |+ i
- motor_9.run(0);
9 E2 }1 N7 Q1 u% O - motor_10.run(0);
1 b- [! L0 A" H8 q - }3 B$ a7 U+ g2 h' r/ n* w
- do{}while(millis() - StartTime < interval);# L$ p7 C. N) Y3 U0 I% H& Z
- }
5 ?$ }6 L& ]7 O) H* D
% }3 N: S# n, P, L% X0 R4 ^- void MotoL(int Power){
8 Z; m, c& e0 D2 a - if (Power > MaxSpeed){6 g( Y4 u, l. s# b' {/ y% _9 w8 R
- Power = MaxSpeed;
" I% v! _0 l- g1 @ - }
, l# ? {& B5 B$ i7 G4 J# _. P6 `& X - if (Power < -MaxSpeed){
, N) k1 G7 q( h1 \: g8 n - Power = -MaxSpeed;, V: }0 P% g, z( Y+ `
- } . ]) S( L+ c' [, ?& o3 F7 d# _
- motor_9.run(Power);* U5 T7 f3 T# s$ }) v# N
- } 7 U! d* { X0 g2 a+ M
- 7 ~" f) a$ |. y, M6 s
- void MotoR(int Power){! q6 p+ ~" H1 l; E8 x5 b7 K
- if (Power > MaxSpeed){9 J( f2 U% E: _6 J2 V6 B* [
- Power = MaxSpeed;
; e4 }& V+ H! \, k8 Y - } 1 V; r4 S& i% ?
- if (Power < -MaxSpeed){
2 x& T: l" ^6 d& K - Power = -MaxSpeed;" e/ ]: s$ d8 d# g: e
- }
7 p* g; C( Q6 t. v - motor_10.run(Power);
$ A% A7 s" ]4 w6 n) _ - }
複製代碼
3 T2 X+ i3 S2 X5 p
, R% J4 E+ @; k |
|