07-01-2018, 15:44
Na pierwszy rzut oka przyszło mi do głowy coś takiego, chyba też nie jest zbyt eleganckie i nie budowałem tego, ale powinno działać.
Kod:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
long BUTTON_1 = 0xFF30CF; // sygnał przycisku 1
long BUTTON_2 = 0xFF18E7; // sygnał przycisku 2
int MOTOR_1_UP = 4; // pin do podnoszenia
int MOTOR_2_DOWN = 5; // pin do opuszczania
int STATUS = 0; // zmienna dla statusu rolety np: 0 - nie rusza się, 1 - porusza się w górę, 2 - porusza się w dół
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // nasłuchiwanie przycisków
pinMode(MOTOR_1_UP,OUTPUT);
pinMode(MOTOR_2_DOWN,OUTPUT);
}
void loop() {
if (irrecv.decode(&results))
{
if(results.value == BUTTON_1) // podnoszenie
{
if(status == 1) // jeżei już była podnoszona
{
status = 0; // zatrzymanie
}
else
{
status = 1; // podnoszenie
}
}
if(results.value == BUTTON_2) // opuszczanie
{
if(status == 1) // jeżeli już była opuszczana
{
status = 0; // zatrzymanie
}
else
{
status = 1; // opuszczanie
}
}
irrecv.resume(); // oczekiwanie na następny przycisk
}
if(status == 0){
stop();
}
if(status == 1){
up();
}
if(status == 2){
down();
}
}
void stop(){
digitalWrite(MOTOR_1_UP,LOW);
digitalWrite(MOTOR_2_DOWN,LOW);
}
void up(){
digitalWrite(MOTOR_1_UP,HIGH);
digitalWrite(MOTOR_2_DOWN,LOW);
}
void down(){
digitalWrite(MOTOR_1_UP,LOW);
digitalWrite(MOTOR_2_DOWN,HIGH);
}