|
|
- #include <Arduino.h>
2 t$ _/ F2 _3 f - #include <Wire.h>* k |( o8 t9 _
- #include <Servo.h>+ i( ~- @$ l' P3 m! }
- ; j0 }( }& v% t# P' C i Q
- #include "MePort.h"- S: V2 p. d4 R! c( o
- #include "MeUltrasonic.h"
7 ~5 I0 I0 ^/ ~% D; T - #include "MeDCMotor.h"
. v3 A. q% c# t; r; G
' V$ m7 g; F+ ]% |- //double Input, Output ;/ C1 n. Q# o+ p+ t' I' r% U, C
- float MaxSpeed = 255;' z" I/ P W2 R& G+ s
- float MaxPower = 180;4 X( E4 r1 I1 z) [1 @2 t
- float MinPower = 120;) o7 y* P# ^% R/ W# |
- float Error,ErrorAcc,ErrorDec;+ ^ P$ x$ x; l$ {3 N
: ~2 H8 P/ X& ]& S% f' v0 Z. U- float Kp=0.14;
* P; u" r) K Q" N4 _& c2 w% h - float Kd=0.00020;//23;: D6 X( W& i1 i
- float Ki=0.000201;
' y* [0 _# U0 d# w T - 6 L0 v; t. d! ^" m) K, N" z v
- float nPower;9 S9 n& u- f/ R# E
- MePort lightsensor_6(6);) ?1 U" r1 f8 |, B' S
- MePort lightsensor_8(8);
9 S8 N6 P9 @% U# v0 U - MeDCMotor motor_9(9);+ j! `+ U+ U/ a3 R% Y
- MeDCMotor motor_10(10);) w1 C$ v0 E# q) j
- unsigned long previousMillis = 0;9 w9 M; D' L) n$ k) Y# D% T
- const long interval = 1;* R; s# E& p3 B1 n3 I
1 y; d1 {! d4 |+ H' t- void setup(){
9 `' C( T3 _0 J6 c g3 f. H) T8 Z - lightsensor_6.dWrite1(1);) S3 N: [( m5 l) F5 f6 k
- nPower = 160;
1 j* Z% A7 v2 i# H* f) O2 _+ t$ g - Error=0;( ^- y5 ~9 r) l/ O8 z" O6 Z
- ErrorAcc=0;8 e9 n! O; z( B( F; Q( T$ P
- }# l1 `- q* H) h8 X- g
- 9 ^. W9 v, q+ v, i$ w& Q
- void loop(){
5 C' u5 T* S- ]7 l- R - unsigned long StartTime = millis();% ]8 P$ M: N7 G1 }
- if(ErrorAcc < 18000 && ErrorAcc > -18000){, c2 S% ]" m; B$ q+ H, q- f
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();2 f) T/ z& h# L) ^4 J% ?
- ErrorAcc += nError*Kd ;
4 O3 C& j9 R- t - ErrorDec -= nError*Ki ;
9 V: R1 i9 `& F p. `' i, I - Error = int(nError*Kp+ErrorAcc+ErrorDec);
3 r$ G7 I+ |" l0 R - if(nError < 80 && nError > -80){: F9 X' ~4 \ o u( l1 W
- if(nPower < MaxPower){9 s% ]' y1 z8 z8 q' W$ o' k- W
- nPower += 3;# q& v8 {, x' `% @, N
- }
( t6 D; k3 e1 G6 s' |. S* H - } else{& h' L: {' b3 f$ J# A) ] l
- if(nPower > MinPower){9 m: `& a' I0 a# a' f' r+ f5 Z& h
- nPower -= 2;+ S9 X- i) [ w% e) d/ @( ]
- }% q+ k# h* ?; M+ d" Q5 \3 K
- }
8 B" U9 s1 }, t* {0 c# d - MotoL(nPower-Error);' ?% c4 h: D4 r9 n! M
- MotoR(nPower+Error);
& }. c: k) g& g+ i& u - }else{
& t/ u: y9 i+ t& a - motor_9.run(0);
/ U, L O) c: O1 h1 H) U - motor_10.run(0);1 H0 `+ [- g& z4 j
- }' b# N, y. l f0 n0 u" N, s4 {
- do{}while(millis() - StartTime < interval);1 A0 S0 B6 f' x% L* c
- }
0 J5 a8 m5 M8 u( |: A- j
: d; {: S: |- _7 S6 A$ U- void MotoL(int Power){6 c! ?# ~) u- U$ b* q) H
- if (Power > MaxSpeed){% B, A6 E$ s: v8 M
- Power = MaxSpeed;; w% Z' x( U* C+ Y! `7 ]2 y8 \% ~
- }
+ c) X+ d: }! u2 Y - if (Power < -MaxSpeed){. N+ L7 E1 B" X1 b
- Power = -MaxSpeed;
9 M5 `& H C( R. }, ?; s' s! K - } , R$ i; q9 a0 X9 F! H
- motor_9.run(Power);
' y2 ]7 B3 P3 L7 i+ o - }
8 n+ U6 z9 @! ]6 B& M; T - 8 e! p7 k. f. w+ B5 y
- void MotoR(int Power){
2 |" g1 X. w. [6 m - if (Power > MaxSpeed){
. I( b# l4 g8 ]3 d' i+ D$ H - Power = MaxSpeed;4 x& z; |8 ?/ P* ]6 q
- } / Q6 l( {( z* Y" s0 e- f# i
- if (Power < -MaxSpeed){
6 H' i+ i" I M7 e" L - Power = -MaxSpeed;
* E, u& Y5 p; z- Q' J3 O+ z2 _; ~$ P - } % F a8 [/ w2 Z# h
- motor_10.run(Power);9 G. I" t1 Y+ x+ v0 u
- }
複製代碼 : e* e9 z: w& B8 U t( T6 G0 p
, c5 ]5 I9 j! [7 E; r/ e7 P* c% c |
|