UNO+IR+RELEY+ETHERNET SHIELD
- Войдите на сайт для отправки комментариев
Сб, 31/10/2015 - 21:05
Добрый день!
Есть скетч. Он счелкает реле от ИК датчика.
Получая код пульта 13 он работает с реле на 2-м пине, и так далее.
Теперь есть задача. При получении с пульта код 59 отправлять через ethernet запрос типа "http://192.168.0.5:8080/jsonrpc?request={%22jsonrpc%22:%20%222.0%22,%20%22method%22:%20%22Input.Select%22,%20%22id%22:%201}"
Подскажите олгаритм работы.
#include <IRremote.h> #include <SPI.h> #include <Ethernet.h> #define FREEZE_TIME 250 //Тут определяем жесткую паузу между ближайшими нажатиями клавиш, миллисекунды #define RELAY_WORK_TIME 20 //Тут определяем сколько должны работать реле при нажатии кнопок (там где кнопки не фиксируются); #define RECV_PIN 8 //пин подключения IR приёмника //кнопка пульта может иметь значение как 44 так 2092 для примера //кнопки должны не залипать, а то питание хер словишь )) //реле 1, 4-7 нажал включилось, нажал выключилось //реле 2,3 для регулировки громкости, нажал сработало и отпустилось //Лучше использовать define вместо переменной: компилятор заменяет имена цифрами и не занимается место в оперативе для переменных. В данном случае сэкономили целых 8переменныхint*2байта=16 байт :) #define RELAY_POWR 2 //реле1 питания 13/2061 #define RELAY_VOLD 3 //реле2 громкость - 44/2092 #define RELAY_VOLU 4 //реле3 громкость + 43/2091 #define RELAY_MIX1 5 //реле4 микшера1 55/2103 #define RELAY_MIX2 6 //реле5 микшера2 54/2102 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 0, 200 }; byte server[] = { 192, 168, 0, 5 }; EthernetClient client; IRrecv irrecv(RECV_PIN); decode_results results; bool ON_State = false; bool LampState = false; bool RELAY_MIX1_State=false; bool RELAY_MIX2_State=false; void setup() { pinMode(RELAY_POWR, OUTPUT); pinMode(RELAY_VOLD, OUTPUT); pinMode(RELAY_VOLU, OUTPUT); pinMode(RELAY_MIX1, OUTPUT); pinMode(RELAY_MIX2, OUTPUT); digitalWrite(RELAY_POWR, LOW); digitalWrite(RELAY_VOLD, LOW); digitalWrite(RELAY_VOLU, LOW); digitalWrite(RELAY_MIX1, LOW); digitalWrite(RELAY_MIX2, LOW); irrecv.enableIRIn(); // Включаем ресивер Ethernet.begin(mac, ip); client.connect(server, 8080); } void loop() { if (irrecv.decode(&results)) { if (results.value == 13) { Blink_lamp(); ON_State=!ON_State; if (ON_State) { digitalWrite(RELAY_POWR,ON_State); } else { digitalWrite(RELAY_POWR,ON_State); } } if (results.value == 44) { Blink_lamp(); digitalWrite(RELAY_VOLD,HIGH); delay(RELAY_WORK_TIME); digitalWrite(RELAY_VOLD,LOW); } if (results.value == 43) { Blink_lamp(); digitalWrite(RELAY_VOLU,HIGH); delay(RELAY_WORK_TIME); digitalWrite(RELAY_VOLU,LOW); } if (results.value == 55) { Blink_lamp(); RELAY_MIX1_State = !RELAY_MIX1_State; if (RELAY_MIX1_State) { digitalWrite(RELAY_MIX1,HIGH); } else { digitalWrite(RELAY_MIX1,LOW); } } if (results.value == 54) { Blink_lamp(); RELAY_MIX2_State = !RELAY_MIX2_State; if (RELAY_MIX2_State) { digitalWrite(RELAY_MIX2,HIGH); } else { digitalWrite(RELAY_MIX2,LOW); } } delay(FREEZE_TIME); irrecv.resume(); } } void Blink_lamp() { }
57-64 заменить на
digitalWrite(RELAY_POWR,ON_State);
96-104
digitalWrite(RELAY_MIX2,RELAY_MIX2_State);
Примеры дерганья URL ищи в примере WebClient к либе.
Решил задачу разбить на подзадачи
С отправкой GET запросов уже чуток навоял.
Пока что код огромный, да и после отработки одной кнопки процесс замерает.
Все строки заключи в F(), а то памяти в упор небось.
Спасибо. Не знал про такую опцию ))
как то так.