Задачка по миганию светодиода

Тема в разделе "Arduino & Shields", создана пользователем buktopz, 17 сен 2017.

  1. buktopz

    buktopz Нерд

    ну или как то принять то, что он ничего не отвечает на АТ, и потом InitModem()
     
  2. qwone

    qwone Гик

    Но для новичка будет сложно разобрать программу "спеца"
    Код (C++):
    /**/
    unsigned long mill;
    //------Cl_SensBlink----------------------
    // класс определение блинк на входе
    class Cl_SensBlink {
      protected:
        const byte inPin, outPin;
        bool in, statBlink = 0;
        unsigned long past, time;
      public:
        Cl_SensBlink(byte inPin_, byte outPin_, unsigned long time_): inPin(inPin_) , outPin(outPin_), time(time_) {}
        void setup() {
          pinMode(inPin, INPUT);
          pinMode(outPin, OUTPUT);
          OFF();
        }
        void loop() {
          bool newIn = digitalRead(inPin);
          if (newIn != in) {
            past = mill;
            in = newIn;
          }
          if (!statBlink && mill - past >= time) {
            digitalWrite(outPin, statBlink = 1);
          }
        }
        void OFF() {
          in = digitalRead(inPin);
          past = mill;
          digitalWrite(outPin, statBlink = 0);
        }
    };
    //-----компоновка----------------------
    const unsigned long  time_1s = 1000;
    Cl_SensBlink SensBlink(/*пин*/2,/*пин*/13,/*Время*/time_1s);
    //-----main-----------------------
    int main() {
      init();
      // setup()
      SensBlink.setup();
      for (;;) {
        // loop()
        mill = millis();
        SensBlink.loop();
      }
      return 0;
    }
    /*Скетч использует 1244 байт (4%) памяти устройства. Всего доступно 30720 байт.
      Глобальные переменные используют 25 байт (1%) динамической памяти, оставляя 2023 байт для локальных переменных. Максимум: 2048 байт.
    */
     
  3. buktopz

    buktopz Нерд

    что Вы называете программой? одно условие и два действия? Вы напишите, я попробую разобраться. Жду, спасибо заранее
     
  4. DIYMan

    DIYMan Guest

    Вот, собственно:
    Код (C++):
    bool isDiodeBlinking;

    void setup()
    {
        isDiodeBlinking = false;
    }

    void action1()
    {
        // выполняем первое действие
    }

    void action2()
    {
        // выполняем второе действие
    }

    void loop()
    {
        if(isDiodeBlinking) // если диод мигает
            action1(); // выполняем первое действие
        else // иначе
            action2(); // выполняем второе действие
           
        // isDiodeBlinking можно менять по любым нужным условиям
    }
    Реализация ПОЛНОСТЬЮ соответствует ТЗ. Значение переменной isDiodeBlinking можно менять, когда захочется, в зависимости от этого - выполнится либо одно, либо другое действие.
     
  5. buktopz

    buktopz Нерд

    Спасибо, qwone. Спасибо, DIYMan. Буду пробовать.
     
  6. Airbus

    Airbus Радиохулиган Модератор

    А так? С Прерываниями?
    Код (C++):
     unsigned long Time;
    void setup()
    {
      pinMode(13, OUTPUT);               // порт 13 как выход-можно любой
      Time = 0;                          //точка отсчёта
      attachInterrupt(0, blink, CHANGE); // привязываем 0-е прерывание к функции blink()
    }

    void loop()
    {
        if(millis() - Time > 10000) // если прошло 10 секунд
        reboot();  // перезагрузка
      }

    void blink()

    {
      Time = millis(); // обнуляем в каждом прерывании
    }
    void reboot()
    {
    // что то делаем
    // например мигаем
    digitalWrite(13, HIGH);
      delay(1000);
      digitalWrite(13, LOW);
      delay(1000);
    }
     
    Последнее редактирование: 18 сен 2017
  7. Airbus

    Airbus Радиохулиган Модератор

    Проверил на железе.Пин прерывания int 0 - третий. Если на ём в течении 10 секунд не изменяется уровни напряжения-начинает мигать светодиод на Пине-13.Естественно все параметры (время, экшн) можно менять под Ваши цели.Задача решена?
     
  8. buktopz

    buktopz Нерд

    Мда.., сутки мучился и вас мучил, за что извиняюсь. Все модем читает и отвечает, только сигнал на аварийный пин модема не посылает. Проверял, конечно, наверное где то щупом промахнулся или померещилось... А причина всего моего кипиша была в железе. Порты А6 и А7 не работают в ардуино про мини как оказалось на всех моих контроллерах. А на А6 у меня Reset_modem сидел. Я подозреваю, что китайцы на новую атмегу воткнули старую прошивку, где то я видел распиновку про мини - там А6 и А7 вообще отсутствуют
     
  9. buktopz

    buktopz Нерд

    Но за ваши советы все равно спасибо, советы лишними не бывают
     
  10. Airbus

    Airbus Радиохулиган Модератор

    У Вас там наверное Мега 168 там аналоговых пинов меньше.А зачем именно на А6 или А7?
     
  11. buktopz

    buktopz Нерд

    нет, она 328 и плата физически имеет порты А6 и А7, а вот прошивка видимо старая, может под 168
     
  12. buktopz

    buktopz Нерд

    я переделал, конечно, ну это уже мазня, общие платы разводил и у китайцев заказывал изготовление, пришлось сделать перемычку на другой порт
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Из прошивки там один Бутлоадер и ничего другово нет. Могу предположить что кетайские товариси плату не развели под порты А6 и А7 а тупо впаяли Мегу 328 в плату под Мегу 168 там распиновка совпадает .Количество АЦП как и ШИМ не зависит от прошивки а только от типа микроконтроллера. У меня тоже в первой УНЕ вместо 328 Меги в DIP корпусе пришла Мега8 к тому же непрошитая.
     
  14. buktopz

    buktopz Нерд

    да я сегодня, разведена правильно прозванивал, да пес сними, китайцы что с них взять
     
  15. akl

    akl Гуру

    у меня на искре-мини (там 328p) А6 А7 не работали.
     
  16. AlexU

    AlexU Гуру

    Так понимаю, что документацию почитать религия не позволяет или кто-то "бьёт по рукам", когда возникает крамольная мысль заглянуть в доку на контроллер?

    Пины A6 и A7 могут использоваться только как входы для АЦП и более ни как.
     
  17. buktopz

    buktopz Нерд

    ну если бы все такие начитанные были, зачем тогда форум?
     
  18. buktopz

    buktopz Нерд

    но за инфу спасибо, от себя добавлю картинку, может кому сгодится
     

    Вложения:

  19. Airbus

    Airbus Радиохулиган Модератор

    То есть в цЫфре никак чтоли?Я конечно PORT.С использую в основном на выход а на вход он что не будет работать?
     
  20. buktopz

    buktopz Нерд

    не не будет, только как аналоговый вход, я про свою картинку и забыл...