робот

Тема в разделе "Arduino & Shields", создана пользователем Алексей Схоменко, 2 июн 2013.

  1. подскажите пожалуйста как прописать в скетче коды полученные с пульта ду чтоб при нажатии на кнопку с этим кодом выполнялась команда пока не нажмешь другую кнопку. можно набросок этого участка, хотя бы узнать как прописывать коды. заранее спасибо!
     
  2. Unixon

    Unixon Оракул Модератор

    Код (C):

    const int IR_COMMAND1 = 0x1234;
    const int IR_COMMAND2 = 0xabcd;
    // etc

    int last_code = 0;

    void loop()
    {
     bool mode_switch = false;
     int new_code = read_ir_sensor();
     if (new_code)
     {
      mode_switch = (last_code!=new_code);
      last_code = new_code;
     }
     switch (last_code)
     {
      case IR_COMMAND1:
      {
       if (mode_switch) { /* begin action 1 */ }
       else { /* continue action 1 */ }
       break;
      }
      case IR_COMMAND2:
      {
       if (mode_switch) { /* begin action 2 */ }
       else { /* contine action 2 */ }
       break;
      }
      // etc
     }
    }
     
  3. а можно пояснения к программе мне чет не понятно что происходит и что где прописано
     
  4. Unixon

    Unixon Оракул Модератор

    Ну хотя бы конструкции языка то все знакомы или с этим тоже нужна помощь?
     
  5. лучше объяснить лишним не будет, я программированием только начал заниматься.
     
  6. Unixon

    Unixon Оракул Модератор

    Код (C):

    const int IR_COMMAND1 = 0x1234; // определяем код команды  1
    const int IR_COMMAND2 = 0xabcd; // определяем код команды  2
    // etc // определяем коды других команд, если есть

    int last_code = 0; // код последней команды, изначально 0 - значит ничего не делать

    void loop()
    {
     bool mode_switch = false; // true, если новая команда отличается от старой, false в противном случае
     int new_code = read_ir_sensor(); // некоторая функция, возвращающая код команды с ИК приемника, либо 0, если ничего не принято
     if (new_code) // если поступила новая команда, new_code будет не 0
     {
      mode_switch = (last_code!=new_code); // если старый и новый код не совпадают, значит произошло переключение режима работы, запоминаем это
      last_code = new_code; // сохраняем код последней команды
     }
     switch (last_code) // выбираем действие по коду команды
     {
      case IR_COMMAND1: // реакция на команду 1
      {
       if (mode_switch) { /* begin action 1 */ } // если получена новая команда и изменился режим работы
       else { /* continue action 1 */ } // если та же команда получена повторно
       break; // выходим из switch()
      }
      case IR_COMMAND2: // реакция на команду 1
      {
       if (mode_switch) { /* begin action 2 */ } // если получена новая команда и изменился режим работы
       else { /* contine action 2 */ } // если та же команда получена повторно
       break; // выходим из switch()
      }
      // etc // реакция на другие команды, аналогично примеру выше
     }
    }
     
    Mitrandir нравится это.
  7. Спасибо большое!
     
  8. const int IR_COMMAND1 = 0x1234;
    const int IR_COMMAND2 = 0xabcd;
    в этих строках вместо 0x1234 пишем свой код кнопки?
    и в самом начале порт который будет работать если выполняется условие как правильно прописать?
    подскажите.
     
  9. roggedhorse

    roggedhorse Гик

    Да, пишем свой код

    После строки
    int new_code = read_ir_sensor();

    вставьте
    Код (C):
    Serial.print("ID Code:");Serial.println(new_code, DEC);
    чтобы видеть, какие коды соответствуют каким кнопкам

    Не забудьте в setup() начать обмен по последовательному порту с ПК (Serial.begin...)