UNO+IR+RELEY+ETHERNET SHIELD

Тема в разделе "Arduino & Shields", создана пользователем rogelisby, 31 окт 2015.

  1. rogelisby

    rogelisby Нуб

    Добрый день!

    Есть скетч. Он счелкает реле от ИК датчика.

    Получая код пульта 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()
    {
    }
     
  2. Mestniy

    Mestniy Гуру

  3. rogelisby

    rogelisby Нуб

    как то так.
    Код (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()
    {
    }