Mega 2560 PRO MINI

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем FOXL, 6 сен 2019.

  1. FOXL

    FOXL Нерд

    Всем привет! Есть ли люди, кто уже работал с данной платой.
    Пытался реализовать простое внешнее прерывание через Arduino IDE, а она его не считывает
    Уже весь интернет перерыл. Но будто никто с этими платами не работал до сих пор.
    Код (C++):

    volatile boolean flag;
    int D = 6;                    
    int A = 10;
    int S = 2;
    int EX = 7;
    int B = 8;
    int R = 5;
    int Rel = 3;

    void setup()
    {
      // Debug console
      Serial.begin(115200);
    pinMode(D, OUTPUT);
    pinMode(A, OUTPUT);
    pinMode(S, OUTPUT);
    pinMode(EX, OUTPUT);
    pinMode(R, OUTPUT);
    pinMode(B, OUTPUT);
    pinMode(Rel, INPUT_PULLUP);
    attachInterrupt(3, myInterrupt, FALLING);
    }

    void loop()
    {

      if (flag) {

              {
              //Закрытие Just Dance

              digitalWrite(EX, HIGH);
             delay(100);

             digitalWrite(EX, LOW);
             delay(500);

             digitalWrite(D, HIGH);
             delay(100);

             digitalWrite(D, LOW);
             delay(200);

             digitalWrite(D, HIGH);
             delay(100);

             digitalWrite(D, LOW);
             delay(200);

             digitalWrite(S, HIGH);
             delay(100);

             digitalWrite(S, LOW);
             delay(1000);

             digitalWrite(D, HIGH);
             delay(100);

             digitalWrite(D, LOW);
             delay(200);

             digitalWrite(D, HIGH);
             delay(100);

             digitalWrite(D, LOW);
             delay(200);

             digitalWrite(D, HIGH);
             delay(100);

             digitalWrite(D, LOW);
             delay(200);

             digitalWrite(D, HIGH);
             delay(100);

             digitalWrite(D, LOW);
             delay(200);

             digitalWrite(A, HIGH);
             delay(100);

             digitalWrite(A, LOW);
             delay(1000);

             digitalWrite(B, HIGH);
             delay(100);

             digitalWrite(B, LOW);
             delay(1000);

             digitalWrite(A, HIGH);
             delay(100);

             digitalWrite(A, LOW);
             delay(60000);

             digitalWrite(A, HIGH);
             delay(100);

             digitalWrite(A, LOW);
             delay(15000);

             digitalWrite(A, HIGH);
             delay(100);

             digitalWrite(A, LOW);
             delay(7000);

             digitalWrite(A, HIGH);
             delay(100);

             digitalWrite(A, LOW);
             delay(3000);

             digitalWrite(A, HIGH);
             delay(100);

             digitalWrite(A, LOW);
             delay(8000);

             digitalWrite(B, HIGH);
             delay(100);

             digitalWrite(B, LOW);
             delay(500);

             digitalWrite(D, HIGH);
             delay(100);

             digitalWrite(D, LOW);
             delay(500);

             digitalWrite(A, HIGH);
             delay(100);

             digitalWrite(A, LOW);
             delay(500);

             digitalWrite(D, HIGH);
             delay(3000);

             digitalWrite(D, LOW);
             delay(1000);

             digitalWrite(R, HIGH);
             delay(100);

             digitalWrite(R, LOW);
             delay(2000);
    }
            flag = 0;}
                            else
                {

                 digitalWrite(D, HIGH);
                  delay(100);

                  digitalWrite(D, LOW);
                  delay(500);

                  digitalWrite(A, HIGH);
                  delay(100);

                  digitalWrite(A, LOW);
                  delay(30000);
            }
    }
    void myInterrupt() {
      flag = 1;
    }
    Дошло до простейшего тестового скетча для проверки работы пина на вход.
    По кнопке работать не хочет. Завод напрямую в землю не помогает.
    Но отлично считывает прикосновения руки к проводу принимающего пина.
    Код (C++):
    int pinLed = 6;
    int pinBtn = 3;
    void setup()
    {
        pinMode(pinLed, OUTPUT);
        pinMode(pinBtn, INPUT);
    }
    void loop()
    {
        int btnVal;
        btnVal = digitalRead(pinBtn);
        if (btnVal == LOW)
        {
            digitalWrite(pinLed, LOW);
        }
        else
        {
            digitalWrite(pinLed, HIGH);
        }
    }
    Я не сильно разбираюсь в электронике, но ранее всё решалось курением монуалов и форумов, но сейчас вообще найти нужную информацию не могу.
    Очень надеюсь на вашу помощь.


    [​IMG]

    [​IMG]
     
    Последнее редактирование: 7 сен 2019
  2. b707

    b707 Гуру

    эта плата в программном смысле ничем не отличается от обычной Меги - так что можете гуглить примеры для обычной платы
     
  3. b707

    b707 Гуру

    Первый код работать не будет, он даже компилироваться не должен.
    Во втором, вроде, ошибок не вижу, все должно работать. Проверяте соединения - может в скетче написали пин 3, а сами подсоединили к пять?
     
  4. issaom

    issaom Гуру

    Кнопка как подключена? (схема)
     
  5. FOXL

    FOXL Нерд

    Один пин кнопки к земле, второй к пину в режиме ввода. В данном случае 3-ему.
     
  6. FOXL

    FOXL Нерд

    Но он работает. На данной плате не срабатывает прерывание. Например на NodeMCU (с поправкой на её нумерацию пинов) работает всё.
     
  7. b707

    b707 Гуру

    если б он работал - вы бы сюда не пришли вопросы задавать.
    Не знаю. может вы еще раз ошиблись, когда вставляли код в форум - но например переменная flag у вас нигде не описана и компилироваться такой код не может
    Это не считая ошибки работы с прерыванием
     
  8. issaom

    issaom Гуру

    разницу между pinMode(Rel, INPUT_PULLUP); и pinMode(pinBtn, INPUT); понимаете ? - у Вас просто по разному скетчи написаны....
     
  9. b707

    b707 Гуру

    FOXL - и еще обьясните, нафига вам вообще прерывания, если у вас кнопка может нажиматься не чаще раза в 2 минуты? - настолько тормозной программы мне давно не попадалось
     
    DetSimen нравится это.
  10. FOXL

    FOXL Нерд

    Суть в том, что она используется для поддержания работы игры на игровой консоли в бесконечном режиме и схема с прерываниям должна использоваться в случае зависания, где запускается цикл нажатий для перезапуска и выведение на стандартный примитивный цикл нажатий без необходимости делать всё вручную. Реализовать цикл запланированных нажатий изящно, чтоб не вешать контроллер делэями, моих скудных познаний не хватило. Сама задержка в минуты 2 до прерывания, была не критична.
     
  11. FOXL

    FOXL Нерд

    Не спорю, но кнопка не работает и в простом скетче. Пин реагирует только на прикосновения руки к проводу, который к нему подключён.
     
  12. issaom

    issaom Гуру

    Вы в курсе что при использовании (INPUT_PULLUP) и (INPUT) схемы подключения кнопки должны быть разные ?
     
  13. FOXL

    FOXL Нерд

    К сожалению нет. Как уже сказал ранее, мои познания скудны, «учусь в полёте» В скетче с прерываниями провоевал и INPUT_PULLUP и INPUT.
    К сожалению прямо сейчас уже не смогу проверить другой тип подключения хотя бы на простой схеме. Как я понимаю, мне нужно один пин кнопки завести на питание от платы а второй пин на принимающий пин платы и землю через резистор?
     
  14. issaom

    issaom Гуру

    Для начала нужно почитать хотя-бы вот это
    https://arduinomaster.ru/datchiki-arduino/knopka-arduino/
    Вы не умеете работать с кнопкой, а пытаетесь разобраться с прерываниями - тема которая ни как не относится к новичкам. p.s: те кто учатся не сидят на форумах - они книжки читают ;-) вы явно чем-то другим занимаетесь на форумах Вам могут только что-то подсказать - учить Вас точно никто не будет. Метод научного тыка в программировании не работает - лень разбираться попросите кого-нибудь другого написать за Вас.
     
    Daniil нравится это.
  15. FOXL

    FOXL Нерд

    И на том спасибо.

    По остальному поясняю. Обычно я курю все возможные источники онформации, не только форумы и мануалы. Последние несколько лет, вопросы решаю самостоятельно и никого в интернетиках не дёргаю, так как считаю, что почти всю информацию по нужным вопросам возможно найти. Данный случай обращения можнно сказать уникальный и я ни просил никого меня учить, а как раз искал подсказки куда копать. Разбраться вообще не лень, но если внятной инофрмации нету. При отсутсвии виденья всей картины, которая есть у людей в теме (сам технарь, понимаю о чем говорю), найти правильный путь поисков крайне затруднительно. В итоге попадаешь в тупик, хочешь найти хотя бы людей со схожей проблемой и возможно выцыпить инофрмацию, куда копать, и реально методом проб и ошибок учиться.
    Так что прошу прощения, если вызвал раздражение приметивными вопросами.

    Продоллжу тему.
    С простым скетчем ок, кнопка была не верно подключена. Всё заработало

    А в первом скетче, прерывание не срабатывает при лбом подключении кнопки.
    Как говорил ранее, на плате NodeMcu скетч работает, и прерывание обрабатывается после завершения цикла. И непонятно куда копать.
     
    Последнее редактирование: 7 сен 2019
  16. FOXL

    FOXL Нерд

    Верно, случайно пропустил при копированиии кода на форум. Уже подправил пост.
     
  17. b707

    b707 Гуру

    отлично, тогда продолжим.

    Вы в курсе, что означает первая цифра в скобках вот тут?
    attachInterrupt(3, myInterrupt, FALLING);

    - если вы думаете что это третий пин, вы очень ошибаетесь
     
  18. FOXL

    FOXL Нерд

    Ооочень ошибался.
    Вашего наводящего вопроса хватило, чтоб логически найти, где есть нужно решение.
    Выставил значение 1 и прерывание сработало как надо.
    Спасибо огромное!
    Надо разобраться в аргументах прерываний, так как хотел сделать 3-4 внешних прерывания под разные алгоритмы нажатий.
     
  19. b707

    b707 Гуру

    а вот тут вы меня удивили...
    Не знаю, куда вы выставили "1" - в прерывание или в номер пина - но ни так ни так на меге работать не должно...
    Возьмите распиновку Меги и посмотрите, какому пину какое прерывание соответсвует.
     
  20. FOXL

    FOXL Нерд

    Всё таки этот результат какая-то случаность. После воторной заливки прерывания пропали. Поизучаю пока вопрос. О результатах доложу позже.