Суть в том, чтобы Ардуино при нажатии кнопки передавал азбукой Морзе сообщение. Но он игнорирует кнопку, но сообщение выводится! Даже если кнопка отключена от пина. Скетч Код (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); } }
Подтяните кнопку через резистор 1-10 кОм на минус. Иначе у вас наводки прут на пин кнопки Arduino, и она считает это за высокий уровень. Как тут.
У меня сейчас вообще кнопка не подключена(даже к бредборду), но сообщение стабильно передается. Подключал(кнопку) как тут
Логично, то что Arduino ошибочно читает высокий сигнал (HIGH) тогда когда его нет, значит пин кнопки висит в воздухи и ловит все возможные помехи. Резистор должен одним концом подключен к пину Arduino, а вторым к земле (gnd). Проверьте правильно подключения ещё раз.
Код (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(); } } Так симпатичней, правда?
Хех!Дак как нет?По умолчанию там всегда единица.(HIGH) потому как пины притянуты к плюсу внутренними резюками.Тогда либо прогу запускать низким уровнем (LOW) закоротив пин на "землю" (GND) или высоким на размыкание с GND
Вы это не мне пишите, а автору. Я лишь увидел, что человек пытается поймать "1" при нажатии кнопки, значит, какая может быть причина? В отсутствии резистора, который должен точно давать знать МК, когда кнопка отпущена. В первый раз такое слышу. Команда pinMode(<#pin>, INPUT); по умолчанию подтягивается к gnd, а не к VCC. И походу через резистор, т.к. напряжение на пине относительно gnd не ровно 0, а ~0.23 В. У автора это строчка прописана ...
в atmega328 (8) подтягивания к земле нет физически. или висит, или подтянут через 35 к (примерно) к Vcc.
Точно!По умолчанию "висит"-программно подтягиваем к VCC И не только на Мегах на всех АВРках На Си это звучит так: DDRB=0x00; PORTB=0xFF; На Асме: Ldi R16 0xFF ;Out PORTB R16 И в даташитах всё это есть. Управление кнопками http://tinyurl.com/qcgrky3
Не знал просто, задание с азбукой Морзе в самых первых уроках. Спасибо, что подтолкнули к изучению циклов! А что значит ?
Это параметры, передаваемые в функцию SendMessage. http://cppstudio.com/post/7216/ http://cppstudio.com/post/437/ https://ru.wikipedia.org/wiki/Нуль-терминированная_строка