Добрый день! Есть скетч. Он счелкает реле от ИК датчика. Получая код пульта 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}" Подскажите олгаритм работы. Код (C++): #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() { }
как то так. Код (C++): #include <IRremote.h> #include <SPI.h> #include <Ethernet.h> #define FREEZE_TIME 250 #define P 2 #define M 5 EthernetClient xbmcClient; byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,0,177); IPAddress servers[1]; IPAddress server0(192,168,0,5); int serverIndex = 0; EthernetClient webClient; char httpRequest[30]; int httpRequestIdx = 0; int RECV_PIN = 8; IRrecv irrecv(RECV_PIN); decode_results results; bool ON_State = false; bool LampState = false; bool M_State = false; void setup() { pinMode(P, OUTPUT); pinMode(M, OUTPUT); digitalWrite(P, LOW); digitalWrite(M, LOW); Serial.begin(9600); Ethernet.begin(mac, ip); irrecv.enableIRIn(); servers[0] = server0; } void loop() { if (irrecv.decode(&results)) {////////////////////////////// if (results.value == 13) { Blink_lamp(); ON_State = !ON_State; if (ON_State) { digitalWrite(P, ON_State); } else { digitalWrite(P, ON_State); } } if (results.value == 55) { Blink_lamp(); M_State = !M_State; if (M_State) { digitalWrite(M, HIGH); } else { digitalWrite(M, LOW); } } if (xbmcClient.connected()) xbmcClient.flush(); if (!xbmcClient.connected()) { if (xbmcClient.connect(servers[serverIndex], 9090)) { Serial.print("Connected "); Serial.println(serverIndex); } else { Serial.print("Connection Failure "); Serial.println(serverIndex); } } Serial.println(results.value); SendXbmcCommand(results.value); delay(FREEZE_TIME); irrecv.resume(); } } void SendXbmcCommand(long irCode) { switch (irCode) { case 22: case 2070: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Application.SetVolume\",\"params\":{\"volume\":\"increment\"}}")); break; case 21: case 2069: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Application.SetVolume\",\"params\":{\"volume\":\"decrement\"}}")); break; case 34: case 2082: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Input.Back\"}")); break; case 17: case 2065: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Input.Left\"}")); break; case 16: case 2064: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Input.Right\"}")); break; case 32: case 2080: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Input.Up\"}")); break; case 33: case 2081: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Input.Down\"}")); break; case 59: case 2107: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Input.Select\"}")); break; case 48: case 2096: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Input.ContextMenu\"}")); break; case 12: case 2060: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"System.Shutdown\",\"id\":1}")); break; case 7: case 2055: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Player.Stop\",\"params\":{\"playerid\":1}}")); break; case 6: case 2054: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Player.PlayPause\",\"params\":{\"playerid\": 1}}")); break; case 5: case 2053: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Player.SetSpeed\",\"params\":{\"playerid\":1,\"speed\":4 }}")); break; case 8: case 2056: xbmcClient.print(F("{\"jsonrpc\":\"2.0\",\"method\":\"Player.SetSpeed\",\"params\":{\"playerid\":1,\"speed\":-4 }}")); break; case 63: case 2111: serverIndex = 0; xbmcClient.flush(); xbmcClient.stop(); break; } } void Blink_lamp() { }