Настольная лампа + ИК + выключатель
- Войдите на сайт для отправки комментариев
Всем привет. Есть у меня настольная светодиодная лампа, (светодиодной она стала после того как в ней сдох блок управления и лампа). Ну и конечно скучно просто включать свет. Хотел прикрутить ИК пульт, но вот буда, я же не программист. Похожие темы есть на форуме, но они не дают не конкретный отвеет, не код. Мне бы не хотелось использовать 25 реле с 10-тью группами контактов. Все на много проще, с точки зрения исполнения конечно, но не с точки зрения кода. Взял за основу это:
const int buttonPin = 3;
const int ledPin = 4;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
и это:
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
int a=0;
void setup()
{
irrecv.enableIRIn();
pinMode(4, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
delay(300);
if (results.value == 0x6D52472D) {a=a+1;}
if (a==1){digitalWrite(4, HIGH);} else {digitalWrite(4, LOW); a=0;}
{
delay(50);
}
irrecv.resume();
}
}
в итоге вышло что то такое. конечно понимаю что много не правельно и криво, но в коде выразил все свои мысли и понятно что я имел ввиду и что хочу. Ну я же говарю, я не программист. Писал как мог. Помогите кто чем может))
#include <IRremote.h> //библиотека ик пульта
const int irPin = 2; //вход ик приемника
const int buttonPin = 3; // кнопка вкл/выкл
const int ledPin = 4; // Светодиод
int buttonState = 0; //переменная с состоянием кнопки
int ledState = 0; //переменная состояния светодиода
int irval=0; //переменная для ик пульта
IRrecv irrecv(irPin); //не знаю что это
decode_results results; //не знаю что это
void setup() {
irrecv.enableIRIn(); //вкл. ик приемник
pinMode(buttonPin, INPUT); //кнопка как вход
pinMode(ledPin, OUTPUT); //светодиод как выход
}
void loop() {
ledState = digitalRead(ledPin); //присваиваем переменной статус светодиода
buttonState = digitalRead(buttonPin); //присваиваем переменной статус кнопки
if (irrecv.decode(&results)) //вроде как читаем ик пульт
if (results.value == 0x6D52472D) {irval=irval+1;}
if(buttonState == HIGH && ledState == HIGH) //если кнопка нажата и светодиод горит то...
{
// выполнять действие A
//если отпустить кнопку то выключить светодиод
//если нажать пульт то выключить светодиод
}
else if(buttonState == HIGH && ledState == LOW) //если кнопка нажата и не светодиод горит то...
{
// выполнять действие B
//если отпустить кнопку то включить светодиод
//если нажать пульт включить светодиод
}
else if(buttonState == LOW && ledState == HIGH) //если не кнопка нажата и светодиод горит то...
{
// выполнить действие C
//если нажать кнопку то выключить светодиод
//если нажать пульт выключить светодиод
}
else if(buttonState == LOW && ledState == LOW) //если кнопка не нажата и светодиод не горит то...
{
// выполнять действие D
//если нажать кнопку то включить светодиод
//если нажать пульт включить светодиод
}
}
ах да, чуть не забыл. Кнопка в моём светильнике с фиксацией. то есть у нее 2 положения. Другую поставить не могу, так как нарушу интерьер и красоту.
Спасибо что помогли. А можете еще помочь??? Немного подумал и сделал так...
#include <IRremote.h> int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results results; int a=0; const int buttonPin = 3; const int ledPin = 4; int buttonState = 0; void setup() { irrecv.enableIRIn(); pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { if (buttonState = digitalRead(buttonPin) || irrecv.decode(&results)) { delay(300); if (buttonState == HIGH || results.value == 0x6D52472D) {a=a+1;} if (a==1){digitalWrite(ledPin, HIGH);} else {digitalWrite(ledPin, LOW); a=0;} { delay(50); } irrecv.resume(); } }все хорошо, только при включении кнопкой получае блинк. Помогите избавится пожалуйсто...
Отдели мух от котлет.
buttonState = digitalRead(buttonPin); if (oldButtonState==LOW && buttonState==HIGH)//включили { digitelWrite(ledPin,HIGH); //включаем свет oldButtonState = buttonState; } if (oldButtonState==HIGH && buttonState==LOW)//выключили { digitelWrite(ledPin,LOW); //выключаем свет oldButtonState = buttonState; }Уже лучше, спасибо. только перекидного выключателя все равно не вышло. кнопка и пульт не зависят друг от друга, а хотелось что бы можно было при отпускании кнопки когда светик горит, он выключался
Ещё осталась пара вопросов. Если я сначала включаю с пульта, а затем переключаю кнопку, то лампа сразу не выключается,
а выключается только с второго переключения. Дальше работает корректно, если не включить с пульта при выключенной кнопке(когда она в лав),
и попытаться выключить кнопкой(переключить кнопку).