Игнорирует if

Тема в разделе "Arduino & Shields", создана пользователем Даниил Тихомиров, 18 окт 2015.

Метки:
  1. Суть в том, чтобы Ардуино при нажатии кнопки передавал азбукой Морзе сообщение. Но он игнорирует кнопку, но сообщение выводится! Даже если кнопка отключена от пина.
    Скетч
    Код (C++):
    //5 пин точка 10 тире 12 пин кнопка



    int  red = 5;
    int  yellow = 10;
    int  button = 12;


    void A () //тире
      {
        digitalWrite(yellow, HIGH);
       delay(1000);
    digitalWrite(yellow, LOW);
       delay(150);
      }
      void B () // точка
    {
      digitalWrite(red, HIGH);
       delay(400);
    digitalWrite(red, LOW);
       delay(500);
       }

     
    void setup()
    {
     
      pinMode(button, INPUT);
      pinMode(red, OUTPUT);
      pinMode (yellow, OUTPUT);

    }


    void loop()
    {
    if(digitalRead(button) == HIGH)
    {
    A();
    B();
    B();
    B();
    A();
    A();
    A();
    A();
    B();
    A();
    B();
    A();
    B();
    A();
    B();
    A();
    A();
    B();
    B();
    B();  
    A();
    B();
    A();
    B();
    A();
    A();
    B();
    B();
    B();
    A();
    B();
    A();
    B();
    B();
    B();
    B();
    A();
    A();
    A();
    B();
    B();
    B();
    B();
    A();
    B();
    B();
    B();
    B();
    B();
    A();
    A();
    A();
    B();
    B();
    B();
    A();
    A();
    B();
    A();
    B();
    B();
    B();
    B();
    A();
    B();
    A();
    }
    else
    {
      digitalWrite(red, 0);
    }
    }


     
     
  2. Salk

    Salk Гик

    Подтяните кнопку через резистор 1-10 кОм на минус. Иначе у вас наводки прут на пин кнопки Arduino, и она считает это за высокий уровень. Как тут.
     
  3. У меня сейчас вообще кнопка не подключена(даже к бредборду), но сообщение стабильно передается. Подключал(кнопку) как тут

     
  4. Salk

    Salk Гик

    Логично, то что Arduino ошибочно читает высокий сигнал (HIGH) тогда когда его нет, значит пин кнопки висит в воздухи и ловит все возможные помехи. Резистор должен одним концом подключен к пину Arduino, а вторым к земле (gnd). Проверьте правильно подключения ещё раз.
     
  5. Действительно, в этом и была проблема. Спасибо большое!
     
  6. Megakoteyka

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

    Код (C++):
    A();
    B();
    B();
    B();
    A();
    A();
    A();
    A();
    B();
    A();
    B();
    A();
    B();
    A();
    B();
    A();
    Так делать нехорошо. Хорошо так:
    Код (C++):
    char message[9] = "...---...";

    void SendMessage(char* msg, int len)
    {
      for(int i = 0; i < len; i++)
      {
        if(msg[i] == '.')
          A();
        else if(msg[i] == '-')
          B();
      }
    }
    Так симпатичней, правда?
     
    Kremnev8, Tomasina, Airbus и ещё 1-му нравится это.
  7. Airbus

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

    Хех!Дак как нет?По умолчанию там всегда единица.(HIGH) потому как пины притянуты к плюсу внутренними резюками.Тогда либо прогу запускать низким уровнем (LOW) закоротив пин на "землю" (GND) или высоким на размыкание с GND
     
  8. Salk

    Salk Гик

    Вы это не мне пишите, а автору. Я лишь увидел, что человек пытается поймать "1" при нажатии кнопки, значит, какая может быть причина? В отсутствии резистора, который должен точно давать знать МК, когда кнопка отпущена.
    В первый раз такое слышу. Команда pinMode(<#pin>, INPUT); по умолчанию подтягивается к gnd, а не к VCC. И походу через резистор, т.к. напряжение на пине относительно gnd не ровно 0, а ~0.23 В.
    У автора это строчка прописана ...
     
  9. Onkel

    Onkel Гуру

    в atmega328 (8) подтягивания к земле нет физически. или висит, или подтянут через 35 к (примерно) к Vcc.
     
  10. Airbus

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

    Точно!По умолчанию "висит"-программно подтягиваем к VCC И не только на Мегах на всех АВРках На Си это звучит так:
    DDRB=0x00; PORTB=0xFF; На Асме: Ldi R16 0xFF ;Out PORTB R16 И в даташитах всё это есть.
    Управление кнопками http://tinyurl.com/qcgrky3
     
    Последнее редактирование: 19 окт 2015
  11. Не знал просто, задание с азбукой Морзе в самых первых уроках. Спасибо, что подтолкнули к изучению циклов!
    А что значит
    ?
     
  12. Megakoteyka

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