|
|
- #include <Arduino.h>) `; Z* W4 v% {( L9 D0 W
- #include <Wire.h>
: C# T% u3 Z- P# f - #include <Servo.h>5 u! D: H8 `" V* L8 L: U
- - R: {/ V5 m T9 j" D
- #include "MePort.h", y' g2 T) U/ d% I) q
- #include "MeUltrasonic.h"
0 W4 F2 b0 y* S6 z! n8 X+ k7 D - #include "MeDCMotor.h"
8 e l: ?2 b& b' |! k4 L, C q - 2 \! |9 o# ]2 N* P$ Q
- //double Input, Output ;
+ w L0 \5 i1 d% I& ? - float MaxSpeed = 255;
7 n- ?# R6 H( K% e' q - float MaxPower = 180;
3 t/ v5 y1 L+ Q f9 S# m - float MinPower = 120; J* S9 V' O" p3 U# ?% h% T
- float Error,ErrorAcc,ErrorDec;
, ^" d8 W! i, q( N, Y
& K+ m& n' q1 o* s( Y0 [* f- float Kp=0.14;, c4 y6 a y( m# R+ P( e' D* C
- float Kd=0.00020;//23;" P$ t* _( h$ D! P
- float Ki=0.000201;9 }& u% P u- P C; i
- * y: r' \% t1 U1 ?
- float nPower;0 E) u! f# j8 ]2 ?: X+ h
- MePort lightsensor_6(6);' O9 R+ Z$ k. w- p" D4 [' C
- MePort lightsensor_8(8);# E y2 X2 U4 G @' \7 Z
- MeDCMotor motor_9(9);# }) [6 g* M0 \( F
- MeDCMotor motor_10(10);
" W- b/ K5 h' }# N - unsigned long previousMillis = 0;8 `1 e3 n- b0 H! J
- const long interval = 1;
8 k1 T: D. p5 Y4 J8 B; U - ' r- l/ g* {4 i
- void setup(){8 m: c% {7 s1 m+ U
- lightsensor_6.dWrite1(1);
; g: F7 l1 X/ q2 F) R6 N - nPower = 160;# b% C1 E" @7 D3 x
- Error=0;
6 N) Y& G; a% V! Z - ErrorAcc=0;/ ^. K. ~6 Z1 X- G# S# \8 b' W
- }2 e8 h; u# ^! i7 @" D
- - ?* n2 A% d) `
- void loop(){
- T: G- V4 _) e& R! y7 ?/ Z2 F% ] - unsigned long StartTime = millis();
. a6 r9 N3 S4 k, [& j- @ - if(ErrorAcc < 18000 && ErrorAcc > -18000){
. u% c8 ^5 I; W) M# ] - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();, p- W! {5 U' `0 K
- ErrorAcc += nError*Kd ;
$ y0 }- c$ [$ y - ErrorDec -= nError*Ki ;' f1 p" t! g4 o) |1 i
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
$ X2 J0 _1 y3 U - if(nError < 80 && nError > -80){
. q: ], p8 P. S6 N0 \1 U - if(nPower < MaxPower){
( E6 g# y% n, ]# K+ b - nPower += 3;
@; X8 I0 P( R - }
! ^" j0 D" g1 g# C - } else{3 q+ e( {: l1 Q( B% q, {( A, ~
- if(nPower > MinPower){
: O3 @+ O- u0 k. @4 V - nPower -= 2;* y" }8 K+ [# M3 R
- }
, q6 `1 _8 _& f+ F4 x - }
, h# @# c% s$ x2 P2 z; c5 x - MotoL(nPower-Error);1 H. e3 M" T" A# z. x) Z
- MotoR(nPower+Error); , ^. u0 T) M3 d+ ?0 h1 ^( S E
- }else{
: Z7 A; J" N+ F9 s4 | - motor_9.run(0);
6 o: o8 k; y5 s0 B2 K. ^( i1 l) F - motor_10.run(0);
' v) \1 e6 e( x$ a& @; Y! S( u - }- i! K# f! m, p3 G% v. H
- do{}while(millis() - StartTime < interval);
( ~' _# w7 H9 B - }
5 J) c. W0 [& e
" T' ^. l" R. y; X& l5 [1 t- void MotoL(int Power){
! B. ]. `: H7 k+ | - if (Power > MaxSpeed){
6 F k/ N4 f; n8 C0 R7 k! X - Power = MaxSpeed;) H% f8 M8 ^1 Z) j8 N$ H
- }
# M9 J0 _8 L2 v5 w9 _ - if (Power < -MaxSpeed){+ m, z0 \8 U( ?
- Power = -MaxSpeed;
; T. O. `& ]1 w! ] - }
" x$ R% W% q3 Y( E$ p# H9 _ - motor_9.run(Power);
+ s4 k/ J1 R( z - }
" _( J- l9 I: _* V* H! P
$ i$ d* c- s" g) ^5 J7 B8 \# H& s- void MotoR(int Power){
7 a/ W" y$ b! z - if (Power > MaxSpeed){$ H5 y. z. ]$ H2 b8 c6 _+ J& e
- Power = MaxSpeed;
t K# R. ?1 X# c% C" p2 Y - } , E3 ?7 X' N& h& S
- if (Power < -MaxSpeed){
8 Q' `: m, G. e& Y9 B* g - Power = -MaxSpeed;, ]1 t0 K, \1 N" z
- }
/ {. j2 l3 |7 z r - motor_10.run(Power);
6 t W8 J( [7 K# s% Q' g' g! H - }
複製代碼 0 j) ^0 {# P0 p( ~' {3 K
' J" a p- h, x* E
|
|