6591浏览
查看: 6591|回复: 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();
}
}

Cain  初级技匠

发表于 2015-8-19 11:56:26

打印一下a与b,看下数值呢?
回复

使用道具 举报

小狼要飞  见习技师
 楼主|

发表于 2015-8-19 15:07:51

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  NPC

发表于 2015-8-19 15:53:13

你的 A 值远远小于b值,A>b 这个情况没有被触发啊。
回复

使用道具 举报

小狼要飞  见习技师
 楼主|

发表于 2015-8-19 16:05:53

Ricky 发表于 2015-8-19 15:53
你的 A 值远远小于b值,A>b 这个情况没有被触发啊。

不管a  b  哪个数值大,小车都是左轮在转。我用另外一个程序检查了一下,不是轮子的问题。  
void loop()
{ analogWrite(10,255);
  analogWrite(9,120);
TurnLeft ();
delay(1000);
TurnRight();
delay(1000);
Stop();
delay(1000);

}这是主函数,看着左右轮运行正常。
你看我的程序没问题吧?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主

楼主的其它帖子

上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail