=w=新手上路,关于VEX+Arduino做道闸的问题
代码在这里~只用了VEX的那个直流电机、两个限位开关和两个FC-04的超声波……#include <Servo.h>
#define MOTOR_PIN 7 // define the PWM range for the VEX speed controll
#define MIN_POS 1000 // 0
#define MAX_POS 2000 // 255
#define CENTER_POS 1500 // 127
Servo myservo;
const int TrigPin = 2;
const int EchoPin = 3;
const int SecondTPin = 4;
const int SecondEPin = 5;
const int bumperup = 8;
const int bumperdown = 9;
bool motor;
int uval,dval;
float cm1,cm2;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(SecondTPin, OUTPUT);
pinMode(SecondEPin, INPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(bumperup,INPUT);
digitalWrite(bumperup,HIGH);
pinMode(bumperdown,INPUT);
digitalWrite(bumperdown,HIGH);
myservo.attach(MOTOR_PIN);
motor = false;
}
void loop()
{
myservo.attach(MOTOR_PIN);
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm1 = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm1 = (int(cm1 * 100.0)) / 100.0; //保留两位小数
delay(100);
digitalWrite(SecondTPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(SecondTPin, HIGH);
delayMicroseconds(10);
digitalWrite(SecondTPin, LOW);
cm2 = pulseIn(SecondEPin, HIGH) / 58.0; //将回波时间换算成cm
cm2 = (int(cm2 * 100.0)) / 100.0; //保留两位小数
delay(100);
uval = digitalRead(bumperup);
Serial.print(cm1);
Serial.print("cm1");
Serial.println();
Serial.print(cm2);
Serial.print("cm2");
Serial.println();
uval = digitalRead(bumperup);
dval = digitalRead(bumperdown);
delay(10);
if(0<cm1<=30)
{
uval = digitalRead(bumperup);
while(uval == HIGH && motor == false)
{
myservo.writeMicroseconds(MIN_POS);
uval = digitalRead(bumperup);
}
myservo.writeMicroseconds(CENTER_POS);
motor = true;
}
delay(10);
dval = digitalRead(bumperdown);
myservo.writeMicroseconds(CENTER_POS);
if(cm1>=30 && cm2>=30)
{
while(dval == HIGH && motor == true)
{
myservo.writeMicroseconds(MAX_POS);
dval = digitalRead(bumperdown);
}
myservo.writeMicroseconds(CENTER_POS);
motor = false;
}
}
然而症状是……无论超声波的值是虾米,道闸只会一直向上和向下……求救QAQ 道闸一般选择伺服电机,两个终端之前要减速,提供阻尼,否则那根杆很容易折断 if语句写的不对。。要A>100 || A<50(且),这种写法明显的语法错误 迷你强 发表于 2015-5-22 23:26 static/image/common/back.gif
道闸一般选择伺服电机,两个终端之前要减速,提供阻尼,否则那根杆很容易折断
已经配上差速器了~但是我的两个超声波是装在道闸前端和后端的……这样的写法也不对吗? if(0<cm1<=30) 这个就是错误语句 迷你强 发表于 2015-5-23 22:26 static/image/common/back.gif
if(0
感谢大神!这问题搞了一星期没明白……
页:
[1]