Странное поведение Arduino

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

Метки:
?

Вы уже встречались с таким поведением программы?

  1. Да, проблему решил.

    0 голосов
    0,0%
  2. Да, но не смог решить проблему.

    100,0%
  3. Не встречался.

    0 голосов
    0,0%
  1. Arduino_man

    Arduino_man Гик

    Здравствуйте!
    Столкнулся с такой ранее не виданной мною проблемой.
    К Arduino Uno подключён GPS-модуль и SD-картридер. Если картридер отключить, программа спокойно выполняется и останавливается на моменте проверки SD-карты (модуль отключён, её не видно, стоп). Если я выполняю этот же код с картридером и картой, то у меня на ровном месте начинается зацикливание программы. (В setup-е вывод одной строчки в serial, если без ридера - в if-е остановиться, так как нет карты. С ридером идёт бесконечный вывод строчки.)
    Очень прошу помочь!
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Код?!
     
  3. Arduino_man

    Arduino_man Гик

    Код (C++):
    void setup() {
      Serial.begin(115200);
      Serial.println("Serial OK!");
      if (!SD.begin(9)){
        Serial.println("I don't see SD!");
        return;
      }
      Serial.println("SD init OK!");
      Serial.println("GPS init OK!");
    }
     
     
  4. b707

    b707 Гуру

    в процедуре проверки SD-карты уберите return

    Добавка - опрос-то к ветке зачем присобачили? не смешите народ, никакого "такого поведения программы" нет в помине, это просто ваша ошибка в программе
     
    NikitOS нравится это.
  5. Arduino_man

    Arduino_man Гик

    Спасибо, сейчас попробую!
     
  6. Arduino_man

    Arduino_man Гик

    Вот новый код:
    Код (C++):
    void setup() {
      Serial.begin(115200);
      Serial.println("Hello!");
      Serial.println("Serial OK!");
      Init:
      if (!SD.begin(9)){
        Serial.println("I don't see SD!");
        delay(1000);
        goto Init;
      }
      Serial.println("SD init OK!");
      Serial.println("GPS init OK!");
    }
    С ридером и картой выводит бесконечность "Hello!" и "Serial OK!"
     
  7. Arduino_man

    Arduino_man Гик

    @b707, не могли бы вы немного подсказать, как исправить код? С Arduino работаю давно, но в этом случае у меня знаний не хватает :(
     
    Последнее редактирование: 29 авг 2017
  8. AlexU

    AlexU Гуру

    Это значит, что при выполнении инициализации SD-карты -- код:
    Код (C++):
    SD.begin(9)
    происходит сбой и контроллер перезагружается.
     
  9. Arduino_man

    Arduino_man Гик

  10. Arduino_man

    Arduino_man Гик

    @AlexU не могли бы вы подсказать, как исправить код, чтобы ошибки не было?
     
  11. b707

    b707 Гуру

    ну вы же сами зацикливаете код - а потом спрашиваете почему он зацикливается? У вас при проблемах с картой получается бесконечный цикл.
    Я пока не понимаю, чего вы хотите добиться? если карта не стартовала - как программа должна действовать?

    И кстати - вы пин 9 обьявили как OUTPUT? - в вашем коде нет
     
  12. Arduino_man

    Arduino_man Гик

    Но почему же тогда он затрагивает начало сетапа? Метка Init стоит после.

    Я предполагал, что она остановится (по-моему, когда я заливал код из ссылки, она останавливалась)

    В коде Амперки объявления пина тоже нет.
     
  13. AlexU

    AlexU Гуру

    Может проблема не в коде, а аппаратная. Я не знаю как у Вас что подключено. Я всего лишь на данный момент могу сказать только одно -- как только микроконтроллер пытается начать работу с кардридером, то сразу уходит в перезагрузку.
    Почему?
    1. смотрите схему подключения, может что напутали;
    2. смотрите исходный код функции 'SD.begin()' может там будет какая подсказка почему контроллер уходит в перезагрузку.
     
  14. b707

    b707 Гуру

    А у них пин тоже был 9?
    В общем, попробуйте обьявить свой пин 9 как выход - в описании к библиотеке SD это указано как обязательное условие
     
  15. Arduino_man

    Arduino_man Гик

    Скорее всего, я не был прав с return, если он начинает функцию setup сначала. Но почему во втором варианте ошибка продолжается?

    P.S. Я не против выведения в serial "Нет карты" раз в секунду. Но пишет он про "Serial OK!"
     
  16. Arduino_man

    Arduino_man Гик

    В коде Амперки пин 10, я на нём сначала пробовал - не помогло. Про объявление выходом - сейчас попробую, спасибо!
     
  17. Arduino_man

    Arduino_man Гик

    Не помогло.
     
  18. b707

    b707 Гуру

    Вот поэтому они его и не обьявляют - пин 10 стандартный для SD. Если вы используете нестандартный пин - он должен быть OUTPUT.
     
  19. Arduino_man

    Arduino_man Гик

    Снова вопрос: если плата уходит в перезагрузку - то почему промежуток времени между выводами так мал? Arduino Uno вроде секунд 5 стартует...
     
  20. Arduino_man

    Arduino_man Гик

    Попробовал - всё равно не работает.