我的是uno。用USB连接电脑。
做了一个红绿灯控制+红外线对射报警的程序。
电脑上的程序不是我写的。
在电脑程序打开arduino uno的串口时,红绿灯会复位(红灯)。详情如下
3,4接入控制按钮(DI)
5,6接入LED灯+继电器(DO)
7,8接入红外线报警(DI)
工作方法是,接通3号线(10k下拉电阻)时,5输出到继电器及LED灯(330欧)。同样,4相对于6使用。
同时,给电脑预留接收串口命令,接收到10进制3或4就控制5、6的灯。
电脑那个程序在打开串口时,如果此时的继电器是常闭状态,会变为常开。同时LED灯灭。
用串口调试助手测试时,没有问题。
求问大侠们,是我的代码或接线有问题,还是他的电脑程序在连接串口时,会发送一组代码到arduino
下面是代码。
//===============================================
int Lpin = 3;//left button
int Rpin = 4;//right button
int Lled = 5;//left led and traffic light
int Rled = 6;//right led and traffic light
int Linfrare = 7;//left infrare
int Rinfrare = 8;//right infrare
int Lt=0;//left check
int Rt=0;//right check
int Ls=0;//left state
int Rs=0;//right state
int val;//Serial read value
unsigned char hexdata[8] ={0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8};//set Serial write
void setup(){
Serial.begin(9600);//set bitrate
pinMode(Lpin,INPUT);//set left button is input
pinMode(Rpin,INPUT);//set right button is input
pinMode(Lled,OUTPUT);//set left led is output
pinMode(Rled,OUTPUT);//set right led is output
pinMode(13,OUTPUT);//the led is low
}
void loop(){
val=Serial.read();//set val is Serial read
if(digitalRead(Linfrare)==HIGH||digitalRead(Rinfrare)==HIGH){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}// write 13 for infrare HIGH
if(digitalRead(Linfrare)==HIGH){hexdata[0]=0xB1;}else{hexdata[0]=0xA1;}//left infrare alarm
if(digitalRead(Rinfrare)==HIGH){hexdata[1]=0xB2;}else{hexdata[1]=0xA2;}//right infrare alarm
//======traffic light
if(digitalRead(Lpin)==1){Lt=1;}//left button is down
if(digitalRead(Rpin)==1){Rt=1;}//right button is down
if((digitalRead(Lpin)==0&&Lt==1)||val=='3'){//check Lpin is down and up or serial read 3
Lt=0;
if(Ls==0){
digitalWrite(Lled,HIGH);
hexdata[2]=0xB3;
Ls=1;
}else{
digitalWrite(Lled,LOW);
hexdata[2]=0xA3;
Ls=0;
}
}
if((digitalRead(Rpin)==0&&Rt==1)||val=='4'){//check Rpin is down and up or serial read 4
Rt=0;
if(Rs==0){
digitalWrite(Rled,HIGH);
hexdata[3]=0xB4;
Rs=1;
}else{
digitalWrite(Rled,LOW);
hexdata[3]=0xA4;
Rs=0;
}
}
Serial.write(hexdata,8);
delay(200);
}
//==========================================
做了一个红绿灯控制+红外线对射报警的程序。
电脑上的程序不是我写的。
在电脑程序打开arduino uno的串口时,红绿灯会复位(红灯)。详情如下
3,4接入控制按钮(DI)
5,6接入LED灯+继电器(DO)
7,8接入红外线报警(DI)
工作方法是,接通3号线(10k下拉电阻)时,5输出到继电器及LED灯(330欧)。同样,4相对于6使用。
同时,给电脑预留接收串口命令,接收到10进制3或4就控制5、6的灯。
电脑那个程序在打开串口时,如果此时的继电器是常闭状态,会变为常开。同时LED灯灭。
用串口调试助手测试时,没有问题。
求问大侠们,是我的代码或接线有问题,还是他的电脑程序在连接串口时,会发送一组代码到arduino
下面是代码。
//===============================================
int Lpin = 3;//left button
int Rpin = 4;//right button
int Lled = 5;//left led and traffic light
int Rled = 6;//right led and traffic light
int Linfrare = 7;//left infrare
int Rinfrare = 8;//right infrare
int Lt=0;//left check
int Rt=0;//right check
int Ls=0;//left state
int Rs=0;//right state
int val;//Serial read value
unsigned char hexdata[8] ={0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8};//set Serial write
void setup(){
Serial.begin(9600);//set bitrate
pinMode(Lpin,INPUT);//set left button is input
pinMode(Rpin,INPUT);//set right button is input
pinMode(Lled,OUTPUT);//set left led is output
pinMode(Rled,OUTPUT);//set right led is output
pinMode(13,OUTPUT);//the led is low
}
void loop(){
val=Serial.read();//set val is Serial read
if(digitalRead(Linfrare)==HIGH||digitalRead(Rinfrare)==HIGH){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}// write 13 for infrare HIGH
if(digitalRead(Linfrare)==HIGH){hexdata[0]=0xB1;}else{hexdata[0]=0xA1;}//left infrare alarm
if(digitalRead(Rinfrare)==HIGH){hexdata[1]=0xB2;}else{hexdata[1]=0xA2;}//right infrare alarm
//======traffic light
if(digitalRead(Lpin)==1){Lt=1;}//left button is down
if(digitalRead(Rpin)==1){Rt=1;}//right button is down
if((digitalRead(Lpin)==0&&Lt==1)||val=='3'){//check Lpin is down and up or serial read 3
Lt=0;
if(Ls==0){
digitalWrite(Lled,HIGH);
hexdata[2]=0xB3;
Ls=1;
}else{
digitalWrite(Lled,LOW);
hexdata[2]=0xA3;
Ls=0;
}
}
if((digitalRead(Rpin)==0&&Rt==1)||val=='4'){//check Rpin is down and up or serial read 4
Rt=0;
if(Rs==0){
digitalWrite(Rled,HIGH);
hexdata[3]=0xB4;
Rs=1;
}else{
digitalWrite(Rled,LOW);
hexdata[3]=0xA4;
Rs=0;
}
}
Serial.write(hexdata,8);
delay(200);
}
//==========================================