Помогите найти ошибку.

Тема в разделе "Arduino & Shields", создана пользователем Andrei777, 14 ноя 2015.

  1. Andrei777

    Andrei777 Нуб

    Есть вот такой скетч:
    1. #include <LiquidCrystal.h>
    2. #define CNT_PIN 6
    3. LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
    4. byte SEC = 0;
    5. byte MIN = 0;
    6. unsigned long prMillis = 0;
    7. void setup() {
    8. pinMode(CNT_PIN, INPUT);
    9. lcd.begin(16, 2);
    10. }
    11. void loop() {
    12. int rotation;
    13. rotation = analogRead(CNT_PIN);
    14. if (rotation > 0){
    15. lcd.setCursor(2,2);
    16. lcd.print("XXX");
    17. }
    18. else {
    19. if (MIN > 59) MIN = 0;
    20. if (millis() - prMillis > 1000) {
    21. prMillis = millis();
    22. SEC++;
    23. }
    24. if (SEC > 59) {
    25. SEC = 0;
    26. MIN++;
    27. }
    28. lcd.setCursor(2,0);
    29. lcd.print(MIN);
    30. lcd.print("\xBC\xB8\xBD");
    31. lcd.print(" : ");
    32. lcd.print(SEC);
    33. lcd.print("ce\xBA ");
    34. }
    35. }
    Он выводит на LCD монитор минуты и секунды. Идет отсчет и при появлении напряжения на 6 пине или на А0 (на одном из двух) на экран должен выводиться текст и находиться там, пока напряжение присутствует. После исчезновения U-я секундомер должен начать отсчет обратно с нуля.
    P.s. Прошу сильно не ругать меня за такой кривой скетч и глупый вопрос, я только недавно начал и приходиться все постигать с нуля, т.к. опыта в программировании не имею совсем.
     
  2. geher

    geher Гуру

    Код (C):

    rotation = analogRead(CNT_PIN);
    if (rotation < 0){
     
    Условие никогда не выполнится, ибо analogRead возвращает результат в диапазоне 0-1023.
    Более того, в паре младших разрядов АЦП по разным причинам может присутствовать "шум", в результате чего при отсутствии напряжения возвращаемое значение может быть в пределах 0-4.
     
    Andrei777 нравится это.
  3. Alex19

    Alex19 Гуру

    Мы все учились, это нормально.

    По коду.
    Код (C++):
    rotation = analogRead(CNT_PIN);
    Будет пытаться прочесть A6 (а есть ли он у Вас, что за плата?). AnalogRead работает только с аналоговыми портами, подробнее тут - http://arduino.ru/Reference/AnalogRead.

    А Вы хотите считывать с А0 и 6 пин. Тогда analogRead(0) или analogRead(A0);
    Замените
    Код (C++):
    rotation = analogRead(CNT_PIN);
    if (rotation > 0){
    На

    Код (C++):
    rotation = analogRead(A0);
    if (rotation > 0 && digitalRead(CNT_PIN)){
    Так к же рекомендую потратить время, на Wiki - http://wiki.amperka.ru/. Я говорю о видео уроках и проектах, это позволит Вам сэкономить время при обучении.
     
    Andrei777 нравится это.
  4. Andrei777

    Andrei777 Нуб

    Спасибо за помощь!