|
|
- #include <Arduino.h>
0 v1 e" _/ U/ I- @0 l+ x2 w9 K - #include <Wire.h>3 g+ r" W& o9 b8 E" P
- #include <Servo.h>
' s! }% f. x, m5 y1 m3 I3 R - 7 J7 r5 B+ ~, W3 \; N1 Z L' ]
- #include "MePort.h"
% B: P. [6 k3 u5 j" h$ T$ V - #include "MeUltrasonic.h"$ r R) n( [: _/ ~ W0 N
- #include "MeDCMotor.h"- V2 N1 D" A1 ?* X* ?# Q
- 2 o* Q3 i8 V7 M* _: t5 y
- //double Input, Output ;9 P, q+ d& ~% Q& Y4 m. ~
- float MaxSpeed = 255;- k9 k; s+ I- P* ^
- float MaxPower = 180;% W; N- g7 ?) u0 I1 r, Z6 R
- float MinPower = 120;6 T F2 C/ M& x# b5 Z' T
- float Error,ErrorAcc,ErrorDec;
. ]0 O8 @8 t, t' ?! y
7 p: ~1 D5 Z. l- float Kp=0.14;2 L$ @' ^$ `5 X8 n, J
- float Kd=0.00020;//23;9 z5 T# Q1 D- U, c& t* y6 U
- float Ki=0.000201;
8 M) h3 \; M" j! c+ c9 S6 y) h
0 l7 r' U- V" w# X& Q4 ?/ G- float nPower;
8 G2 l/ T4 O% [8 M - MePort lightsensor_6(6);6 T6 l3 N1 r$ A D$ T3 }
- MePort lightsensor_8(8);
! r. k) d$ b: u- A - MeDCMotor motor_9(9);
* t7 ~( X, o' T: Y1 Y' v) N! Y - MeDCMotor motor_10(10);+ Z+ A: D, g1 b+ D. X
- unsigned long previousMillis = 0;
6 P% W0 x4 l7 ]- x7 w - const long interval = 1;
. G+ ^' P4 m4 { q* Q' V! ]
! v3 H2 G9 l+ P8 y& T! ~9 I; _- void setup(){
/ p8 {# E3 ]3 |2 ]% C7 a0 o9 h - lightsensor_6.dWrite1(1);
5 q; M0 t/ }5 Y - nPower = 160;
3 n6 D8 O; K5 ?# C - Error=0;
{9 B! H& ~. z) d4 L - ErrorAcc=0;6 P1 n: x4 B J" q
- }" Y5 J: D2 I m" z
- : ^( P2 L7 \3 g" R
- void loop(){2 L5 s0 C6 k4 m. b8 w. f/ u- f6 d
- unsigned long StartTime = millis();* S `6 C" F) d* d7 V, I- a
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
) v* m- a B7 A2 x$ A8 L# }5 K4 U - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();; m$ B# F& ?5 X0 j4 {
- ErrorAcc += nError*Kd ;
4 ~. c. I1 @( v6 ^; x% u8 V - ErrorDec -= nError*Ki ;: D2 i T1 v7 x- c$ w, R
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
$ m8 D9 f% e' u; O0 I - if(nError < 80 && nError > -80){
& v1 t( J2 f2 P+ D/ U. z - if(nPower < MaxPower){
. Z# k, ~: v# n6 s - nPower += 3;/ p2 ~, ] H0 L+ \
- }
3 m8 c. ^9 R& V$ V% G2 Z; U - } else{) n5 a$ b# O, A m+ Q- ^# x- ~; [
- if(nPower > MinPower){
, e6 E4 v, V' [+ O+ K - nPower -= 2;6 Q$ P; f. d8 _5 ~
- }' e& a X \, G8 f, m" L
- }
6 {) f8 n) ] |" A U5 T% | - MotoL(nPower-Error);
0 }. F, N3 Z; v P r% R( ^ - MotoR(nPower+Error);
% L- y) X) {, n! y/ O - }else{ C8 G4 m: W) }4 ^" i: K9 f
- motor_9.run(0);
; y2 \- P. b e( y' S - motor_10.run(0);* M/ c) c/ A/ u+ Z1 S t
- }
/ {2 W' B6 L" U2 S9 n8 Y2 p - do{}while(millis() - StartTime < interval);
0 ~$ r. R, T9 o9 p" f( J" M$ n- T - }* V. a1 M1 B. _6 k8 Q% E
- 8 p' ]! s1 E6 A( E) ]6 t
- void MotoL(int Power){
# m' V7 s( A: i, S1 C - if (Power > MaxSpeed){4 ?: t' X2 A1 }, z
- Power = MaxSpeed;$ r% Q. L! m7 X2 j; x ?
- } * A' L! m/ e5 t
- if (Power < -MaxSpeed){
% i& `, _9 M) r! D - Power = -MaxSpeed;
! C3 R! h! s' r4 L* ]2 [' P - }
a0 y {" R8 T - motor_9.run(Power);% ?0 t3 l O5 q6 D* X. e2 `& ~' r
- } , w% Q- ]. t% T: X' J1 l( J9 S
- ) v9 e0 J$ |* Q( o6 b9 r
- void MotoR(int Power){) Z$ c. l/ E8 B8 n3 M. R
- if (Power > MaxSpeed){
; l/ y* t6 |9 Q3 M. O - Power = MaxSpeed;
4 A7 l& X! m8 Z. V - }
+ V$ M! \' R: B7 V, {& D! [ - if (Power < -MaxSpeed){. U5 `8 e: X4 M* _, @
- Power = -MaxSpeed;# t' F0 c4 y) h1 Y( P
- }
, P/ y& ?% y8 x& u - motor_10.run(Power);
& A N6 B( `: x0 j# U - }
複製代碼 ( d0 Y g" d1 d* I5 \: Z$ Y
# q( p# N/ R- f5 {( B |
|