помогите вынести блинк в отдельную функцию
- Войдите на сайт для отправки комментариев
Втр, 11/05/2021 - 02:16
[code]
// обьявление глобальных переменных и констант
byte led_pin = 0;
int time_delay = 0;
byte variable = 0;
byte val = 0;
byte state = 0;
boolean a_flag = 0;
boolean b_flag = 0;
byte last_pin=0;
byte chek_button() // обработчик кнопки
{
byte button = 8;
pinMode(button,INPUT_PULLUP); // устанавливаем пин с кнопкой на вход включ встроенный подтяг резистор
a_flag = !digitalRead(button); // читаем состояние кнопки вкл/выкл
if(a_flag == 1 && b_flag == 0) // кнопка нажата
{
b_flag = 1; val++;
}
if(val>3)
{
val = 0;
}
if(a_flag == 0 && b_flag == 1) // кнопка отпущена
{
b_flag = 0;
}
return(val);
}
void led_blink(int led_pin,int time_delay) // функция мигание светодиода
{
pinMode(led_pin,OUTPUT); // устанавливаем пин на вывод
unsigned long lastTime=0;
digitalWrite(led_pin,state); // включаем/выключаем светодиод
digitalWrite(last_pin,0); // выключаем предыдущий светодиод
if(millis()- lastTime > time_delay)
{ lastTime = millis(); // сохраняем текущее время
state =!state;
last_pin=led_pin;
}
}
void setup()
{
}
void loop()
{
variable = chek_button();
time_delay = 200; // задержка
switch(variable) // при нажатии кнопки перелистываем пины
{
case 1:
led_pin = 3;
break;
case 2:
led_pin = 4;
break;
case 3:
led_pin = 5;
break;
}
led_blink(led_pin,time_delay); // передаем функции блинк номер пина и задержку
}
[/code]
сейчас код работает так: при нажатии кнопки загорается очередной светодиод, но не мигает =( не могу понять как это реализовать
[code] // обьявление глобальных переменных и констант uint8_t led_pin=2, last_pin; uint8_t b_flag; int8_t chek_button() // обработчик кнопки { uint8_t button = 8; pinMode(button,INPUT_PULLUP); // устанавливаем пин с кнопкой на вход включ встроенный подтяг резистор uint8_t a_flag = !digitalRead(button); // читаем состояние кнопки вкл/выкл if(a_flag == 1 && b_flag == 0) // кнопка нажата { b_flag = 1; led_pin++; } if(led_pin>5) { led_pin = 0; } if(a_flag == 0 && b_flag == 1) // кнопка отпущена { b_flag = 0; } return(led_pin); } void led_blink(uint8_t led_pin,uint8_t time_delay) // функция мигание светодиода { uint8_t state=1; pinMode(led_pin,OUTPUT); // устанавливаем пин на вывод uint32_t lastTime=0; digitalWrite(led_pin,state); // включаем/выключаем светодиод digitalWrite(last_pin,0); // выключаем предыдущий светодиод if(millis()- lastTime > time_delay) { lastTime = millis(); // сохраняем текущее время state =!state; last_pin=led_pin; } } void setup() { } void loop() { chek_button(); uint16_t time_delay = 200; // задержка led_blink(led_pin,time_delay); // передаем функции блин номер пина и задержку } [/code]Переменные объявленные внутри функций уничтожаются при выходе из функции.
Что бы этого не происходило их нужно объявлять с атрибутом static