Нажимаем кнопку - светодиод мигает с промежутком в одну секунду.
Нажимаем второй раз - мигает с промежутком 0.5 секунды.
Нажимаем третий раз - мигает с промежутком в 0.1 секунды.
Нажимаем четвертый раз - гаснет (цикл режимов начинается с начала).
l
long previousMillis = 0;//переменная для хранения значений таймера
int val=0;//переменная для определения режимов мигания
int val2=0;//переменная для хранения длинны мигиния
int knopka=0;//переменная для хранения состояний кнопки
void setup()
{
pinMode(10,INPUT);
pinMode(13,OUTPUT);
}
void loop()
{
if (digitalRead(10)==HIGH&&knopka==0) //если кнопка нажата и
//переменная "knopka" равна 0 то ...
{
val++;// переменная вал плюс 1
knopka++;//переменная кнопка плюс 1
}
if(digitalRead(10)==LOW&&knopka==1)//если кнопка НЕ нажата и
//переменная "knopka" равна 1 то ...
{
knopka=0;//обнуляем переменную "knopka"
}
if(val==1)//если val равно 1 то ...
{
val2=1000; //val2 равно 1000
}
if(val==2)//если val равно 2 то ...
{
val2=500; //val2 равно 500
}
if(val==3)//если val равно 3 то .
{
val2=100; //val2 равно 100
}
if(val==4)//если val равно 4 то .
{
val=0; //обнуляем переменную val для возврата в начало цикла
//режимов мигания
}
if (millis() -previousMillis >val2) //запускаем таймер мигания светодиодом
{
previousMillis = millis();
digitalWrite(13, !digitalRead(13));
if(val==0)//если val равно 0 то ...
{
digitalWrite(13,LOW); //выключаем светодиод
}
}
}
Я сам не программист, но мне это решение кажется очень оригинальным, я бы не додумался. Когда я задумывался над решением этой задачи я хотел это реализовать через замер длины нажатия конопки и в зависимости от времени нажатия вызывать функцию моргания с параметром.
Ну , раз очень нужно ...
Вот такая программа получилась.
Включаем питание - светодиод не горит.
Нажимаем кнопку - светодиод мигает с промежутком в одну секунду.
Нажимаем второй раз - мигает с промежутком 0.5 секунды.
Нажимаем третий раз - мигает с промежутком в 0.1 секунды.
Нажимаем четвертый раз - гаснет (цикл режимов начинается с начала).
l
Откоментирую позже.
огромное спасибо!)
А посему не через switch case? или -?
через switch, case было бы круче для меня)
еще вопрос, зачем выход 12?
а разве таким образом значение val будет увеличиваться на единицу каждую миллисекунду ?
"а разве таким образом значение val будет увеличиваться на единицу каждую миллисекунду ?
код
расечатать
?1 void loop() {
2 if (digitalRead(10)==HIGH&&knopka==0) {
3 val++;
4 }"
Ничего не понял , причем тут милисекунды и почему val должно увеличиваться ?
Вы на конструкцию в целом смотрите , val не увеличиться пока кнопка не будет отпущена а затем снова нажата.
И , кстати bakemono вы где взяли этот кусок кода ?
Это не мое.
а разве таким образом значение val будет увеличиваться на единицу каждую миллисекунду ?
нет, таким образом val будет просто увеличиваться на 1 за цикл, если соблюдаются условия.
Вы где взяли этот кусок кода ?
Если вы внимательно посмотрите , то у меня вот так.
Это огромная разница.
if (digitalRead(10)==HIGH&&knopka==0)
{
val++;
knopka++;
}
Переменная val не увеличиться пока не обнулиться переменная knopka.
Видать придется полностью коментировать.
nestandart
писал ночью не увидел) сейчас разглядел)
Я сам не программист, но мне это решение кажется очень оригинальным, я бы не додумался. Когда я задумывался над решением этой задачи я хотел это реализовать через замер длины нажатия конопки и в зависимости от времени нажатия вызывать функцию моргания с параметром.