hys1009 发表于 2016-11-24 18:11:20

求助!arduino红外遥控和超声波数码管显示测距两段程序合在一起上传无法运行

求助大神,两段程序分别上传运行良好,但是把代码合在一起,loop函数中的内容合在一起后上传功能却无法正常实现,是为什么?


代码如下:
超声波测距
void setup() {
// put your setup code here, to run once:

pinMode(ECHO,INPUT);
pinMode(TRIG,OUTPUT);
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:

float a;
a = getLength();
Serial.print(a);
Serial.println("cm");
cmbig = (int) (a * 10);
w1 = cmbig/1000;//百位上的数字
w2 = (cmbig)%1000/100;   //十位上的数字
w3 = (cmbig)%100/10;       //个位上的数字
w4 = cmbig%10;       //小数点后一位上的数字
for(i=0;i<50;i++)
SHOW();
}

//测距函数
float getLength()
{
float distance;
digitalWrite(TRIG,LOW);
delayMicroseconds(2);
digitalWrite(TRIG,HIGH);
delayMicroseconds(10);
digitalWrite(TRIG,LOW);
distance = pulseIn(ECHO,HIGH);
distance /= 58.0;
distance=(int (distance*10))/10.0;
return distance;
}

void pickDigit(int x)//定义pickDigit(x),其作用是开启dx端口
{
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
switch(x)
{
case 1:
    digitalWrite(d1, HIGH);
    break;
case 2:
    digitalWrite(d2, HIGH);
    break;
case 3:
    digitalWrite(d3, HIGH);
    break;
default:
    digitalWrite(d4, HIGH);
    break;
}
}

void clearLEDs()//清屏
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}

void show(int x)//展示数字、
{
clearLEDs();
if(x==0)
{
    digitalWrite(a,LOW);
    digitalWrite(f,LOW);
    digitalWrite(e,LOW);
    digitalWrite(d,LOW);
    digitalWrite(c,LOW);
    digitalWrite(b,LOW);
}
if(x==1)
{
    digitalWrite(f,LOW);
    digitalWrite(e,LOW);
}
if(x==2)
{
    digitalWrite(a,LOW);
    digitalWrite(b,LOW);
    digitalWrite(g,LOW);
    digitalWrite(e,LOW);
    digitalWrite(d,LOW);
}
if(x==3)
{
    digitalWrite(a,LOW);
    digitalWrite(b,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
    digitalWrite(g,LOW);
}
if(x==4)
{
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
    digitalWrite(b,LOW);
    digitalWrite(c,LOW);
}
if(x==5)
{
    digitalWrite(a,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
}
if(x==6)
{
    digitalWrite(a,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
}
if(x==7)
{
    digitalWrite(a,LOW);
    digitalWrite(b,LOW);
    digitalWrite(c,LOW);
}
if(x==8)
{
    digitalWrite(a,LOW);
    digitalWrite(b,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
}
if(x==9)
{
    digitalWrite(a,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
    digitalWrite(b,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
}
}

void SHOW()
{
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
show(w1);
if (w1!=0) pickDigit(1);
delay(5);
show(w2);
if((w2!=0)||((w1!=0)&&(w2==0)))pickDigit(2);
delay(5);
show(w3);
pickDigit(3);
delay(5);
show(w4);
pickDigit(4);
delay(5);
clearLEDs();
digitalWrite(p,LOW);
pickDigit(3);
delay(5);
}


红外遥控:
#include <IRremote.h>
int pin11=12;//定义I1接口
int pin12=13;//定义I2接口
int speedpin1=6;//定义EA(PWM调速)接口
int pin21=12;//定义I3接口
int pin22=2;//定义I4接口
int speedpin2=5;//定义EB(PWM调速)接口
int RECV_PIN = 7;   //红外接收信号引脚

//红外遥控逻辑代码
#define ADVAN 0xFF18E7   //我的遥控器2键
#define LEF 0xFF5AA5   //我的遥控器4键
#define BAC 0xFF4AB5//我的遥控器8键
#define LEF2 0xFF42BD //我的遥控器7键
#define RIG2 0xFF52AD//我的遥控器9键
#define RIG 0xFF10EF    //我的遥控器6键
#define STO 0xFF38C7    //我的遥控器5键
#define INC 0xFF30CF   //我的遥控器1键
#define DECR 0xFF7A85   //我的遥控器3键

IRrecv irrecv(RECV_PIN);//初始化
decode_results results;//定义结构体类型
int N=150;

void setup()
{
   pinMode(pin11,OUTPUT);//定义该接口为接口为输出接口
   pinMode(pin12,OUTPUT);
   pinMode(speedpin1,OUTPUT);
   pinMode(pin21,OUTPUT);//定义该接口为接口为输出接口
   pinMode(pin22,OUTPUT);
   pinMode(speedpin2,OUTPUT);
   pinMode(RECV_PIN,INPUT);
   Serial.begin(9600);
   irrecv.enableIRIn();// 开始接收
}

void loop() {
   int N;
   if (irrecv.decode(&results))
   {
      Serial.println(results.value, HEX);
   switch(results.value)
   {
   case ADVAN://2键前进
       advance();
       break;
   case LEF://4键左转
       turnleft();
       break;
   case LEF2://7键连续左转
   turnleft2();
   break;
   case RIG2://9键连续右转
   turnright2();
   break;
   case BAC://8键后退
       backup();
       break;
   case RIG://6键右转
       turnright();
       break;
   case STO://5键制动
       stopa();
       break;
   case INC://1键加速
       increase();
       break;
   case DECR://3键减速
       decrease();
       break;         
   default:
       delay(600);
   }
   irrecv.resume(); // Receive the next value
   }
   delay(600);
}

void advance()//前进
{   
   analogWrite(speedpin1,N);//输入模拟值进行设定速度   
   analogWrite(speedpin2,N);
   digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
   digitalWrite(pin12, LOW);
   digitalWrite(pin21,HIGH);//使直流电机(右)逆时针转   
   digitalWrite(pin22,LOW);   
}
void turnleft2()//左转
{
   int a,b;
   if(N>170)
   {
   a=N-130;
   b=N;   
   analogWrite(speedpin1,a);//输入模拟值进行设定速度   
   analogWrite(speedpin2,b);
   digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
   digitalWrite(pin12,LOW);
   digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
   digitalWrite(pin22,LOW);   
   delay(600);}
   else if (N>100)
    {
    a=N-90;
    b=N+80;
    analogWrite(speedpin1,a);//输入模拟值进行设定速度   
    analogWrite(speedpin2,b);
    digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
    digitalWrite(pin12,LOW);
    digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
    digitalWrite(pin22,LOW);   
    delay(600);}
   else if (N>40)
    {
    a=N-30;
    b=N+30;
    analogWrite(speedpin1,a);//输入模拟值进行设定速度   
    analogWrite(speedpin2,b);
    digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
    digitalWrite(pin12,LOW);
    digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
    digitalWrite(pin22,LOW);   
    delay(600);}
   else
   {
    a=0;
    b=20;
    analogWrite(speedpin1,a);//输入模拟值进行设定速度   
    analogWrite(speedpin2,b);
    digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
    digitalWrite(pin12,LOW);
    digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
    digitalWrite(pin22,LOW);   
    delay(600);
    }
}
void turnright2()//右转
{
   int a,b;
   if(N>170)
   {
   a=N;
   b=N-130;   
   analogWrite(speedpin1,a);//输入模拟值进行设定速度   
   analogWrite(speedpin2,b);
   digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
   digitalWrite(pin12,LOW);
   digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
   digitalWrite(pin22,LOW);   
   delay(600);}
   else if (N>100)
    {
    a=N+80;
    b=N-90;
    analogWrite(speedpin1,a);//输入模拟值进行设定速度   
    analogWrite(speedpin2,b);
    digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
    digitalWrite(pin12,LOW);
    digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
    digitalWrite(pin22,LOW);   
    delay(600);}
   else if (N>40)
    {
    a=N+30;
    b=N-30;
    analogWrite(speedpin1,a);//输入模拟值进行设定速度   
    analogWrite(speedpin2,b);
    digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
    digitalWrite(pin12,LOW);
    digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
    digitalWrite(pin22,LOW);   
    delay(600);}
   else
   {
    a=10;
    b=0;
    analogWrite(speedpin1,a);//输入模拟值进行设定速度   
    analogWrite(speedpin2,b);
    digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
    digitalWrite(pin12,LOW);
    digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
    digitalWrite(pin22,LOW);   
    delay(600);
    }
      

}


void backup()//后退
{   
   analogWrite(speedpin1,N);//输入模拟值进行设定速度
   analogWrite(speedpin2,N);   
   digitalWrite(pin11,LOW);//使直流电机(左)逆时针转
   digitalWrite(pin12,HIGH);
   digitalWrite(pin21,LOW);//使直流电机(右)顺时针转   
   digitalWrite(pin22,HIGH);   
   delay(600);
}

void turnleft()//左转
{
int a,b;
   a=20;
   b=200;
   analogWrite(speedpin1,a);//输入模拟值进行设定速度   
   analogWrite(speedpin2,b);
   digitalWrite(pin11,HIGH);//使直流电机(左)逆时针转   
   digitalWrite(pin12,LOW);
   digitalWrite(pin21,HIGH);//使直流电机(右)逆时针转   
   digitalWrite(pin22,LOW);   
   delay(1200);
   advance();
}
void turnright()//右转
{
   int a,b;
   a=200;
   b=20;   
   analogWrite(speedpin1,a);//输入模拟值进行设定速度   
   analogWrite(speedpin2,b);
   digitalWrite(pin11,HIGH);//使直流电机(左)顺时针转   
   digitalWrite(pin12,LOW);
   digitalWrite(pin21,HIGH);//使直流电机(右)顺时针转   
   digitalWrite(pin22,LOW);   
   delay(1200);
   advance();
}
void stopa()//停止
{   
   digitalWrite(pin11,HIGH);//使直流电机(左)制动
   digitalWrite(pin12,HIGH);
   digitalWrite(pin22,HIGH);//使直流电机(右)制动
   digitalWrite(pin21,HIGH);   
   delay(600);
}
void increase()//加速
{
   if(N<=225) //最大速度为225
   {
   N=N+20;
   analogWrite(speedpin1,N); //将a 的值赋给speedin1
   analogWrite(speedpin2,N); //将a 的值赋给speedin2
   delay(1000); //延时1 秒
   }
   else {
   analogWrite(speedpin1,225); //将a 的值赋给speedin1
   analogWrite(speedpin2,225); //将a 的值赋给speedin2
   delay(1000);
   }
}
void decrease()//减速
{
   if(N>=0) //最小速度为0
   {
   N=N-20;
   analogWrite(speedpin1,N); //将a 的值赋给speedin1
   analogWrite(speedpin2,N); //将a 的值赋给speedin2
   delay(1000); //延时1 秒
   }
   else {
   analogWrite(speedpin1,0); //将a 的值赋给speedin1
   analogWrite(speedpin2,0); //将a 的值赋给speedin2   
   delay(1000);
   }
}

hys1009 发表于 2016-11-24 18:13:04

请问是不是上面两个分开的程序loop函数中内容合起来顺序安排不合适,如果是,该怎么做呢?

九个皇后 发表于 2017-3-9 21:30:19

哪有那么简单,整合程序比单独的难多了
页: [1]
查看完整版本: 求助!arduino红外遥控和超声波数码管显示测距两段程序合在一起上传无法运行