Глюки с аналоговым входом

Тема в разделе "Arduino & Shields", создана пользователем Mishakolok, 1 фев 2016.

Метки:
  1. Mishakolok

    Mishakolok Нуб

    У меня такой код
    Код (C++):
    #include <math.h>
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
    }
    float k;
    void loop() {
      // put your main code here, to run repeatedly:
      k = analogRead(A0) * 5.0 / 1023.0;
      float t = -14.46 *log((10000.0 * k) / (5.0 - k)/27074.0);
      Serial.println(t);
      delay(1000);
    }
     
    Но в мониторе всё время пишет -19543.11. Самое интересное, что если я печатаю просто analogRead(A0), то в мониторе то же -19543.11. С подключением вроде всё нормально. Iskra Neo. Где я мог ошибиться?
     
  2. DrProg

    DrProg Вечный нерд

    Попробуйте просто выводить показания А0 в монитор без обработки. Что пишет?

    Как вариант - неправильно записана формула, где то приоритет операций не учли. Как она выглядит изначально?
     
  3. Mishakolok

    Mishakolok Нуб

    Когда просто без обработки то же самое число. Использую термистор.
     
  4. DrProg

    DrProg Вечный нерд

    Как 10битный АЦП может выдавать что то кроме целого числа от 0 до 1023? Вы вот так вот делали?
    Код (C++):
    Serial.println(analogRead(A0));
     
  5. Mishakolok

    Mishakolok Нуб

    да, а как тогда правильно?
     
  6. DrProg

    DrProg Вечный нерд

    Да все правильно. Странные факты приводите тут. )
     
  7. DrProg

    DrProg Вечный нерд

    Разобрались, нет? Я залил ваш скетч а Мегу2560, показывает какие-то цифры в пределах 20 - 35, при замыкании А0 на землю или +5В пишет "inf". Но это надо разбираться в формуле и ее записи. Аналоговый вход же как и положено выдает от 0 до 1023. Вы все правильно подключили? Попробуйте другой пин, например A1.
     
  8. Sindbad

    Sindbad Гик

    Например в том, что не залили измененный скетч. Или смотрели на то, что осталось в мониторе порта от запуска предыдущего скетча.

    Отладка формул предполагает, что известны значения выражения в контрольных точках. Это же программирование, а не заклинание микроконтроллеров. Подсчитайте в Экселе что должно получаться для разных k и проверяйте что считает микроконтроллер.