|
|
- #include <Arduino.h># P& Z5 X6 ^' `9 |. h" I. @, e
- #include <Wire.h>
: C% e G" i8 A - #include <Servo.h>
* E- ]: R) c9 L4 ~: R - " c( S9 }# l1 y5 n5 V; q
- #include "MePort.h"
3 f( {3 N- i" N( _& l( T! a- r - #include "MeUltrasonic.h"+ g! H$ W+ b# d! G1 T" d- K
- #include "MeDCMotor.h"8 |9 a8 C' d$ Q4 q4 ~
- : U6 _3 k1 ] X
- //double Input, Output ;
- \( D; m9 s; F( p0 A! |) f - float MaxSpeed = 255; i$ L7 J( I+ b( I4 E/ S; N
- float MaxPower = 180;
. r0 y5 u. p+ Z: G! W/ r; D - float MinPower = 120;
+ \' F% Q* U3 U/ W; I1 m/ c - float Error,ErrorAcc,ErrorDec;# T% L G' N j0 u* R
- ) u* V0 Y1 _. G. M3 ?1 q$ i0 a' b
- float Kp=0.14;
% v9 l& Y6 _7 h* G& Y* t7 a) I+ H - float Kd=0.00020;//23;
4 s) v! ~, ~! v* h( b h - float Ki=0.000201;
& c4 [) j# k. M$ y' i( ?, H, |( z" }
2 U/ s# g3 p; [* `7 m! A' |- float nPower;" i9 v; q# J0 z$ s8 b9 w* j1 |( j
- MePort lightsensor_6(6); E! u5 @9 C& |5 p; b
- MePort lightsensor_8(8);$ W, \+ b1 p2 p
- MeDCMotor motor_9(9);; }/ X+ K/ x3 m- e
- MeDCMotor motor_10(10);) X+ w. k; Z3 T$ _$ r$ X ^
- unsigned long previousMillis = 0;
6 @3 s" s, [9 b3 F. Z - const long interval = 1;- g0 T% F" Q+ [7 B% A! P
- 5 o$ t; u2 m5 L. K9 q
- void setup(){2 K; |; `, Q: t& D3 D
- lightsensor_6.dWrite1(1);
! b9 T& B; T+ b' E* k2 x1 L - nPower = 160;
; A5 x7 L; Y5 b3 \" E& N$ T7 r0 f ~ - Error=0;
2 H! P% W2 Q7 n6 i0 v - ErrorAcc=0;
" Z9 {$ }. `3 ]5 l' r0 J - }
" c) \2 `+ A# n& u& K! V
2 V+ ^: g0 @* V# \: ~0 N- void loop(){
+ E# V0 N$ @- U1 {( n0 E - unsigned long StartTime = millis();
5 ]. A- F: K7 {" |' H+ R! H - if(ErrorAcc < 18000 && ErrorAcc > -18000){
9 A+ r& O* K% r! V7 [/ y5 E3 O - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();) _2 D1 v/ V, u* E- n# O5 s6 ?* `
- ErrorAcc += nError*Kd ;( Y6 n/ g, k/ f# ] E0 \8 [
- ErrorDec -= nError*Ki ;( W8 M5 {2 x9 _3 P k, W; r- E% m
- Error = int(nError*Kp+ErrorAcc+ErrorDec);$ I( ]. V* F3 T+ C, O/ Z0 |
- if(nError < 80 && nError > -80){
+ e: Q" T$ a; e; t# h2 \ - if(nPower < MaxPower){! l7 f3 ~; C( X+ h
- nPower += 3;! N* u+ E" u% A8 }0 P8 h Q
- }
6 ]2 C& e+ E0 e- t5 E. g - } else{
& m# u5 B' X) k! u: p - if(nPower > MinPower){
) P9 E, v" B# z# f2 W: d" g6 N7 F - nPower -= 2;$ `5 ]2 a0 |8 J) C
- }
7 h0 ^' f! u! e, s7 a: }+ s - }
+ M+ l6 h9 \6 _* f - MotoL(nPower-Error);, C; j: q9 B8 V; z
- MotoR(nPower+Error);
- y: l' V9 Z2 f: x# ?+ b - }else{9 b o% D/ a4 Q% L: K. r
- motor_9.run(0);
) x* f& v1 a) w% y" M; f+ Z# }6 ?. u5 t - motor_10.run(0);
' R0 [$ t/ ?3 X$ j0 c9 T - }
7 i2 o, W, w% T- {" u6 A - do{}while(millis() - StartTime < interval); P2 |5 G7 i7 L6 g
- }
. p# ~; i @ m - - F0 y% I0 ]$ a$ M* i; G% U
- void MotoL(int Power){; J4 |+ @# j# M8 s
- if (Power > MaxSpeed){
* r, R+ R) G! u/ W - Power = MaxSpeed;
' z9 h3 ^* H) | - }
5 @3 }# a& H# g2 R - if (Power < -MaxSpeed){
! B: T# `+ V) |, f* Y) @ - Power = -MaxSpeed;* a6 ~! e2 t* Q( r1 O
- }
( v( ]8 n( V$ K! G( z: V - motor_9.run(Power);+ p, O, s! D1 v$ ], y) Z
- } ; I% j6 ]" u/ x* ^
; p+ x4 X$ C+ h- void MotoR(int Power){
i3 ]8 ~) I6 ]6 `$ V - if (Power > MaxSpeed){
( }. i9 `9 m/ ]( J5 n2 P4 ]$ ]4 s- T* q7 M - Power = MaxSpeed;
1 F9 f5 Y( ~+ v- _ - } : q0 F+ g' S) o# \% d( Q
- if (Power < -MaxSpeed){- ?" _+ w2 ?" H+ C2 P9 k
- Power = -MaxSpeed;
# Y, M3 @9 F s& `, G. Z - }
: I; A" r4 J2 g - motor_10.run(Power);
6 S5 g; s8 I: t - }
複製代碼 : t1 ^: q# T4 P1 [ B" F
+ @- r1 e: B, l* J
|
|