|
|
- #include <Arduino.h>
2 |- _8 c7 w% [/ l* q# H - #include <Wire.h>, @8 O, k0 k* s0 l8 O9 y
- #include <Servo.h>
0 a5 ^9 x/ z3 h
6 h2 a/ S2 `% m) f' k4 Q; N$ z- #include "MePort.h"$ N- V- l! l2 D
- #include "MeUltrasonic.h"
, W+ ?1 y1 w, N R6 Z - #include "MeDCMotor.h"0 {+ y7 Q: t6 n7 y3 |; x7 ] r F
% z3 u8 ~/ c+ [3 d- //double Input, Output ;4 k! F" A: |0 @2 A8 G+ p
- float MaxSpeed = 255;
# @& B: l; B& \6 c' X - float MaxPower = 180;. E$ }7 U4 Y. Y% X. Z& }5 D( E3 O
- float MinPower = 120;
- `5 g1 [, j5 o+ f' \ Q. i; E2 J" A6 r - float Error,ErrorAcc,ErrorDec;6 K9 n/ a5 Q5 E9 K U8 V
- / Y/ q; W9 [3 r8 N( ?0 ?
- float Kp=0.14;( w4 h& F9 `$ ?: W0 x: r
- float Kd=0.00020;//23;+ ]# ]* c! P9 Q2 A; E6 q
- float Ki=0.000201;
- E8 F' ~, K7 e; b# V% r& U
8 B6 M3 e/ W5 ?: |3 N# x" C- float nPower;4 s0 c! O* s' @2 [ a- c& u
- MePort lightsensor_6(6);
- A1 A) D+ ]0 u. ~ - MePort lightsensor_8(8);
& @; W' m U, w, E# t$ m - MeDCMotor motor_9(9);3 j$ [7 Y" W s* u
- MeDCMotor motor_10(10);
3 J" I& a- j5 K Q4 | - unsigned long previousMillis = 0;2 ]7 y9 e( t% o2 U3 V; v
- const long interval = 1;
# I$ l0 e4 b; d: `
7 A, ~. }9 W8 M# U3 [- void setup(){
- e2 p% l8 `) x; ~ - lightsensor_6.dWrite1(1);
: T" x7 L: c/ u0 G6 m - nPower = 160;
$ Y& {- ]1 D) w; d1 T8 q - Error=0;
+ m% q0 `" ]- A+ { - ErrorAcc=0;, M4 V& }2 E4 a1 u- l" V- k
- }# d5 e, D# B8 c( ?/ s6 f
- 3 ^- R6 h- n3 R- c/ L, X0 U
- void loop(){# _$ s" ` v! G* H9 `& V
- unsigned long StartTime = millis();
J$ f1 a n! k* o8 n ?% h - if(ErrorAcc < 18000 && ErrorAcc > -18000){6 V% H% b! b; X0 m
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
+ h+ j2 d( K5 ~( n& o - ErrorAcc += nError*Kd ;
/ a. Z- Q- B( {$ @+ `8 ?5 x - ErrorDec -= nError*Ki ;6 A. f3 E2 r) N
- Error = int(nError*Kp+ErrorAcc+ErrorDec);* |: |5 {' i; `+ S% g: k
- if(nError < 80 && nError > -80){
" q* y8 \* C/ r: @+ } - if(nPower < MaxPower){
: o) u H6 y3 u4 |# y5 O - nPower += 3;
7 J- ~8 o2 P# x - }+ Q- y/ J4 |8 G; A$ v+ {
- } else{. w2 w, p. n( _
- if(nPower > MinPower){& _ b9 x8 l* W! O# C* K
- nPower -= 2;
: E8 v! k! Y4 E2 i9 r" J& r; ]* e - }* ]4 b2 S% i7 c( j6 R8 S
- } . S* |; D7 N: P' Z
- MotoL(nPower-Error);# x3 a& |3 i7 N( i R1 d, \
- MotoR(nPower+Error); 4 d3 ~: ]2 N4 i% A! y6 C$ k3 D+ I
- }else{/ ^9 {* o1 c5 g
- motor_9.run(0);" n! y" O9 N( S! n8 T! O% Q* ^
- motor_10.run(0);! K# f0 i" Q( J' ~/ h" T3 [( ^
- }/ \) I- O2 J$ I1 k% p0 o
- do{}while(millis() - StartTime < interval);; { y, L: M4 u6 o
- }
8 v, k% I; {/ d - % o6 @0 T1 C: a3 ~
- void MotoL(int Power){# e. d+ q( t8 [, S0 k& O% c
- if (Power > MaxSpeed){
5 z/ N }6 i/ a - Power = MaxSpeed;4 G5 h G `8 Q7 g f& i8 [
- }
f, L8 A$ h/ M/ p - if (Power < -MaxSpeed){
+ w: F: u5 ?* j9 U& }( W& e - Power = -MaxSpeed;
9 @$ V6 w* x0 P - }
& j: b Q( u2 r- C# G: A9 N; s - motor_9.run(Power);
9 q0 Z- z; [) T9 G% C- G% Q' k* Z - }
% ?* g1 M) L9 c$ {' ^( _ - 0 f+ y' k* W0 @( q3 \% f
- void MotoR(int Power){. ^: t4 @8 a9 d. v: u; y, K
- if (Power > MaxSpeed){2 H; h) X2 Y8 V: w' ~+ G
- Power = MaxSpeed;
K( q: A% M8 n) x! ^* h, h0 @ - }
! B) x5 B( Q8 e( k - if (Power < -MaxSpeed){
2 B7 @! x4 O$ W( }+ a2 E( f, J9 T - Power = -MaxSpeed;
% ]6 @5 x( c# s8 W. y& i/ l - }
L$ E4 R0 M {7 r! i2 q - motor_10.run(Power);* ?3 a7 g8 g3 z: v, z/ N& M6 s
- }
複製代碼
4 v) `6 ]2 K4 Q. X9 T: g
6 y" Q$ `$ h r0 p/ G C% J) C |
|