|
|
- #include <Arduino.h>
Y; S; p( T6 t! U5 n( d9 N - #include <Wire.h>: [7 ]) Y6 F+ V) L
- #include <Servo.h>
Y' c/ D- C5 c# B3 G Q/ C
" o3 ]% `' j; r2 E! a4 T- #include "MePort.h"9 w- A8 ^( ?2 H0 e
- #include "MeUltrasonic.h"5 Z/ T( d) S6 e% j4 d5 V/ A
- #include "MeDCMotor.h"
; H( O7 h4 ^: L1 V' H4 r6 s - * V0 G) ^5 o2 v& Z
- //double Input, Output ;
! o I% }1 `3 {* w3 m, o - float MaxSpeed = 255;3 g5 \6 \' o& P2 h) N8 m
- float MaxPower = 180;" |' M* ~# y( w
- float MinPower = 120;
' l2 X* }: ~2 A$ h% o0 ^3 x5 e - float Error,ErrorAcc,ErrorDec;" L: V1 e' z& |' D# X/ w. n, L
- " A& I- i. J5 Z) V+ o' q* @
- float Kp=0.14;
( C- x! Y% q5 e# e9 e7 S# A - float Kd=0.00020;//23;5 H$ ]" Q$ [( g* f0 k
- float Ki=0.000201;& U$ V$ X4 v8 ]6 J, \% Q
- + m* Y' K1 T# l6 H3 c
- float nPower;; c/ b) f( S$ W# h- ?' v4 s/ H, g
- MePort lightsensor_6(6);0 B/ a2 V: h9 S+ h
- MePort lightsensor_8(8);
& A/ [6 P3 S3 l/ S' ] - MeDCMotor motor_9(9);" {1 ^. f, r$ R$ y, `+ j. l+ M. m: B: _
- MeDCMotor motor_10(10);9 p! u& J6 E( T8 X" B' s2 i& w: a
- unsigned long previousMillis = 0;
% {/ l/ f! X5 k" l, G2 ~7 R+ W1 O - const long interval = 1;1 q% O5 @ U* i9 d2 }: m5 d, r
- : E" H! p4 i2 z8 n- G
- void setup(){
" M- G' W& C- A1 P- v - lightsensor_6.dWrite1(1);2 o0 I( l5 V6 ~' H5 p5 A1 n9 G
- nPower = 160;
& I6 e/ ]% ^, N. g& g; e) K - Error=0;4 c! C& [& Y! S
- ErrorAcc=0;' M0 h& s2 P3 B I$ @$ t) @
- } _0 \+ u4 v/ U8 D
$ x, S* ^/ k7 [3 m* C( S& O- void loop(){
. l8 ]1 c! R1 E! i& v - unsigned long StartTime = millis();- |7 F0 |3 I+ Z! _
- if(ErrorAcc < 18000 && ErrorAcc > -18000){5 j3 {) B9 c% D# x
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
$ s2 I& _; o( f7 _) d - ErrorAcc += nError*Kd ;
' T( _( r2 M' y* P$ E3 u - ErrorDec -= nError*Ki ;
& _5 }0 B3 v& P0 \! ^# m - Error = int(nError*Kp+ErrorAcc+ErrorDec);/ |9 j9 x9 o( d% r
- if(nError < 80 && nError > -80){3 K: v$ T& P* s4 a: j& n
- if(nPower < MaxPower){
8 ?( B! q; I6 T; [4 q% h - nPower += 3;0 `" c4 I$ F+ ?) }9 C( c2 T
- }
3 q* J: X# }! M/ P% n - } else{( p, b1 m& f x7 x
- if(nPower > MinPower){" i; D% T! S% M4 Z+ C' G$ f" ^ y
- nPower -= 2;& n) ]) r. j1 m5 {' \" t9 b+ e
- }
/ r+ J& {, D4 m8 }/ P( A; M9 D - } 7 v3 U5 }- w5 }( c% o' O5 x
- MotoL(nPower-Error);
( |" \( w. G0 x. Q) ^. C - MotoR(nPower+Error);
, P2 T. H% F/ j# E% d; s - }else{( \1 J% z3 Q: ]" W$ z
- motor_9.run(0);
2 f- z. V7 \7 m; r - motor_10.run(0);* \6 f. e: x0 \' V# @
- }9 P7 j( d3 `) Q( X9 Z/ b
- do{}while(millis() - StartTime < interval);# a' [, W* }6 B) H$ ?1 n0 d
- }
- ~4 A( b8 A" U& J* M( Y0 z1 I# ? - , l1 S3 B/ g$ {( J
- void MotoL(int Power){% C$ K, G& T [2 v- n7 ^; v
- if (Power > MaxSpeed){
5 _! X' z: I E+ f j* Q G( E/ S - Power = MaxSpeed;* i' }6 g7 c% i3 B
- }
+ ? r* x- I+ Z* e9 z x - if (Power < -MaxSpeed){% a- G! T" V. E* Z8 u
- Power = -MaxSpeed;$ V' n3 j" p2 Y k
- }
8 W; g" T0 }9 g( @ - motor_9.run(Power);
, G9 A& g4 U( @! \& j3 j9 Z) h! B) |3 n - } ! P u( ?9 w( c# G/ a3 R7 ]3 i
- F/ X! B+ T1 T7 U% u; j# S1 j
- void MotoR(int Power){
; N0 e3 M! b! M4 @ - if (Power > MaxSpeed){# O+ ? s2 k+ x
- Power = MaxSpeed;
A4 |& n( m) ~8 l) e - } 6 G( [) S$ F# X
- if (Power < -MaxSpeed){
; I+ g* J6 e: z6 b/ w - Power = -MaxSpeed;% @2 \4 B& _; z; k" o
- }
& ~* t7 f. ], F' K) ]0 K- n1 g - motor_10.run(Power);* h! H, U5 P! V3 E5 Y+ a* @5 [
- }
複製代碼
: ]/ X1 R, ~9 i" y) R' v' n: n- @0 z' i% q
|
|