74981| 55
|
[入门教程] DFR0100 Arduino教程 16--遥控灯 |
前一节对红外接收管如何使用有了简单的了解,这一节我们做个好玩儿的东西,遥控灯! 所需材料
STEP 1: 硬件连接其实就是在原有的基础上,加了个LED和电阻,LED使用的是数字引脚10。红外接收管仍然接的是数字引脚11。 STEP 2: 输入代码这里不建议一步一步输入代码,可以在原有的代码上进行修改,观察下相对前一段代码增加了哪些内容。
STEP 3: 代码回顾程序一开始还是对红外接收管的一些常规定义,按原样搬过来就可以了。
setup()函数中,对使用串口,启动红外解码,数字引脚模式进行设置。 到了主函数loop(),一开始还是先判断是否接收到红外码,并把接收到的数据存储在变量results中。 一旦接收到数据后,程序就要做两件事。第一件事,判断是否接收到了电源键的红外码。 第二件事,就是让LED改变状态。
这里可能对“!”比较陌生,“!”是一个逻辑非的符号,“取反”的意思。我们知道“!=”代表的是不等于的意思,也就是相反。这里可以类推为,!ledState是ledState相反的一个状态。“!”只能用于只有两种状态的变量中,也就是boolean型变量。 最后,继续等待下一组信号。 可以做些其他的事 |
本帖最后由 粒子 于 2022-1-5 16:45 编辑 Jane 发表于 2015-2-10 10:16 ## 这图里的 继电器可能型号有点问题,找了个样子有点像的## 总归就是Lesson 14里说的那种6脚的继电器,1、2脚做输入控制,输出脚只用4、6 直流电机本质上就是一根导线,工作之后是不是把板子局部短路了,才出这种问题的? 但是板子还是可以收信号的,只是解析出来的结果有问题,请教 下面是代码,仅仅改了几句话而已 #include <IRremote.h> int RECV_PIN = 11; int relayPin = 2; // Relay – digital 2 boolean relayState = LOW; // 继电器初始状态为LOW IRrecv irrecv(RECV_PIN); //设置RECV_PIN(11脚)为红外接收端 decode_results results; void setup(){ Serial.begin(9600); irrecv.enableIRIn(); //启动红外解码 pinMode(relayPin,OUTPUT); // 设置relayPin为输出状态 } void loop() { //是否接收到解码数据,把接收到的数据存储在变量results中 if (irrecv.decode(&results)) { Serial.println(results.value, HEX); //一旦接收到电源键的代码, relay翻转状态,HIGH变LOW,或者LOW变HIGH if(results.value == 0xFD00FF) { relayState = !relayState; //取反 digitalWrite(relayPin,relayState); //改变relay相应状态 } irrecv.resume(); // 继续等待接收下一组信号 } } |
Arduino:1.8.19 (Windows 10), 开发板:"Arduino Uno" sketch_sep30a:7:10: fatal error: IRremoteTools.h: No such file or directory #include <IRremoteTools.h> //调用IRremoteTools.h库 ^~~~~~~~~~~~~~~~~ compilation terminated. exit status 1 IRremoteTools.h: No such file or directory 请问各位大神,编译出现以上信息是啥意思啊? |
nivek 发表于 2014-12-14 05:44 https://lamb-mei.com/436/使用-arduino-1-5-x-ide-編譯有引用-irremote-出現-error-tkd2-was-not-declared-in-this-scope/ |
刚刚用家里的电视机遥控器试了一下,可以替代Mini IR Remote Controller,没有mini遥控器的朋友可以试哈 |
直接论坛里面红外的例子的代码拿来改改就可以用,自己家的遥控器发射时,用AURDUINO捕捉,用电脑的串口查出每个按键的码,然后就可以编程序了 |
#include <IRremote.h> int RECV_PIN = 11; int ledPin = 10; // LED – digital 10 //int ledPin9=9;// LED – digital 9 //int ledPin8=8;// LED – digital 8 boolean ledState = LOW; // ledstate用来存储LED的状态 //boolean ledState9 = LOW; // ledstate用来存储LED9的状态 //boolean ledState8 = LOW; // ledstate用来存储LED8的状态 IRrecv irrecv(RECV_PIN); decode_results results; #include <Servo.h> // 声明调用Servo.h库 Servo myservo; // 创建一个舵机对象 //int potpin = 0; // 连接到模拟口0 int val=0; //变量val用来存储从模拟口0读到的值 void setup(){ Serial.begin(9600); irrecv.enableIRIn(); pinMode(ledPin,OUTPUT); // 设置LED为输出状态 // pinMode(ledPin9,OUTPUT); // 设置LED为输出状态 // pinMode(ledPin8,OUTPUT); // 设置LED为输出状态V myservo.attach(9); // 将引脚9上的舵机与声明的舵机对象连接起来 } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); //一旦接收到电源键的代码, LED翻转状态,HIGH变LOW,或者LOW变HIGH // if(results.value == 0xFD00FF){ if(results.value == 0xFD48B7){//Button 3 // if(results.value == 0x1EC81DBF){//TVButton 3 // ledState = !ledState; //取反 // digitalWrite(ledPin,ledState); //改变LED相应状态 val-=100; ledState = 1; if(val<100) {val=100;ledState=0;} } if(results.value == 0xFD08F7){//Button1 //if(results.value == 0x6BC6597B){//TVButton1 // ledState9 = !ledState9; //取反 // digitalWrite(ledPin9,ledState9); //改变LED相应状态 val+=100; ledState = 1; if(val>900) {val=900;ledState=0;} } // if(results.value == 0xFD8877){//Button2 // // if(results.value == 0x735B797E){//TVButton2 // ledState8 = !ledState8; //取反 // digitalWrite(ledPin8,ledState8); //改变LED相应状态 // } if(ledState==1){ int val1; Serial.println(val); val1 = map(val, 0, 1023, 0, 179); //通过map函数进行数值转换 myservo.write(val1); // 给舵机写入角度 ledState=0; } delay(15); // 延时15ms让舵机转到指定位置 irrecv.resume(); } } |
请教: 拿这个电路和 Lesson 14--自制风扇 的电路简单合并了一下(就是把手动开关,换成红外遥控的) 发现一个奇怪情况,只要直流电机并在电路里面。 一旦继电器被导通,电机 LED开始工作,IRemote 部分似乎就罢工了,什么反映都没有。 Arduino板子上只要收到红外信号,总有个LED会闪亮,这种情况下,不论怎么发信号都不亮 但是只要把直流电机从里面拿走,剩下的部分可以非常完美的工作。 怎么破? |
droid_noob 发表于 2015-2-8 21:04 刚又试了一把,电机运作的时候,红外部分可以工作了 但是从串口里面出来的数据像是随机的,一般长按会一直吐FFFFFF 这种情况下面出来每一条都不一样,也不是FFFFFF |
Jane 发表于 2015-2-9 10:05 我去掉原型盾板,直接在 Uno 主板上试,效果是一样一样的 遥控器上挑一个键一直按住,从串口log上来看,IRemote 吐出来的东西是随机的 我去!直流电机还能不能一起快乐的玩耍了:curse:,一直干扰红外工作 截取一段串口数据: ... AAD5B6D4 // 这东西位数都不对了,正常应该是6位,这7、8位 44172A6A C40BD817 FEAC02E4 202F132B 4CB0FADF 3021E99 4AB0F7B5 DBE32B77 DE80C3EB 69DBBC3E ... =========================================================== 你说的:会不会转一会儿就停了,或者POWER灯变暗了 这个真没见着。 =========================================================== 其实电路很简单,红外控制继电器开合,继电器4脚6脚,连直流电机两端 验证这个电路也很简单,直流电机换成一个LED就行了,LED 的时候,完美工作啊 要不楼主试试,很诡异 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed