Как остановить или временно прервать цикл For

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

  1. Unixon

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

    Опечатался просто. time_poll конечно же. Уже поправил.
     
  2. Unixon

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

    ТС, вам текст скетча и ошибки компиляции понятны или это для вас китайская грамота?
     
  3. Крапивин

    Крапивин Нерд

    да немного начинаю разбираться понемногу
     
  4. Крапивин

    Крапивин Нерд

    в конце поправил . скетч работает.
    через сколько он перестанет считывать показание с датчика. ?
     
  5. Unixon

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

    Через POLL_PERIOD.
    Вы код то посмотрите хоть что ли... :)
     
  6. Крапивин

    Крапивин Нерд

    да .
    нашел, в самом начале.
    разобрался. спасибо большое за подсказку. и за скетч.

    но код получается очень большим.
    в смысле все прога. для выполнения остановки.
    её можно сократить ?
     
  7. Крапивин

    Крапивин Нерд

    что то по проще. ?
     
  8. Unixon

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

    Куда еще проще? Да и зачем?
     
  9. Крапивин

    Крапивин Нерд

    будет в коде дополнение.
    от удаленной ардвинки будет приходить сигнал с температурой и влажностью из теплички.
     
  10. Крапивин

    Крапивин Нерд

    не подскажете как совсем остановить цикл, чтоб данные пришедшие от другой ардвинки по радио, можно было смотреть на экране, и они не путались, с данными от датчиков температуры.
    вот и хотел бы останавливать цикл, в ручную, забирать данные удаленно, и снова включать обычный цикл от датчиков.
     
  11. Крапивин

    Крапивин Нерд

    спасибо за подсказки.
     
  12. Unixon

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

    Это не так делается, не через какие-то странные циклы с мистической остановкой.

    Разберитесь с тем, что такое конечный автомат, как он работает и как применяется на практике. Затем, создайте автомат под вашу задачу. Определите состояния, события, действия, переходы между состояниями. Напишите код.
     
  13. Крапивин

    Крапивин Нерд

    Unixon вы знаете как узнать об изменение температуры . не опрашивая датчики ?????
    или термо датчики сами будут говорить об изменение температуры каждую минуту ???
    и можно будет видеть как меняется температура в динамике, визуально ? и без опроса ?
     
  14. Крапивин

    Крапивин Нерд

    я не программист. но я видел людей которые пишут код, для перехода на другой экран,
    который занимает 3 страницы.
    это для телефонов на Андройде. и видел код который состоит из 2 строк и 14 символов.
    так где лучшее ??
     
  15. Крапивин

    Крапивин Нерд

    я не знаю как, сделать , чтобы я мог видеть визуально, как меняется температура.
    без цыкла. или если это не в void loop().
    и как мне использовать другие функции программы, чтоб включить радио розетки,
    не останавливая процесс . Unixon если и вы не знаете как . не надо говорить стандартные фразы которые я и так знаю. я попросил помощи что я не могу решить а вы начали выдавать клише если вы поняли о чем я. ели не знаете этого слова посмотрите https://ru.wikipedia.org/wiki/%CA%EB%E8%F8%E5
     
  16. Unixon

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

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

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

    Во втором случае все оформлено в виде вызова функции.
    То, что все программные потроха спрятались внутри функции, еще не значит, что они исчезли. :)
     
  18. Крапивин

    Крапивин Нерд

    нет других функций просто . 1 команда труе и 2фалсе. на вкл и выкл экранов.
     
  19. Unixon

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

    Вся программа на деле выглядит так (main.cpp):
    Код (Text):

    #include <Arduino.h>

    int main(void)
    {
      init();

    #if defined(USBCON)
      USBDevice.attach();
    #endif

      setup();

      for (;;) {
      loop();
      if (serialEventRun) serialEventRun();
      }

      return 0;
    }
     
    То, что вы пишете в скетче, подключается в виде еще одного модуля.
    Ваши setup() и loop() дергаются на исполнение вот отсюда.
    Как видите, функция loop() просто вызывается в бесконечном цикле.

    Ваша задача состоит в том, чтобы в зависимости от текущей потребности выполнять или не выполнять отдельные части содержимого loop().
     
  20. Unixon

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

    Просто переключение режимов
    Код (Text):


    char mode = 0;

    void loop()
    {
     //опрос термодатчиков
     //опрос радиомодуля
     //еще чего-нибудь
     ...
    if (Serial.available()) mode = Serial.read() - '0';
    switch (mode)
    {
      case 0:
      {
       //вывод данных термодатчиков
       break;
      }
      case 1:
      {
       //вывод данных радиомодуля
       break;
      }
      case 2:
      {
       //вывод данных еще чего-нибудь
       break;
      }
    }
    }