Привет
Я только только взял в руки ардуино и начал изучать программирование прям с нуля нулёвого.
Сделал себе простейшую схему с тремя светодиодами, кнопкой и зуммером.
На этой схеме изучаю все простейшие функции, синтаксис и все что нужно с самого начала.
В момент инициализации происходит три коротких пика зуммером, светодиоды переключаются по очереди с кнопки. Хочу сопроводить каждое нажатие кнопки, переключающее режим, коротким звуковым сопровождением, но в разделе LOOP зуммер пищит бесконечно, потому что цикл выполняется бесконечно.
Не понимаю как прервать зуммер и нужно ли это делать в разделе LOOP.
Если кто может - напишите кусочек кода как это сделать, теорию я не понимаю, только примеры((
СПАСИБО.
const int RLED = 8;
const int BLED = 7;
const int YLED = 4;
const int BUTT = 2;
const int ZOOM = 9;
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledMode = 0;
void setup() {
pinMode (RLED, OUTPUT);
pinMode (BLED, OUTPUT);
pinMode (YLED, OUTPUT);
pinMode (BUTT, INPUT);
pinMode (ZOOM, OUTPUT);
digitalWrite (ZOOM, HIGH);
delay(50);
digitalWrite (ZOOM, LOW);
delay(50);
digitalWrite (ZOOM, HIGH);
delay(50);
digitalWrite (ZOOM, LOW);
delay(50);
digitalWrite (ZOOM, HIGH);
delay(50);
digitalWrite (ZOOM, LOW);
}
boolean debounce(boolean last)
{
boolean current = digitalRead(BUTT);
if (last != current)
{
delay(5);
current = digitalRead(BUTT);
return current;
}
}
void setMode(int mode)
{
// Красный
if (mode == 1)
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, LOW);
digitalWrite(YLED, LOW);
}
// Синий
else if (mode == 2)
{
digitalWrite(RLED, HIGH);
digitalWrite(BLED, LOW);
digitalWrite(YLED, LOW);
}
// Желтый
else if (mode == 3)
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, HIGH);
digitalWrite(YLED, LOW);
}
else
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, LOW);
digitalWrite(YLED, HIGH);
}
}
void loop ()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
ledMode++;
}
lastButton = currentButton;
if (ledMode == 4)
ledMode = 0;
setMode(ledMode);
}
Я только только взял в руки ардуино и начал изучать программирование прям с нуля нулёвого.
Сделал себе простейшую схему с тремя светодиодами, кнопкой и зуммером.
На этой схеме изучаю все простейшие функции, синтаксис и все что нужно с самого начала.
В момент инициализации происходит три коротких пика зуммером, светодиоды переключаются по очереди с кнопки. Хочу сопроводить каждое нажатие кнопки, переключающее режим, коротким звуковым сопровождением, но в разделе LOOP зуммер пищит бесконечно, потому что цикл выполняется бесконечно.
Не понимаю как прервать зуммер и нужно ли это делать в разделе LOOP.
Если кто может - напишите кусочек кода как это сделать, теорию я не понимаю, только примеры((
СПАСИБО.
const int RLED = 8;
const int BLED = 7;
const int YLED = 4;
const int BUTT = 2;
const int ZOOM = 9;
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledMode = 0;
void setup() {
pinMode (RLED, OUTPUT);
pinMode (BLED, OUTPUT);
pinMode (YLED, OUTPUT);
pinMode (BUTT, INPUT);
pinMode (ZOOM, OUTPUT);
digitalWrite (ZOOM, HIGH);
delay(50);
digitalWrite (ZOOM, LOW);
delay(50);
digitalWrite (ZOOM, HIGH);
delay(50);
digitalWrite (ZOOM, LOW);
delay(50);
digitalWrite (ZOOM, HIGH);
delay(50);
digitalWrite (ZOOM, LOW);
}
boolean debounce(boolean last)
{
boolean current = digitalRead(BUTT);
if (last != current)
{
delay(5);
current = digitalRead(BUTT);
return current;
}
}
void setMode(int mode)
{
// Красный
if (mode == 1)
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, LOW);
digitalWrite(YLED, LOW);
}
// Синий
else if (mode == 2)
{
digitalWrite(RLED, HIGH);
digitalWrite(BLED, LOW);
digitalWrite(YLED, LOW);
}
// Желтый
else if (mode == 3)
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, HIGH);
digitalWrite(YLED, LOW);
}
else
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, LOW);
digitalWrite(YLED, HIGH);
}
}
void loop ()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
ledMode++;
}
lastButton = currentButton;
if (ledMode == 4)
ledMode = 0;
setMode(ledMode);
}
Вложения
-
1.5 KB Просмотры: 1