Arduino и библиотека IRremote

Для управления нагрузкой будем использовать инфракрасный датчик, пульт управления и библиотеку для Arduino IRremote. Сначала вам нужно скачать библиотеку IRremote. Потом копируем в папку с установленной программой в директорию \arduino\libraries. Далее запускаем среду разработки arduino.

Контроль нагрузкой с помощью ИК пульта!

Для подключения датчика используется три провода, два крайних вывода это питание, левый это данные. Для работы необходимо импортировать библиотеку #include <IRemote.h> . Наш датчик подключен к 11 цифровому выводу. При поступлении сигнала с ПДУ наш датчик при помощи библиотеки IRremote преобразует его в цифровое значение.

Каждая кнопка имеет свое уникальное цифровое представление. Для того чтобы узнать это значение в десятичном формате можно передать его по Serial порту с помощью метода println(get, DEC). Ну а дальше ни чего сложного, есть интовое полученное значение и с помощью логики можно управлять любой нагрузкой.

Контроль нагрузкой с помощью ИК пульта!Схема подключения!

Выход с инфракрасного датчика подключен к 11-му входу RECV_PIN. Цифровые выходы реализованы на 50-52 пинах. Переменная laststate запоминает предыдущее состояние выхода. Методы PowerOn() и PowerOff() выполняют функцию включения и выключения нагрузки. Метод SetPinAndButton(int ir1,int ir2,int pin) настравает определенный пин на страбатывания при определенных значения ir1, ir2. При получении данных с датчика переменная имеет два значения. К примеру для первой кнопки ПДУ получились значения 1 и 2049. Переменная count позволяет избедать частого "мигания" нагрузки. Нагрузка включаетсья лишь при достижении значения 4. Поэтому для включения определенного светодиода нужно нажать на кнопку ПДУ и подержать ее.

А вот и сама программа

#include <IRremote.h>
int RECV_PIN = 11;
int RECV_PIN = 11;
int OUT=50;
int OUT1=51;
int OUT2=52;
boolean laststate=true;
long get;
int count=0;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(OUT,OUTPUT);
pinMode(OUT1,OUTPUT);
pinMode(OUT2,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
if (irrecv.decode(&results))
{
get=results.value;
//Serial.println(get, DEC);
SetPinAndButton(1, 2049,OUT);
SetPinAndButton(2, 2050,OUT1);
SetPinAndButton(3, 2051,OUT2);
irrecv.resume(); // Receive the next value
}
}
void SetPinAndButton(int ir1,int ir2,int pin)
{
if ((get==ir1)|(get==ir2))
{
if(laststate)
{
count++;
if(count==4) PowerOn(pin);
}
if(!laststate)
{
count--;
if(count<0) PowerOff(pin);
}
}
}
void PowerOn(int outpin)
{
digitalWrite(outpin,HIGH);
laststate=false;
}
void PowerOff(int outpin)
{
digitalWrite(outpin,LOW);
laststate=true;
}

Комментарии  

 
#1 Ленар 17.04.2014 08:57
Круто тоже так хочу)
Цитировать
 
 
#2 дмитрий 20.11.2015 13:19
Комментировать код не учили?
мне вот например непонятно что такое long get;
Цитировать
 
 
#3 ВАФЛЁР 29.01.2016 01:52
Цитирую дмитрий:
Комментировать код не учили?
мне вот например непонятно что такое long get;

А что тут непонятного? Переменная типа long, по имени get.
"long, это как int, но немного подлиньше" (с) гуф
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Последние комментарии

Последнии темы форума

-->