|
|
- #include <Arduino.h>
0 @; R; `7 G9 h - #include <Wire.h># A# n# E! ?- `
- #include <Servo.h>3 E2 X" Y, N9 z% O3 [$ X
- . P# B1 O; u) Y* k
- #include "MePort.h"% G, i. | v0 l
- #include "MeUltrasonic.h"
4 R D6 [4 V4 x/ s( Y8 i8 S+ w - #include "MeDCMotor.h"
. I; ?$ Y' L, [: J! a/ q - # R9 c" {/ v" p W6 V! T! s
- //double Input, Output ;
Q2 t) E8 w1 K5 P4 j: K5 A - float MaxSpeed = 255;
i$ ^; ^; }8 n' O$ u - float MaxPower = 180;
5 A+ o! d. c7 R z - float MinPower = 120;+ a" o9 m% B/ w( A9 s
- float Error,ErrorAcc,ErrorDec;; f' c6 {( X% A, @- M5 W. O* x6 ~
% B9 |( n& g9 o8 L3 f! F5 _- float Kp=0.14;
' t+ B+ Q6 h8 X7 ~) E! P) z - float Kd=0.00020;//23;
L8 u! O. D; I - float Ki=0.000201;2 j# o- j% @2 y" u( m: e2 ]/ ?: `
- % b& t5 \9 _ J4 X9 o! j
- float nPower;
* k7 e/ ]/ h+ R: Q! Q" F - MePort lightsensor_6(6);9 \ C3 S) r. g7 @. ~: z6 Z. ]# D
- MePort lightsensor_8(8);1 B; ~$ v* j* d0 |( l. C1 w
- MeDCMotor motor_9(9);2 i. n5 K* W2 P3 o9 p
- MeDCMotor motor_10(10);
$ o) a* X( ^8 V- i7 V6 d - unsigned long previousMillis = 0;3 m- C* F, Q# Y) Q4 \
- const long interval = 1;. h+ b0 n5 D/ E1 J. R
- $ U& i5 c+ i3 @% [
- void setup(){
; {6 I) K1 e* V2 F! i% w - lightsensor_6.dWrite1(1);
' m- s/ v5 v$ h1 z. H - nPower = 160;7 @# ~- B4 H) ^+ U, M5 R- A
- Error=0;4 k9 e# S2 d7 s7 O( S
- ErrorAcc=0;
' ~" Q2 v9 f2 \/ T0 w8 A7 ~) i - }+ `! t: S0 r v6 X2 i3 Y
- & c! q$ p5 U$ i# C' i
- void loop(){
$ s- V- J, |; ~8 G3 c! x5 Y - unsigned long StartTime = millis();5 n) T& W& W8 z4 `
- if(ErrorAcc < 18000 && ErrorAcc > -18000){% |: F3 p Z, Y0 s9 q$ B
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();) a0 R( e% N/ K; S: r
- ErrorAcc += nError*Kd ;
5 y- @" `( O& z0 ~$ H e! H# K - ErrorDec -= nError*Ki ;
; U' y! p* ~9 t% ]' s1 s5 n6 x( ] - Error = int(nError*Kp+ErrorAcc+ErrorDec);- g& `7 x w- v, Z
- if(nError < 80 && nError > -80){' e" q3 }8 x: M1 h5 s# b
- if(nPower < MaxPower){
+ {! n( }8 I/ B* J - nPower += 3;
7 i, V4 P8 Y9 ]# m# \ - }9 t& n# S0 j1 R9 \3 I( g1 q
- } else{! X2 _' @ V- ]$ { `7 x
- if(nPower > MinPower){
* L3 [/ e8 j4 w) T - nPower -= 2;
& n4 Q3 @/ o* ^ {& V' w( P! t - }
7 L6 K! E) u1 N, A - }
3 P2 f# n2 P( y& t - MotoL(nPower-Error);3 k0 T% S9 @$ |8 z1 w9 U" ?3 y
- MotoR(nPower+Error); ( S: ^7 I! s1 k. S$ s$ g
- }else{
( j; t2 ~, G5 J) j; \ - motor_9.run(0);: F. W' `2 |# d" V( J+ {* E) d
- motor_10.run(0);' F/ y0 q, U& R' w* J
- }
9 o. M6 H8 J6 t5 x' ^6 f: [ - do{}while(millis() - StartTime < interval);
7 e: x+ [; B, [4 i9 ? - }* w: j% g& ]. b+ ~$ z' e8 O7 K* V- {
- 5 W6 P& [/ C: @% z) Z; e
- void MotoL(int Power){5 T+ u% _! a/ ^* B
- if (Power > MaxSpeed){
% i! N/ Z5 Y# g3 Y" W - Power = MaxSpeed;: ]- v u2 N8 O& ^2 a/ e$ o
- }
4 d) R0 a4 O7 O - if (Power < -MaxSpeed){
, y3 e, F( k* D' j8 P# O! E - Power = -MaxSpeed;
3 n9 R$ @$ f" z' c/ W6 m - } 5 m: V$ \& s9 ?
- motor_9.run(Power);
& y4 U% c) l! e4 ~ - } $ ?4 z- R6 T8 ~' B
, F" s+ {' n' Y8 q, p# p- void MotoR(int Power){, L2 \. p9 a, N! r, y. p% C, A
- if (Power > MaxSpeed){
3 r7 \! |3 I5 E - Power = MaxSpeed;/ c$ E" _2 f, z# t
- } 1 r6 T, e1 U$ S3 t% r& b, t3 E
- if (Power < -MaxSpeed){- s# ?. d0 _/ m8 `
- Power = -MaxSpeed;
& |' |1 T9 G( ^6 O - } $ |9 Y! }+ [7 x7 p1 n
- motor_10.run(Power);8 d9 M( J5 j6 O, ^
- }
複製代碼
: ]# E# P" k) F! m, M F% I' A- ^6 l7 {
|
|