电路连接:
- LED
- 蜂鸣器
- 红外接收器
- 电机+电机驱动
一、可摇头遥控风扇实例代码:
#include <Servo.h>
#include <IRremote.h>//
volatile int irPin;
volatile int serPin;
volatile int motorPin;
volatile int angleStep;
volatile int speedStep;//
volatile int minSpeed;//
volatile int motorSpeed;//
volatile int angle;
volatile int motorStatus;//
long ir_item;
Servo servo_serPin;
IRrecv irrecv_12(12);
decode_results results_12;
void setup(){
irPin = 12;
serPin = 3;
motorPin = 6;
angleStep = 5;
speedStep = 5;//
minSpeed = 50;//
motorSpeed = 150;//
angle = 90;
motorStatus = 0;//
Serial.begin(9600);
servo_serPin.attach(serPin);
irrecv_12.enableIRIn();
}
void loop(){
if (irrecv_12.decode(&results_12)) {
ir_item=results_12.value;
String type="UNKNOWN";
String typelist[14]={"UNKNOWN", "NEC", "SONY", "RC5", "RC6", "DISH", "SHARP", "PANASONIC", "JVC", "SANYO", "MITSUBISHI", "SAMSUNG", "LG", "WHYNTER"};
if(results_12.decode_type>=1&&results_12.decode_type<=13)
{
type=typelist[results_12.decode_type];
}
Serial.print("IR TYPE:"+type+" ");
Serial.println(ir_item,HEX);
switch (ir_item)
{
case 0xFF18E7:
motorSpeed = motorSpeed + speedStep;//150+5
if (motorSpeed > 255)
{
motorSpeed = 255;
}
break;
case 0xFF38C7:
if (motorStatus == 0) //on/off
{
motorStatus = 1;
} else
{
motorStatus = 0;
}
break;
case 0xFF4AB5:
motorSpeed = motorSpeed + speedStep;//150-5
if (motorSpeed < minSpeed) {
motorSpeed = minSpeed;//50
}
break;
case 0xFF10EF:
angle = angle - angleStep;
if (angle < 0) {
angle = 0;
}
break;
case 0xFF5AA5:
angle = angle + angleStep;
if (angle > 180) {
angle = 180;
}
servo_serPin.write(angle);
delay(10);
break;
}
if (motorStatus == 1)
{
analogWrite(motorPin,motorSpeed);//on
} else
{
analogWrite(motorPin,0);//off
}
irrecv_12.resume();
} else
{
}
}
二、LED灯、蜂鸣器、遥控风扇:
/*
项目名称:遥控风扇
作 者: Naiva
日 期:2019/05/16
*/
#include <IRremote.h>
const int MOTOR1PIN = 3;
const int MOTOR2PIN = 5;
const int BUZZERPIN = 4;
const int LEDPIN = 7;
int RECV_PIN = 9;
volatile int speedStep;//
volatile int minSpeed;//
volatile int motorSpeed;//
volatile int motorStatus;//
IRrecv irrecv(RECV_PIN);
decode_results results;
void BUZZER()
{
digitalWrite(BUZZERPIN,HIGH);
delay(200);
digitalWrite(BUZZERPIN,LOW);
delay(100);
digitalWrite(BUZZERPIN,HIGH);
delay(200);
digitalWrite(BUZZERPIN,LOW);
}
void setup()
{
pinMode(BUZZERPIN,OUTPUT);
pinMode(LEDPIN,OUTPUT);
digitalWrite(LEDPIN,LOW);
digitalWrite(BUZZERPIN,LOW);
speedStep = 5;
minSpeed = 50;
motorSpeed = 150;
motorStatus = 0;
Serial.begin(9600);
Serial.println("Enabling IRin");
irrecv.enableIRIn(); // Start the receiver
Serial.println("Enabled IRin");
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
long RValue = results.value;
switch(RValue)
{
case 0xFFA25D://A - MOTOR
analogWrite(MOTOR2PIN,100);
BUZZER();
break;
case 0xFF629D://B - LED
digitalWrite(LEDPIN,!digitalRead(LEDPIN));
break;
case 0xFFE21D://C - BUZZER
digitalWrite(BUZZERPIN,!digitalRead(BUZZERPIN));
break;
case 0xFF02FD://UP - MOTORSpeed++
motorSpeed = motorSpeed + speedStep;//150+5
if (motorSpeed > 255)
{
motorSpeed = 255;
}
break;
case 0xFF9867://DOWN - MOTORSpeed--
motorSpeed = motorSpeed + speedStep;//150-5
if (motorSpeed < minSpeed)
{
motorSpeed = minSpeed;//50
}
break;
default :
Serial.println("ERRO ");
break;
}
if (motorStatus == 1)
{
analogWrite(MOTOR1PIN,motorSpeed);
} else
{
analogWrite(MOTOR1PIN,0);
}
irrecv.resume(); // Receive the next value
}
else
{
}
delay(100);
}
(2019/05/16)