做个小车很想玩
2015-08-181.4万
AI 快速预览详细
本文讨论了一个使用Arduino制作的小车项目,该项目配备了前置红外数字传感器和左右超声波壁障。作者遇到了一个程序问题,即红色字体部分的if语句始终跳过。文章详细描述了代码结构、故障现象以及可能的原因。通过串口打印标记,发现S1和S2的值未按预期进行比较。建议检查S1和S2的值是否正确读取,并确保它们在if语句中的比较逻辑正确。
|
在下为初级小白,好不容易做一个小车,(前置红外数字传感器,左右为超声波壁障);自己和好朋友一起检查程序耗时一晚,没发现什么地方错了,用串口打印标记发现红色字体部分直接跳过了,请求大神解答。感谢!!! //电机转动 int IN1 =4; int IN2 =5; int IN3 =6; int IN4 =7; int pwmA =10; int pwmB =9; //超声波 const int trigA=8; //触发信号 const int echoA=11; //反馈新高 const int trigB=12; //触发信号 const int echoB=13; //反馈新高 float S1; float S2; //红外数字 const int InfraredSensorPin = 3; void setup() { //电机 pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); pinMode(pwmA,OUTPUT); pinMode(pwmB,OUTPUT); // 超声波 pinMode(echoA, INPUT); pinMode(trigA, OUTPUT); pinMode(echoB, INPUT); pinMode(trigB, OUTPUT); //红外数字 Serial.println("Start!"); pinMode(InfraredSensorPin,INPUT); Serial.begin(9600); } //超声波函数 void chaoshengyouA(){ // float S1=0; long IntervalTime1=0; //定义一个时间变量 digitalWrite(trigA, 1);//置高电平 delayMicroseconds(15);//延时15us digitalWrite(trigA, 0);//设为低电平 IntervalTime1=pulseIn(echoA, HIGH);//用自带的函数采样反馈的高电平的宽度,单位us float S1=IntervalTime1/58.00; //使用浮点计算出距离,单位cm Serial.println(S1);//通过串口输出距离数值 } void chaoshengzuoB(){ //float S2=0; long IntervalTime2=0; //定义一个时间变量 digitalWrite(trigB, 1);//置高电平 delayMicroseconds(15);//延时15us digitalWrite(trigB, 0);//设为低电平 IntervalTime2=pulseIn(echoB, HIGH);//用自带的函数采样反馈的高电平的宽度,单位us float S2=IntervalTime2/58.00; //使用浮点计算出距离,单位cm Serial.println(S2);//通过串口输出距离数值 } //电机函数 void Forward(){ digitalWrite(IN1,HIGH); //右轮前进 digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); //左轮前进 digitalWrite(IN4,LOW); } void TurnLeft(){ digitalWrite(IN1,HIGH); //右轮前进 digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); //左轮前进 digitalWrite(IN4,LOW); } void TurnRight(){ digitalWrite(IN1,LOW); //右轮前进 digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); //左轮前进 digitalWrite(IN4,LOW); } void Stop(){ digitalWrite(IN1,LOW); //右轮前进 digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); //左轮前进 digitalWrite(IN4,LOW); } void loop(){ analogWrite(10,255); analogWrite(9,120); Serial.print("Infrared Switch Status:"); Serial.println(digitalRead(InfraredSensorPin),BIN); delay(50); if(digitalRead(InfraredSensorPin) == LOW) { Stop(); // 停车判断 chaoshengyouA(); //S1 chaoshengzuoB(); //S2 delay(100); float a=S1; float b =S2; Serial.print("www"); if(a>b){ //此处的if语句始终跳过,直接执行紧接着的else; TurnRight(); delay(800); } else{ TurnLeft (); delay(800);Serial.print("jjj"); } } else { Forward(); } } |




void loop()
{ analogWrite(10,255);
analogWrite(9,120);
TurnLeft ();
delay(1000);
TurnRight();
delay(1000);
Stop();
delay(1000);
}这是主函数,看着左右轮运行正常。
你看我的程序没问题吧?
Infrared Switch Status:1
Infrared Switch Status:1
Infrared Switch Status:1
5.33
404.21
wwwjjjInfrared Switch Status:0
2.14
403.38
wwwjjjInfrared Switch Status:0
3.31
83.22
wwwjjjInfrared Switch Status:0
3.43
404.17
wwwjjjInfrared Switch Status:0
2.79
404.21
wwwjjjInfrared Switch Status:0
2.95
406.29
这是串口打印的部分数据,还是不行啊