6868| 4
|
[求助] 做个小车很想玩 |
在下为初级小白,好不容易做一个小车,(前置红外数字传感器,左右为超声波壁障);自己和好朋友一起检查程序耗时一晚,没发现什么地方错了,用串口打印标记发现红色字体部分直接跳过了,请求大神解答。感谢!!! //电机转动 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(); } } |
Infrared Switch Status:1 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 这是串口打印的部分数据,还是不行啊 |
Ricky 发表于 2015-8-19 15:53 不管a b 哪个数值大,小车都是左轮在转。我用另外一个程序检查了一下,不是轮子的问题。 void loop() { analogWrite(10,255); analogWrite(9,120); TurnLeft (); delay(1000); TurnRight(); delay(1000); Stop(); delay(1000); }这是主函数,看着左右轮运行正常。 你看我的程序没问题吧? |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed