|
|
本帖最后由 lou2382 于 2013-4-20 14:32 编辑
請問 !
我用2個紅外線開關+1個超音波感測器!
如果再30cm內 開啟紅外線偵測左 或右
但是問題是 上電後亂跑!!
哪邊有問題呢?
#include <Servo.h>
#define TRIGPIN 12
#define ECHOPIN 13
const int PIR1 = A1;
int PIR1Value=0;
const int PIR3 = A3;
int PIR3Value=0;
char Aflag=0;
#define AIB_PIN 4
#define AIA_PIN 5
#define BIB_PIN 7
#define BIA_PIN 6
int sensorValue;
#define speedvalue1 120
#define speedvalue2 120
long ping() {
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
return pulseIn(ECHOPIN, HIGH)/58;
}
void setup() {
// myservo.attach(3);
pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(PIR1, INPUT);
// pinMode(PIR2, INPUT);
pinMode(PIR3, INPUT);
Serial.begin(9600);
//myservo.write(pos);
}
void loop() {
long cm = ping();
PIR1Value = digitalRead(PIR1);
PIR3Value = digitalRead(PIR3);
if (cm < 30 ){
// //0代表接觸 1代表未接觸
if ( PIR1Value == 0 && PIR3Value == 1) {
//左轉
// Serial.println("L");
MOTOR_L();
}
else if ( PIR1Value == 1 && PIR3Value == 0) {
//又轉
// Serial.println("R");
MOTOR_R();
}
else if (cm<10 && PIR1Value == 0 && PIR3Value == 0){
//後退
// Serial.println("Retreat");
MOTOR_B();
}
else if (cm >20 && PIR1Value == 1 && PIR3Value == 1){
//前進
// Serial.println("Advance");
MOTOR_A();
}
else
// Serial.println("STOP");
MOTOR_S();
}
//結束loop
delay(200);
}
|
|