Чтение и интерпретация аналогового сигнала.

Тема в разделе "Arduino & Shields", создана пользователем Bitanga, 5 янв 2019.

  1. Bitanga

    Bitanga Нуб

    Я новичек. Разбираюсь с работой аналоговых портов. Споткнулся на работе с термодатчиком LM35.
    Гляньте мой скриншот. На нем код скетча и результат - мониторинг порта куда вывожу результат работы.
    У меня вопросы:
    1. Как значение V получается отрицательным?
    2. Почему значение V2 всегда нулевое?
    3. Почему сигнал на аналоговом порту волнообразный - то нули, то значения, то снова нули? Наблюдаю явнуюю синусоиду на переменной Signal.
    Код (C++):
    const int Pin = 0;
    void setup() {
    pinMode(Pin, INPUT);
    Serial.begin(9600);
    }
    void loop() {
      float voltage;
      int analogSignal=0;
      analogSignal=analogRead(Pin);
      voltage=(analogSignal/1024)*500;
      Serial.print("Signal:");
      Serial.print(analogSignal);
      Serial.print(" V:");
      Serial.print(voltage);
      Serial.print(" V2:");
      Serial.println(500*analogRead(Pin)/1024);
      delay(500);
    }
    ard.jpg
     
  2. NikitOS

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

  3. Airbus

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

    1. Как значение V получается отрицательным?
    2. Почему значение V2 всегда нулевое?
    3. Почему сигнал на аналоговом порту волнообразный - то нули, то значения, то снова нули? ,
    Как то так
     
  4. Asper Daffy

    Asper Daffy Иксперд

    А у меня ответы.

    Этот скетч не имеет никакого отношения к выводу в сериале на рисунке. Ты нам показываешь один скетч, а печать от другого, а сам уже накупил попкорна и приготовился смотреть, как дурачки поведутся.

    По этому скетчу V - всегда 0, а V2 - целое число, а оно у тебя с десятичной точкой печатается.

    Может, ты, конечно, просто перепутал скетчи, но сдаётся мне, что, ты, мил человек, - тролль. Сгинь!
     
    Airbus и NikitOS нравится это.
  5. Bitanga

    Bitanga Нуб

    А с чего собственно вывод что я троль? мне казалось что я задал простой вопрос в котором не могу разобраться только в силу того что недавно осваиваю ардуино. Скетч тот, и вывод точно с него. Весь вечер вожусь с ним пытаясь понять в чем причина.
     
  6. parovoZZ

    parovoZZ Гуру

    Это всё лишнее:
    Зачем напрягать маленькую 8-ми битку на деление, если оно здесь не нужно и маленький МК этого делать не умеет? Дели на большом брате - у него 32 или 64 бита, да и АЛУ гораздо навороченнее.
     
    Bitanga и DetSimen нравится это.
  7. DetSimen

    DetSimen Guest

    но если шыпка хочется, то

    voltage=(analogSignal/1024.0)*500.0;
    Serial.println(500.0*analogRead(Pin)/1024.0);
     
    дядя Витя нравится это.
  8. ostrov

    ostrov Гуру

    Раз в полсекунды то?
     
  9. Утро боброе!
    Несколько смущает инициализация
    Код (C++):
    const int Pin = 0;
    void setup()
    {
    pinMode(Pin, INPUT);
    }
    void loop() {
      analogSignal=analogRead(Pin);
    }
    Может имелся в виду пин А0? А для первых работ я бы вообще не трогал пины 0 и 1.
     
  10. Asper Daffy

    Asper Daffy Иксперд

    Нет. Так не бывает.
     
  11. AlexU

    AlexU Гуру

    Ны счёт тролля 'Asper Daffy' может и погорячился. Но в остальном он прав. Вывод монитора порта не соответствует представленному скетчу.
     
    Сусемьбек нравится это.
  12. Bitanga

    Bitanga Нуб

    под "Большим братом" подразумевается ПК? Мои эксперименты носят чисто академическую цель. В данном случае выяснял как сигнал с аналогового пина превращать в значение напряжения. А также как превращать в значение температуры. Тут, как я понимаю, без деления никак.
    Заменил термодатчик на переменный резистор. Синусоида исчезла. Теперь отдельный вопрос почему LM35 так странно работает.
     
  13. Bitanga

    Bitanga Нуб

    да, именно он. Заподозрив что с пином что-то не то пробовал и А1. Заподозрив что что-то упустил что-то с инииализаией добавил pinMode(Pin, INPUT); изначально его небыло.
    А можно в двух словах почему А1 и А0 лучше не трогать?
     
  14. 0 и A0 это разные пины
     
  15. Это я про цифровые пины 0, и 1 имел в виду. Аналоговые все можно использовать. По цифровым rx tx идет, а у вас как раз постоянный вывод данных в порт
     
  16. AlexU

    AlexU Гуру

    С точки зрения 'analogRead' это один и тот же пин.
     
    Сусемьбек нравится это.
  17. Bitanga

    Bitanga Нуб

    Ну если вы о том что в Serial.print(" V:"); отчсутсвуют пробелы которые есть в мониторинге, то тут всё просто. Пока программа работала я собираясь сделать скриншот немного подвылизывал код - выровнял строки. убрал пустые и пробелы. Чтобы на картинке было аккуратней. Всё это на работу кода никак не влияет. Зря вы тут детективов включаете :)
     
  18. Bitanga

    Bitanga Нуб

    мы меня сейчас немного запутали. Физически у меня подключение к аналоговому порту 0. (пробовал и аналоговый 1). Я как-то не так иннииализировал его? Или всё ок?
     
  19. Теперь уже я запутался). Поставьте А0 в инициализации.
     
  20. AlexU

    AlexU Гуру

    Тут не нужно быть детективом, а достаточно знать как работают функции Serial.print и Serial.println.
    Попробуйте заново сделать скриншоты (только после вылизывания кода) и всё станет на свои места.
    Инициализировали порт правильно. А вот данные обрабатываете не правильно.