Напишите простенький код, я не могу разобраться

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

  1. Nigga

    Nigga Нуб

    Мне нужно так, чтобы при нажатии менялись разные режимы, можете примерчик написать, или скинуть ссылочку на код? что бы хотя бы светодиоды при нажатии менялись, или яркость одного светодиода. Буду благодарен за помощь
     
  2. vvr

    vvr Инженерище

  3. X-Dron

    X-Dron Гик

    как пример - светофор


    Код (Text):
    #include <DI.h>
    #include <Meander.h>
    #include <Timer_P.h>

    #define Button    3
    #define LedYellow  12
    #define LedRed    13
    #define LedGreen  8


    //Контакт на вход (кнопка)
    DI Key(Button, 10);
    Timer_P KeyDelay, Cycle;
    Meander P_1s;
    boolean KeyDelay_old;
    byte mode;

    void setup()
    {
      // Контакты на выход
      pinMode(LedYellow, OUTPUT);  // Светодиод желтый
      pinMode(LedRed, OUTPUT);    //светодиод красный
      pinMode(LedGreen, OUTPUT);
    }

    void loop()
    {
      //Запускаем меандр
      P_1s.MeanderV(800, 400);  //(период, длительность импульса)
      //Обновляем вход клавиши
      Key.DI_Refresh();
      //Задержка после нажатия кнопки
      KeyDelay.TimerV(Key.DI_Read(), 0, 2, 1000);
      //Если задержка истекла, то изменяем режим
      if (KeyDelay.Q0() && !KeyDelay_old) mode = (++mode)%3;
      //Цикл светофора
      Cycle.TimerV(!Cycle.Q0() && mode==0, false, 2, 15000);

      switch (mode) {
        case 0:
          {long Remains = Cycle.GetRemains();
          digitalWrite(LedRed,    Remains >8000);
          digitalWrite(LedYellow, Remains <10000 && Remains >8000);
          digitalWrite(LedGreen, (Remains <8000 && Remains >3000) || (Remains <3000 &&  P_1s.Q0()));
          }
          break;
        case 1:
          digitalWrite(LedYellow, P_1s.Q0());
          digitalWrite(LedRed, LOW);
          digitalWrite(LedGreen, LOW);
          break;
        case 2:
          digitalWrite(LedYellow, LOW);
          digitalWrite(LedRed, LOW);
          digitalWrite(LedGreen, LOW);
          break;
      }
      //сохраняем значение таймера задержки
      KeyDelay_old = KeyDelay.Q0();
    }
    понадобится эта библиотека.
    https://yadi.sk/d/hGQy8xu1fZNks
    класс DI считывает входы клавиш и фильтрует дребезг. Кнопки должны быть подключены как здесь:
    http://wiki.amperka.ru/конспект-arduino:миксер
    класс Meander - для меандра мигания
    класс Timer_P - для формирования задержки после нажатия на кнопку и для основного цикла светофора.

    совсем облегченный вариант
    Код (Text):
    #include <DI.h>

    #define Button    3

    //Контакт на вход (кнопка)
    DI Key(Button, 10);
    boolean Key_old;
    byte mode;

    void setup()
    {
    }

    void loop()
    {
      //Обновляем вход клавиши
      Key.DI_Refresh();
      //Если задержка истекла, то изменяем режим
      if (Key.DI_Read() && !Key_old) mode = (++mode)%3;
     
      switch (mode) {
        case 0:
          break;
        case 1:
          break;
        case 2:
          break;
      }
      //сохраняем значение таймера задержки
      Key_old = Key.DI_Read();
    }
     
    Последнее редактирование: 31 мар 2015