涂鸦arduino中文社区活动
楼主: Fortware

Arduino 定时器的使用

  [复制链接]

该用户从未签到

发表于 2016-4-27 15:11 | 显示全部楼层
我做的是开关和遥控两个灯,第二个等需要定时,但是在定时的时候如果邮人出现的话灯必须关闭,买了人体感应模块了,但是程序加进去一直没什么用,是不是我程序问题呢,大神帮看一下吧,谢谢,急啊。。。
#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);
  }
}

该用户从未签到

发表于 2016-5-18 10:10 | 显示全部楼层
PENGXUN9989 发表于 2013-8-24 17:27
我刚刚试了,没有反应,没有进入中断 与9楼一样

我刚试了,可以用。
谢谢分享。。

该用户从未签到

发表于 2016-5-29 20:11 | 显示全部楼层
为什么mstime放在setup而不是loop里

该用户从未签到

发表于 2016-6-14 17:51 | 显示全部楼层
2560编译错误

该用户从未签到

发表于 2016-8-8 14:30 | 显示全部楼层
简单侣图 发表于 2015-1-8 14:48
#include  请问这个函数需要添加文件库吗?我直接编译好像不行啊,怎么添加进去的 ...

把类库这个文件夹拷到Library文件夹下面去,再加载库

该用户从未签到

发表于 2016-9-11 16:42 | 显示全部楼层
mega 2560下载没反应??? 不能用定时器中断??

该用户从未签到

发表于 2016-9-19 22:30 | 显示全部楼层
mark一下!好好学习定时。。。

该用户从未签到

发表于 2016-10-13 11:01 | 显示全部楼层
刚好学到中断,下载学习下。

该用户从未签到

发表于 2016-10-29 10:43 | 显示全部楼层
xh1951 发表于 2013-11-11 12:14
arduino-mega2560上要用FlexiTimer2.h,否则编译能通过,但不会产生定时中断

我的问题,经你讲解,已经成功解决。非常感谢!

该用户从未签到

发表于 2016-10-31 09:23 | 显示全部楼层
xh1951 发表于 2013-11-11 12:14
arduino-mega2560上要用FlexiTimer2.h,否则编译能通过,但不会产生定时中断

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

本版积分规则

热门推荐

点灯·blinker-3 天猫精灵接入8266+继电器控制灯
点灯·blinker-3 天猫精灵
继续倒腾,今天试试把“点灯”接入家里的天猫精灵。 参考“点灯”官网教程:ht
stm32f103刷arduino 掉坑里了,出不来了
stm32f103刷arduino 掉坑
买了一个stm32f103c8t6的小板子,照教程刷了generic_boot20_pc13.bin,一切正常,用us
关于数据API调用的疑问
关于数据API调用的疑问
zai 调取数据时候 返回的是 response 400. 这是什么问题 是因为token算的不对
第一次装Visual Studio系统找不到指定文件要怎么解决啊
第一次装Visual Studio系
DIY宠物喂食器,竟如此简单,更有硬件开发工具免费领!
DIY宠物喂食器,竟如此简
去年疫情突发,封城、封小区以及人员隔离,让原本享受千般宠爱的主子们变成了靠吃猫砂
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表