Генератор сигнала SOS
- Войдите на сайт для отправки комментариев
Сб, 14/11/2020 - 20:13
Задание:После нажатия на кнопку, зуммер и светодиод начинают передавать сигнал SOS. Все Выключается с помощью второго нажатия кнопки.
У меня по итогу постоянно передает сигнал, нажав снова на кнопку ничего не происходит
код:
У меня по итогу постоянно передает сигнал, нажав снова на кнопку ничего не происходит
код:
const int btn=3;
int k=0;
const int buzz=4;
const int led=5;
byte val=0;
bool state=0;
void setup()
{
pinMode(btn, INPUT);
pinMode(buzz, OUTPUT);
pinMode(led, OUTPUT);
}
void loop()
{
val=digitalRead(btn);
if (val==HIGH){
state=!state;
delay(200);
}
if (state==true){
// "S"
for (k=0;k<3;k+=1){
digitalWrite(buzz, HIGH);
digitalWrite(led,HIGH);
delay(500); // пауза 1,5 секунды
digitalWrite(buzz, LOW);
digitalWrite(led,LOW);
delay(500); // пауза 1,5 секунды
}
delay(300); // Задержка
// "O"
for (k=0;k<3;k+=1){
digitalWrite(buzz, HIGH);
digitalWrite(led,HIGH);
delay(1000); // пауза 3 секунды
digitalWrite(buzz, LOW);
digitalWrite(led,LOW);
delay(1000); // пауза 3 секунды
}
delay(300); // Задержка
// "S"
for (k=0;k<3;k+=1){
digitalWrite(buzz, HIGH);
digitalWrite(led,HIGH);
delay(500); // пауза 1,5 секунды
digitalWrite(buzz, LOW);
digitalWrite(led,LOW);
delay(500);} // пауза 1,5 секунды
}else{
digitalWrite(buzz,LOW);
digitalWrite(led,LOW);}
}
Избавиться в первую очередь от делей в коде. http://arduino.ru/tutorials/BlinkWithoutDelay
значит кнопку надо на прерывание повесить...
одну из самых красивых математических реализаций (по моему мнению) можно глянуть тут
значит кнопку надо на прерывание повесить
Сказали "А" скажите и "Бэ..э". А че с прерыванием-то делать?
значит кнопку надо на прерывание повесить
Сказали "А" скажите и "Бэ..э". А че с прерыванием-то делать?
обработать )))
на сёдня лимит добрых дел исчерпан
У меня на сегодня ещё 2 добрых дела и один подвиг. Ну подвиг это потом, когда перепью, а доброе дело сейчас.
Уважаемый ТС - Изучите мигание без delay(), как советуют Вам в посте #1
А лучше - напишите нормальный алгоритм.
одну из самых красивых математических реализаций (по моему мнению) можно глянуть тут
Что в ней такого красивого? Идея бинарного кодирования знаков - очевидна, я бы даж сказал банальна, а реализация ничего особенного, даже вывод бита написан через деление, а не сдвиг
одну из самых красивых математических реализаций (по моему мнению) можно глянуть тут
кому очевидно, кому не очень, я впервые увидел, понравилось, неожиданно было, что так можно и азбуку Морзе закодировать...
ЗЫ "...Ну Иоан...Ну Грозный..."
lsus, азбука Морзе не допускает произвольных длительностей сигналов и пауз - все длительности тщательно увязаны друг с другом. Посмотрите пост по ссылке ua6em, там с длительностями более или менее нормально, если не считать, что в таблице отсутствует, собственно, сигнал SOS, который передается совсем не так, как строка "SOS".
Ну и насчет избавления от delay тоже верно, хотя в упомянутом выше исходнике этого также нет.
Я пошел на подвиг:
Давайте разберемся с задачей. По нажатию кнопки надо передать сигнал "SOS". А по второму нажатию прервать этот сигнал.
Сразу не понимаю - если "SOS", то кирдык. И передавай его, пока тебя не спасут. Или подал "SOS", посмотрел вокруг, да нет - вроде девки нормальные, "отменить"?
Далее "SOS" надо передать полностью, а то будет непонимание. Передадите SO..., а там и додумают ...си. Т.е. кнопка должна сработать после передачи полного текста.
Tres - тут умные люди советовали использовать прерывания. Согласен - используйте! По нажатии кнопки ставьте флаг и проверяйте его после "SOS".
Еще раз: сигнал SOS - это не строка "SOS", это - единственный символ. Поэтому передать только SO невозможно.
Еще раз: сигнал SOS - это не строка "SOS", это - единственный символ. Поэтому передать только SO невозможно.
У ТС - "SOS" - это *уй чего. Поэтому в его программе можно передать даже слово *лядь, но закодированно.