|
|
- #include <Arduino.h>) t) x+ }2 a/ }0 b
- #include <Wire.h>* W7 r3 n K! w- h% T
- #include <Servo.h>
+ ~8 ^# M/ ~: r0 `5 W N; j - 1 p5 P O. ]( |( Q5 r5 o
- #include "MePort.h"& \2 Q, q* n# x( P0 A: h
- #include "MeUltrasonic.h"8 N8 w( W+ k5 _0 x
- #include "MeDCMotor.h" q! n9 k) V+ o6 `
5 [9 l$ E9 I1 o! a# Y& o# S, H- //double Input, Output ;
" G& }4 u' t! m+ f - float MaxSpeed = 255;
0 `4 q0 M2 R3 O5 @- Z - float MaxPower = 180;' v/ k+ b7 l6 Z# J
- float MinPower = 120;
; j# I! A. e! j - float Error,ErrorAcc,ErrorDec;
8 s h7 E j, K9 B- M3 m. t - , ]: [* D! V2 i3 A" Z, |/ v
- float Kp=0.14; H5 H; o+ w6 F, p1 z
- float Kd=0.00020;//23;
9 A1 x$ ?2 T$ t, |9 v - float Ki=0.000201;
' T" V3 @3 p1 `! Q
) K$ h! W9 C1 A: T- float nPower;
2 E4 q1 W* `' R; Q3 L - MePort lightsensor_6(6);
5 d0 x% f6 C2 C4 b' u/ ^0 O# Z/ U - MePort lightsensor_8(8);
/ k' e: e3 i- y6 y% g - MeDCMotor motor_9(9);, m3 W* E$ N# P
- MeDCMotor motor_10(10);7 d$ ~# M1 K7 R6 V9 N
- unsigned long previousMillis = 0;
' L- N: p0 |6 {$ G - const long interval = 1;( q- H' Y8 s' k, t5 [5 L c( x
- 6 I4 Q# ]. L# ~" [; z. h. P; x M
- void setup(){- {, Q; J& r" l3 ~
- lightsensor_6.dWrite1(1);
; \7 d, [0 D+ N$ h- J- k - nPower = 160;( y/ Z: x9 I1 j2 B& A5 z4 x4 D
- Error=0;- m* F- q O+ c3 C! {) O5 J O
- ErrorAcc=0;& s# B; e1 U" U( v) k, x
- }
' ^" }0 w& Q2 N) H - ' M! F; _. L" e8 M
- void loop(){3 d* h% T- n' c( E
- unsigned long StartTime = millis();
9 G8 b3 y- e7 O Y, x& U! P - if(ErrorAcc < 18000 && ErrorAcc > -18000){( g& a8 V1 Z% Q9 ]. N
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
/ y2 f+ L! U6 e9 ~, h - ErrorAcc += nError*Kd ;
: t5 m" U. q0 f3 n4 h( L - ErrorDec -= nError*Ki ;: O5 A6 B7 F* `1 T9 ^, k$ Y
- Error = int(nError*Kp+ErrorAcc+ErrorDec);0 e% ~0 `5 O% u% ]* O6 F- ]: C* K: S2 v
- if(nError < 80 && nError > -80){( b' z* ?; i/ z, @5 q8 e
- if(nPower < MaxPower){: m3 K, P* t+ ?. M* W+ n; |
- nPower += 3;
- K5 m: T1 p& [. ] - }
& T% G2 q" x; B, @7 C9 m - } else{
5 O) Z3 |; u$ V. D* [8 H - if(nPower > MinPower){% O) }- F3 V* L' {' D1 r: r K( {
- nPower -= 2;
. z* A: z5 R( v) I4 n - }/ C9 l4 c; l+ P0 _0 ^5 m8 X" v' v
- } 6 h# J8 U/ Q9 U: h; z2 k
- MotoL(nPower-Error);+ K* w. A9 [1 G& f. Y' z A. o
- MotoR(nPower+Error); & [4 x N% l4 V5 v$ ~5 y B+ x
- }else{0 J2 f$ Z7 ^- b5 y; c0 B; S1 f6 e& z" y
- motor_9.run(0);, ?% v4 }* F, x8 p+ v4 N4 @% c- i
- motor_10.run(0);& ?( w$ H8 Y }$ M% X5 V7 @
- }
2 c8 i& y% u% @6 I# E- ` - do{}while(millis() - StartTime < interval);/ o/ l# o7 y! _" M4 e8 b* z
- }" {; A7 D+ ?' `+ K4 G6 W
- * n2 z5 ~7 Z) W
- void MotoL(int Power){/ \; B, B( S b/ k: T- `
- if (Power > MaxSpeed){
1 y: z# }! Q- ]5 N/ K' t- I - Power = MaxSpeed;4 ?+ b/ z( A& V5 |9 b& p
- } 6 U y: I$ R! @6 v0 W) m8 \
- if (Power < -MaxSpeed){' w6 C+ q; F$ T' b' N/ A
- Power = -MaxSpeed;
. E$ \- P' J3 G. j/ |' `, q - }
5 t7 u4 h4 x2 \+ ?7 O - motor_9.run(Power);
5 W/ h$ f" m* }+ q - } + G& o& X) c# P5 p
8 x# f2 ], ]( ]& c3 M/ d2 K: C- void MotoR(int Power){ ]$ K7 o% X7 |& \, r
- if (Power > MaxSpeed){
) t8 C5 P1 U h4 z8 v - Power = MaxSpeed;; n+ S7 X, p3 m; _
- }
1 `2 V; a0 H2 w3 [$ \ T" V. ] E - if (Power < -MaxSpeed){
4 R1 [: f" r4 L% x' K e+ H - Power = -MaxSpeed;
3 D4 R; d, M% Y, i2 {+ i - } 6 i1 r, r1 v6 j% Q
- motor_10.run(Power);7 _* S9 P. v# R* t- w
- }
複製代碼 , n! a, t" r6 u; Y, j# |
+ G/ C( ?$ q$ s, p4 F: B
|
|