int regim=1; int flag=0; void setup() { pinMode(13,OUTPUT); pinMode(11,OUTPUT); } void loop() { regim++; flag=1; if(regim>6)//ограничим количество режимов { regim=1;//так как мы используем только одну кнопку, // то переключать режимы будем циклично } } if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную "кнопка" } if(regim==1)//первый режим { digitalWrite(11,LOW);//выключаем все светодиоды digitalWrite(13,LOW); //здесь может быть любое ваше действие } if(regim==2)//второй режим { digitalWrite(13,HIGH);//включае красный светодиод digitalWrite(11,LOW); //здесь может быть любое ваше действие } if(regim==3)//третий режим { digitalWrite(13,HIGH);//включае зеленый светодиод digitalWrite(11,LOW); //здесь может быть любое ваше действие } if(regim==4)//четвертый режим { digitalWrite(11,HIGH);//включаем светодиоды одновременно digitalWrite(13,HIGH); //здесь может быть любое ваше действие } if(regim==5)//пятый режим { digitalWrite(13,HIGH);//включаем светодиоды одновременно digitalWrite(11,HIGH); //здесь может быть любое ваше действие } if(regim==6)//6 режим { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); // и так делее) } }
если я правильно понял Код (Text): int regim=1; int button= A0 ; boolean lastButton = LOW; boolean currentButton = LOW; boolean ledOn = false; void setup() { pinMode(button, INPUT); pinMode(13,OUTPUT); pinMode(11,OUTPUT); } boolean debounce(boolean last) { boolean current = digitalRead(button); if (last != current) { delay(5); current = digitalRead(button); } return current; } void loop() { if(digitalRead(14)==HIGH&&button==0)//если кнопка нажата // и перемення flag равна 0 , то ... { regim++; button=1; if(regim>2)//ограничим количество режимов { regim=1;//так как мы используем только одну кнопку, // то переключать режимы будем циклично } } if(digitalRead(14)==LOW&&button==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { button=0;//обнуляем переменную "кнопка" } if(regim==1)//первый режим { digitalWrite(11,LOW);//выключаем все светодиоды digitalWrite(13,LOW); //здесь может быть любое ваше действие } if(regim==2)//второй режим { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); // и так делее) //здесь может быть любое ваше действие } }
Вы не совсем правильно поняли. Зачем пихать код библиотеки в свой скетч? Библиотека не для этого придумана. Посмотрите пример со страницы библиотеки: Код (Text): // подключаем библиотеку #include <Bounce.h> #define BUTTON 2 #define LED 13 // создаем объект для чтения кнопки без дребезга Bounce bouncer = Bounce( BUTTON,5 ); void setup() { pinMode(BUTTON,INPUT); pinMode(LED,OUTPUT); } void loop() { // обновляем состояние кнопки bouncer.update ( ); // пишем на ножку светодиода состояние кнопки digitalWrite(LED, bouncer.read()); } Не правда ли, так гораздо компактней и проще? И избавляйтесь от "магических чисел" в коде, не создавайте себе проблем!
в вашем примере есть один небольшой косячок если порт будет висеть в воздухе то диод начинает лихорадочно моргать ! предлагаю решение подключить подтягивающий резистор и изменить полярность подключения кнопки !?
А у кнопки разве есть полярность? И почему порт должен висеть в воздухе, если по схеме он подключен? Там не хватает только перемычек на разрывах шины земли, в остальном вроде все ОК, кнопка притянута резистором к земле, не заметил отличий от схемы тут (справа).
естественно нет ! я про схему подключения в исходном варианте управлявший вывод подтянут к земле , я предлагаю подтянуть к шине питания объясню почему библиотека регистрирует смену уровня с высокого на низкий а так как подключен подтягивающий резистор притягивает вход шине пиления ,соответственно когда отключим провод от кнопки произойдет смена уровня ,соответственно нажатие будет зафиксировано ! а вы не допускаете что провод может просто выскочить или просто окажешься не туда вставлен!?? ладно по диоду видно а если кнопка много функциональная! ИМХО отключённая случайно или по каким либо причинам кнопка не должна оказывать влияние на исполнение программы!
Библиотека регистрирует изменение состояния кнопки, все остальное зависит от фантазии программиста Код (Text): Bounce bouncer = Bounce(BUTTON, 5); if(bouncer.update()) { if(bouncer.read() == HIGH) { ... }// поймали нажатие else { ... }// поймали отпускание } Мне кажется, особой разницы нет, особенно если разводить плату и паять - тогда точно ничего не выскочит. А на бредборде все равно только отлаживать схему можно, для реального применения он не годится. Но логика в ваших словах есть, возьму на заметку
теперь он вкл. но не выключается Код (Text): // подключаем библиотеку #include <Bounce.h> #define BUTTON A0 #define LED 13 int regim=1; int ledValue = LOW; // создаем объект для чтения кнопки без дребезга Bounce bouncer = Bounce( BUTTON,5 ); void setup() { pinMode(BUTTON,INPUT); pinMode(LED,OUTPUT); } void loop() { if ( bouncer.update() ) { { regim++; if(regim>2)//ограничим количество режимов { regim=1;//так как мы используем только одну кнопку, // то переключать режимы будем циклично } } if(regim==1)//первый режим { digitalWrite(13,HIGH); delay(1000); digitalWrite(13,HIGH); delay(1000); //здесь может быть любое ваше действие } if(regim==2)//второй режим { digitalWrite(13,HIGH);//включае красный светодиод //здесь может быть любое ваше действие } } }
Вы просто комбинируете готовые куски кода, что ли? Разобраться не пробовали? Состояние кнопки обновляете, но нигде не читаете. В обоих режимах включаете светодиод. Причем в первом включаете, ждете секунду, потом снова включаете, потом ждете еще секунду. Что это, по Вашему, должно дать? Начните с изучения статей на вики, там все очень подробно и доходчиво написано.
Это называется "я не разобрался". Примеры для кого написаны? Документация на библиотеку зачем нужна? Чтобы вставлять в скетч кусочки, не понимая, как они работают? Начните с самого начала, разберите каждую строку, добейтесь абсолютного понимания того, что она делает, попробуйте ее изменить и посмотрите на поведение программы. Иначе так и будете плавать и ничего не добьетесь.
ИМХО. А может решить эту проблему не прибегая к программному коду?? Например введением в схему, ну например инвертора, тем самым за счет гистерезиса сигналов решить проблему с дребезгом кнопки. З.Ы. Гистерезис используется для подавления шумов (быстрых колебаний, дребезга контактов) в момент переключения логических сигналов. http://ru.wikipedia.org/wiki/Гистерезис
А также кондер+резистор (некоторые данный способ презирают). Еще есть мнение, что лучше всего давит дребезг схема на RS-триггере. Но есть народная мудрость: то, что не удается запаять, приходится программировать
а нельзя ли поподробней про связку кондер+резистор? это где тригер шмидта юзают? p/s идею спер отсюда: https://uscr.ru/drebezg-kontaktov-i-sposoby-podavleniya-drebezga/
конденсатор 0,1 uF параллельно входу и будет подавитель дребезга, не требующий библиотек. в 99.9999% случаев работает.