прием/передача данных на ардуино через com порт

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

  1. Silentium

    Silentium Нуб

    Здравствуйте. Разрабатываю прибор, который будет управлять работой одного устройства и принимать данные. Изначально я ввожу в ком порт время управления и количество измерений. Из ардуино начинают непрерывно, с некоторым интервалом во времени поступать данные с датчика освещенности и показания напряжения с пина. Также ардуино управляет реле, через которое поступает ток на устройство. Иногда бывает, что нужно срочно остановить работу. 1) Т.е. нужно командой из ком порта выйти из цикла.
    2) Необходимо во время получения всех данных с ардуино параллельно управлять цифровым потенциометром.
    Как это можно осуществить? Буду очень благодарен
     

    Вложения:

    • TEST2_1.ino
      Размер файла:
      7,7 КБ
      Просмотров:
      517
  2. Взять RTOS. Ну и код причесать, а то кошмар какой-то.
     
  3. Silentium

    Silentium Нуб

    А что не так с кодом?
     
  4. Отступы и пробелы в порядок. Программисты ориентируются по ним, и на не оформленный код даже смотреть не будут. Посмотрите на любой пример кода, как разные блоки выделены.
     
    parovoZZ и Daniil нравится это.
  5. parovoZZ

    parovoZZ Гуру

    выйти из цикла куда?
    и в чем сложность?
    для такой простой задачи?
     
  6. Можно без замечаний от человека, который никогда не пользовался и понятия не имеет, что это такое.
     
  7. DetSimen

    DetSimen Guest

    Ну мы от дядявити тоже ни строчки кода не видели, но он же об отступах и пробелах рассуждает?
     
  8. parovoZZ

    parovoZZ Гуру

    как раз-таки FREERTOS я сейчас изучаю и понимаю, что она создана не для таких задач.
    http://microsin.net/programming/arm/freertos-part1.html
     
  9. Замечательно. Теперь можно закрыть гугл и помолчать.
     
  10. parovoZZ

    parovoZZ Гуру

    гуглом не пользуюсь. Молчать не буду.
    Задача организовывается на таймере и прерываниях. Остальное время проц остановлен.
     
  11. Silentium

    Silentium Нуб

    Т.е. необходимо, чтобы ардуино перестала считывать все показатели и отключила реле, т.е. вернулась в исходное состояние.
    Не очень понимаю, как это в программном виде все оформить.
     
  12. DetSimen

    DetSimen Guest

    написать, "Ардуина, СТОЙ! раз-два"
     
    parovoZZ нравится это.
  13. parovoZZ

    parovoZZ Гуру

    она на батарейках живет?
    проблема в инверсии бита регистра порта?
    Для начала рисуй алгоритм на бумаге.
     
  14. DetSimen

    DetSimen Guest

    Почитай мурзилку какуюнить или комиксы про конечные автоматы
     
  15. parovoZZ

    parovoZZ Гуру

    Например, такую
    [​IMG]
     
    DetSimen нравится это.
  16. автоформатирование отменили?
     
  17. parovoZZ

    parovoZZ Гуру

    я не пользуюсь. Все отступы сам настраиваю. Получается лялечка.
     
  18. я к тому, если уж заинтересовал код, что его даже скачал, возникает вопрос с какой целью? правильно, найти к чему придраться.
     
  19. А то, что я ответ дал - мы проигнорируем. Как и с "никто не жалуется" в теме с жалобой. Просто притворимся маразматиком.
     
  20. parovoZZ

    parovoZZ Гуру

    вот этот блок нафига
    Код (C++):
    long readVcc() {
    #if defined(__AVR_ATmegA62U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
      ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
    #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
      ADMUX = _BV(MUX5) | _BV(MUX0);
    #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
      ADMUX = _BV(MUX3) | _BV(MUX2);
    #else
      ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
    #endif
     
    Для чего по uart гонять всякие слова? Одного байта хватит на 255 команд. На кой там гонять 10 байт для команды? Я бы понял, если бы применялось избыточное помкхоустойчивое кодирование и шифрование. Но ведь и его нет.