|
- #include <Arduino.h>
3 r: K5 U( T+ v4 W% x# f - #include <Wire.h>
, c P1 r0 B3 S* @' Y, p - #include <Servo.h>) v) A U* m. |7 \3 j
- $ A1 r1 g0 U7 R6 F# ]8 p
- #include "MePort.h"
, z" _/ E3 x3 I& ` - #include "MeUltrasonic.h", C6 j7 W9 c6 N5 `" I% N- [
- #include "MeDCMotor.h"* O! M' ?5 X6 J
- - ]5 Z. b8 W# C* ?# u, t8 @) K
- //double Input, Output ;
5 Q- L1 B) A9 w1 ~, ^' U - float MaxSpeed = 255;
& q- v# R8 u. T2 A+ ^1 \+ a: A - float MaxPower = 180;
8 D" T- \* d5 R. z, Y - float MinPower = 120;1 w) g0 o4 C6 i' G) n2 L, s$ d) T0 `
- float Error,ErrorAcc,ErrorDec;
$ f% b: I- F! ]$ I% y
% |# J, B. o. ^- float Kp=0.14;: x6 h+ [1 f# |& |' @
- float Kd=0.00020;//23;0 a3 V6 e" w* o, _
- float Ki=0.000201;7 k+ v6 f! f* I ?# X' B1 Y, p
- % X9 @0 T2 L0 S4 i9 R' {& n
- float nPower;4 G) S0 a5 _! \& J: c
- MePort lightsensor_6(6);. N2 Z7 A1 u: U& s1 i2 O( O
- MePort lightsensor_8(8);
4 \- W( s2 K' d! u6 L - MeDCMotor motor_9(9);$ P+ U5 ]4 ]3 S- a5 m P: L
- MeDCMotor motor_10(10);
, }+ ]+ N7 l e - unsigned long previousMillis = 0;
% ]' l# i7 o9 Q& c+ l( \# S; t3 b - const long interval = 1;* m$ S5 `* H- T' c
8 H* x( R8 S" {3 J" {4 @- void setup(){" s& j& u" o! o+ w5 q, H
- lightsensor_6.dWrite1(1);
7 \+ k/ a5 V3 t% r; O - nPower = 160;( A7 C$ f; s# p' D5 b9 H
- Error=0;2 y- Y! w' J2 b) U
- ErrorAcc=0;! j( r$ ~( A+ f1 ]7 {
- }
* p9 s1 f% X. }% K. ~ - / {0 a7 ~2 o I% `
- void loop(){
$ q# r+ C: n- U - unsigned long StartTime = millis();
# Q. n* x) v1 {( U! u. M" @ - if(ErrorAcc < 18000 && ErrorAcc > -18000){, z, r+ O# L+ \
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();( P1 E \4 m4 a8 O. m+ f- b1 T' e
- ErrorAcc += nError*Kd ;1 i3 y" N% |& T$ a. d
- ErrorDec -= nError*Ki ;
: W' ^. p0 B, \3 x! R! o! r! l3 p - Error = int(nError*Kp+ErrorAcc+ErrorDec);% I. V* W- w7 E! Y$ |5 J: h
- if(nError < 80 && nError > -80){- H1 a& K: b9 R
- if(nPower < MaxPower){
9 j V2 v' g/ {7 h: m. t - nPower += 3;) x- {6 k, f3 R; O( a5 S) l+ N
- }
( Y M- T( `) L7 e. v- g - } else{
# \* }4 {4 b* T# T% `1 W, b - if(nPower > MinPower){
4 d: P' j3 N( P5 E' N - nPower -= 2;
3 `) _% q1 s+ d& |$ l* m$ N - }8 b( k8 b) |6 o4 `' f
- } / n5 D: O2 v/ }! } P
- MotoL(nPower-Error);
3 K( t7 l8 M/ R* F* C) Y) q. o' ~" F - MotoR(nPower+Error);
; N& r" B! z$ B; o& T9 U8 r Q - }else{
% i: H U5 e5 F' @/ F0 ` - motor_9.run(0);
' [# y2 `/ j( Z% B. Z - motor_10.run(0);0 t+ V# C, m8 x' G: S) U" J
- }6 n- w+ q) K- F% w
- do{}while(millis() - StartTime < interval);' l0 x7 ^* V7 Q; w( S
- }
- G- j8 E9 c A i& ^ - 8 m. D- \" B; D: e G
- void MotoL(int Power){8 Q; C! t' D; p* `
- if (Power > MaxSpeed){$ j% V3 }& b/ F6 |/ B5 ~
- Power = MaxSpeed;
4 n3 f" H$ Z6 f+ N) | - }
6 c, J2 y$ e- a4 e- Y7 r0 ?' ~ - if (Power < -MaxSpeed){7 d! i: n- V& J% [* g2 Q
- Power = -MaxSpeed;
. u2 J9 @( `; V3 w( k' e6 ]- H1 o& o - } 1 P, r* k j5 V! g! N: Q
- motor_9.run(Power);
8 q- f% I6 L3 _, j% c: \: q% M0 E. r# }4 G. M - }
' r; F- w) X/ e7 R, W D& }1 F0 G0 }2 e - % ]' T& S# P. L- L5 s
- void MotoR(int Power){
}$ ~1 q, ^- e! b4 L - if (Power > MaxSpeed){
4 y" q. G4 z* w y* x. @9 ] - Power = MaxSpeed;
; t1 B- v/ U: K! s$ L0 H - }
\5 {" v. K' O$ Z! c; j2 H - if (Power < -MaxSpeed){
7 O- Q( M1 b- @3 N$ i6 z9 p - Power = -MaxSpeed;
+ L* {& S$ ^+ e: A! n( g - } ) x% w$ @- `: ?
- motor_10.run(Power);4 A# H7 W/ W8 W" v" a# A
- }
複製代碼 0 l& e; }3 i. B4 d' z
8 h4 @* ?1 X2 N0 J! j2 |- Y
|
|