|
- #include <Arduino.h>0 d3 v. j( d% w
- #include <Wire.h>
/ g% K g! r/ ]& f' y - #include <Servo.h>
/ X! v I% ]4 }8 a8 m - ! Z+ c* {$ ^, q/ Y: K1 L* s
- #include "MePort.h"
) h$ \3 e- |2 l+ h1 G5 F - #include "MeUltrasonic.h"3 z2 G, H- U/ E0 {
- #include "MeDCMotor.h"
3 ~0 H/ k3 Y1 y2 t - U3 O: w7 {/ d# G
- //double Input, Output ;
" S6 B1 F7 y+ Z+ M - float MaxSpeed = 255;% L& U' `# A- y, o
- float MaxPower = 180;
7 V3 W. r/ C+ g% n- q - float MinPower = 120;" S" |4 H; S P# W' I
- float Error,ErrorAcc,ErrorDec;
; O9 [- a# _- w; |- P8 K' B
$ a" L: k2 W* o# k7 l# O8 z; I) `# E- float Kp=0.14;! U8 m9 S5 S1 \7 A! a
- float Kd=0.00020;//23;: G- K+ O2 e% a! [( T1 i |/ ~5 }) o
- float Ki=0.000201;
" j- b1 g. ?3 N3 c - ; _9 J$ ?! c: Y$ I- R
- float nPower;3 w0 ]3 W9 T' j" L
- MePort lightsensor_6(6);
5 e# m; r5 D7 ?1 F) Q, z T; R5 y - MePort lightsensor_8(8);7 ~% w! C" d7 ?, ~
- MeDCMotor motor_9(9);* h- ~4 W7 E, r9 ?4 P' k* s
- MeDCMotor motor_10(10);% p7 }2 r# _4 j
- unsigned long previousMillis = 0;3 q: _1 J. q& d- ]2 E1 I
- const long interval = 1;2 C) J# V2 c `7 @6 w- q6 q
- 4 m6 m4 m; Z- m9 \
- void setup(){4 ^8 |! i7 F; k! X! g$ L5 t
- lightsensor_6.dWrite1(1);
3 O) |7 [) Y; y8 f- | - nPower = 160;& J: ]) G. i1 `: t9 S
- Error=0;9 Q- Q& Y6 _: R" i% W" E
- ErrorAcc=0;4 ^* \; v3 d% M0 \, O+ ^/ F
- }: u& U+ ?# b5 \ Y# H- C) _$ K# A, z
- 8 l6 ?2 ^- b* v7 y5 b; I+ ^ {
- void loop(){
+ _; m1 \: ^- g8 k - unsigned long StartTime = millis();" V& G- W2 m' @) b+ g" y* E' l
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
4 K8 [! K( ]7 h- l/ O5 u0 J6 d- H+ j - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2(); ?, o: ~7 S8 C* x
- ErrorAcc += nError*Kd ;
- I+ S5 E$ P6 h( K - ErrorDec -= nError*Ki ;* A" J5 K6 w+ t k& E1 x/ z4 }
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
6 U/ R( l& j9 C, k8 } - if(nError < 80 && nError > -80){+ O0 U* X* U% W# D1 r
- if(nPower < MaxPower){3 w, y: I. [5 d9 M; i8 n
- nPower += 3;( J4 n# Y* {( a$ S, U
- }9 X3 _8 l8 b- i3 v2 }% T# o6 c T
- } else{
+ {% E' a" c3 a - if(nPower > MinPower){" M: M- y8 E% {7 ^0 N: }
- nPower -= 2;( G0 l; W6 x9 o2 p7 M% W# A' u {7 f
- }! T: q/ J' H O# p3 A3 c
- } " c4 o7 E0 |4 V+ T
- MotoL(nPower-Error);/ f. b8 D0 c7 [$ S, E
- MotoR(nPower+Error); 9 f" Q# ?3 z3 ?, @1 w1 U3 }9 u8 g0 |' y
- }else{
. h5 A" |& b" E, [* Z - motor_9.run(0);/ M& q7 Y7 u1 S+ [7 ^
- motor_10.run(0);
4 k* B, n! [1 e) s - }
# C; K- s8 _4 R4 k - do{}while(millis() - StartTime < interval);* G; c$ g1 N! J
- }; D( W) l- }( w! l
- . o4 [8 B; _ S+ I/ B( p8 z6 R
- void MotoL(int Power){3 u$ }$ n) f( k- |% |% [
- if (Power > MaxSpeed){! H! J, q& ?6 Z; ~+ H% v7 S* G' K
- Power = MaxSpeed;1 E, T/ Z! P- J
- } ; d* a- H) _+ X7 @3 |2 q9 @
- if (Power < -MaxSpeed){4 j' r) _/ x7 H: T
- Power = -MaxSpeed;. O0 h0 W3 m# |( \
- }
$ N" ~% k% e+ r, m9 A, p - motor_9.run(Power);( L- Q1 Y% ]7 o. w/ O
- }
1 o4 j; n& `8 D+ D/ M4 { - % T- J! B+ b, B/ N0 Y* ?" m
- void MotoR(int Power){
I. Y& u3 o9 c r - if (Power > MaxSpeed){
6 Q2 G6 k* c* d8 T7 u/ b - Power = MaxSpeed;0 k1 ?1 M1 I, p3 Z
- } 3 u$ G! a& o; h( z
- if (Power < -MaxSpeed){
# w8 w$ o$ V4 c - Power = -MaxSpeed;
& s4 z% `+ |' L" A$ i/ V* E- } - }
+ t _- Q% q/ u8 m. K* M% w - motor_10.run(Power);
" {. p8 R e0 u, M9 ^' c" L7 } - }
複製代碼 # z" Y, V# Y; |% p O# A
. u. a: \6 {% X# f' r, z
|
|