|
我做的是开关和遥控两个灯,第二个等需要定时,但是在定时的时候如果邮人出现的话灯必须关闭,买了人体感应模块了,但是程序加进去一直没什么用,是不是我程序问题呢,大神帮看一下吧,谢谢,急啊。。。
#include <IRremote.h>
int Button1=5; //连接开关到D3。
int LED1 =12; //连接LED1到13(实际上UNO等版本已经有了)。
boolean onoff1=LOW; //设定一个变量用于记录开关状态。
int RECV_PIN = 11;
int LED2 = 2;
int Button2=3;
boolean onoff2=LOW;
long on1 = 0x00FF18E7;
long off1 = 0x00FF30CF;
long on2 = 0x00FF7A85;
long off2 = 0x00FF10EF;
IRrecv irrecv(RECV_PIN);
decode_results results;
int on = 0;
unsigned long last = millis();
void dump(decode_results *results) {
int count = results->rawlen;
if (results->decode_type == UNKNOWN)
{
Serial.println("Could not decode message");
}
else
{
if (results->decode_type == NEC)
{
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY)
{
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5)
{
Serial.print("Decoded RC5: ");
}
else if (results->decode_type == RC6)
{
Serial.print("Decoded RC6: ");
}
Serial.print(results->value, HEX);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
}
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");
for (int i = 0; i < count; i++)
{
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else
{
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println("");
}
void setup()
{
if (results.value == on2 )
digitalWrite(LED1, HIGH);
if (results.value == off2 )
digitalWrite(LED1, LOW);
pinMode(Button1,INPUT); //按钮端子作为输入
pinMode(LED1,OUTPUT); //LED1端子作为输出
digitalWrite(LED1,LOW);
pinMode(Button2,INPUT); //按钮端子作为输入
pinMode(LED2,OUTPUT); //LED2端子作为输出
digitalWrite(LED2,HIGH);
pinMode(RECV_PIN, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
int on = 0;
unsigned long last = millis();
}
void loop(){
if(digitalRead(Button1)==LOW) //由于本例检测上升沿触发,所以先检测输入是否低电平,
{
delay(10); //然后延时一段时间,
if(digitalRead(Button1)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
{
digitalWrite(LED1,onoff1); //写入当前LED1状态onoff,
onoff1=(!onoff1); //然后LED1状态反转,以便下一次使用。
delay(10); //延时一段时间,防止按钮突然断开再按下。
while(digitalRead(Button1)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED1输出端连续反转
{
delay(1);
}
}
}
if(digitalRead(Button2)==LOW) //由于本例检测上升沿触发,所以先检测输入是否低电平,
{
delay(10); //然后延时一段时间,
if(digitalRead(Button2)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
{
digitalWrite(LED2,onoff2); //写入当前LED2状态onoff,
onoff2=(!onoff2); //然后LED2状态反转,以便下一次使用。
delay(10); //延时一段时间,防止按钮突然断开再按下。
while(digitalRead(Button2)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED2输出端连续反转
{
delay(1);
digitalWrite(2,HIGH);
delay(5000);
digitalWrite(2,LOW);
delay(5000);
digitalWrite(2,HIGH);
}
}
}
if (irrecv.decode(&results))
{
if (millis() - last > 250)
{
on = !on;
digitalWrite(13, on ? HIGH : LOW);
dump(&results);
}
if (results.value == off1 )
{
digitalWrite(LED2, LOW);
pinMode(2,OUTPUT);
digitalWrite(2,HIGH);
delay(5000);
digitalWrite(2,LOW);
delay(5000);
digitalWrite(2,HIGH);
}
if (results.value == on1 )
digitalWrite(LED2, HIGH);
if (results.value == on2 )
digitalWrite(LED1, HIGH);
if (results.value == off2 )
digitalWrite(LED1, LOW);
last = millis();
irrecv.resume(); // Receive the next value
// pinMode(2,OUTPUT);
//digitalWrite(2,HIGH);
//delay(5000);
//digitalWrite(2,LOW);
//delay(5000);
//digitalWrite(2,HIGH);
}
} |
|