|
求助大神,两段程序分别上传运行良好,但是把代码合在一起,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);
}
}
|
|