светодиоды и дребезг кнопки?
- Войдите на сайт для отправки комментариев
написал код, но при нажатии кнопки светодиоды начинают включаться через 3-8с поразному бывает.
я так понимаю это из за дребезга, поискал как убрать дребезг, нашел только такое:
нажал кнопку светодиоды загораются поочереди, отпускаю горят, нажал потухли, или бывает так
нажал загораются отпустил потухли, еще нажал горят отпустил горят, но дребезга нет срабатывает мгновенно.
я планирую ураплять контактами так чтобы замкнуты зажигаются разомкнут потухли.
может что то добавить или сразу делать SR debouncer на дополнительной микре?
const int but = 2;
const int led1 = 3;
const int led2 = 4;
const int led3 = 5;
const int led4 = 6;
const int led5 = 7;
const int led6 = 8;
const int led7 = 9;
const int led8 = 10;
const int led9 = 11;
const int led10 = 12;
int buttonState = 0;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
pinMode(led10, OUTPUT);
pinMode(but, INPUT);
}
void loop() {
buttonState = digitalRead(but);
if (buttonState == HIGH) {
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led3, HIGH);
delay(1000);
digitalWrite(led4, HIGH);
delay(1000);
digitalWrite(led5, HIGH);
delay(1000);
digitalWrite(led6, HIGH);
delay(1000);
digitalWrite(led7, HIGH);
delay(1000);
digitalWrite(led8, HIGH);
delay(1000);
digitalWrite(led9, HIGH);
delay(1000);
digitalWrite(led10, HIGH);
delay(5000);
}
else {
digitalWrite(led10, LOW);
delay(1000);
digitalWrite(led9, LOW);
delay(1000);
digitalWrite(led8, LOW);
delay(1000);
digitalWrite(led7, LOW);
delay(1000);
digitalWrite(led6, LOW);
delay(1000);
digitalWrite(led5, LOW);
delay(1000);
digitalWrite(led4, LOW);
delay(1000);
digitalWrite(led3, LOW);
delay(1000);
digitalWrite(led2, LOW);
delay(1000);
digitalWrite(led1, LOW);
}
}
напишите алгоритм, что и как должно работать.
В вашем скетче loop крутится один раз в 9 секунд. Пока не нажата кнопка, у вас срабатывает условие else - и пока он его не выполнит (9 секунд), программа ничего не будет делать, и не будет реагировать на нажатие кнопки. так же и условие if, как только если вдруг так сошлись звезды, поймала нажатие, то тоже будет зажигать по одному диоду в секунду в течении 9 сек, Хоть отпускайте кнопку хоть унажимайтесь.
Добавьте перед условием проверку предыдущего состояния кнопки.
Попробуй этот код
супер имменно то что нужно! огромное спасибо!
Настоящие программисты! :)
Настоящие программисты! :)
А то :) Всё чаще и чаще тут такое.
Китайский код ------
Попробуйте убрать пол кода и поставить пару массивов и пару циклов.
И будет вам не 200 строк, а 10-15
и пару коментов - для будущих участников форума, вдруг кому пригодится.
Библиотека не моя - так просто к примеру https://uscr.ru/drebezg-kontaktov-i-sposoby-podavleniya-drebezga/
Но этот код будет зависать не "delay"
Сразу оговорюсь не проверял - мог где и опечататься... .
Настоящие программисты! :)
А то :) Всё чаще и чаще тут такое.
Это нормально. Человек учится, ошибается. С этого же все начинается. Это потом приходит понимание как все оптимизировать и как "более правильно". Почему написал "более правильно", потому что "ПРАВИЛЬНО" нет такого понимания в программировании. Сколько программистов, столько и "правильно". А на этом этапе, главное, что бы работало, и уже это заставит человека продолжать изучать тему...
Спасибо, почитаю, на самом деле не знаю смысла "настоящие программисты ". Думаю бедет интересно. Вспомнил как сам (я) писал первые скетчи мигания несколькими диодами с кучей delay(1000).
Я извеняюсь! хотел добавить в скеч фоторезистор и чет второй вечер не могу его привязать.
в свой скеч привязал сразу, а в скуч с label-ами не получаеся(
а сюда уже как не вертел(((
И не получится. На каждую задачу своя структура программы. Именно для той , я посчитал lebel лучше всего подойдет. А сейчас не знаю зачем вам фотодиод и что должно получится в результате.
Брат попросил сделать одсветку в огороде, так чтобы поочереди фонарики загорались когда выходишь, вот и планируется что замкнутся контакты или разомкнутся от датчика движения, и подумал что неплохо было бы чтобы днем все это не срабатывало, вот и решил фоторезистор засунуть.)
можно конечно отдельно это сделать в железе
Разверни и попробуй запусти. Там на датчике движения .
http://arduino.ru/forum/programmirovanie/problemy-s-svedeniem-dvukh-sket...
#5
решил фоторезистор засунуть.)
Фототранзистор в разы дешевле. Засовывается также, как и резистор, т.е. "как два пальца". Он немного шумнее резистора, но для данного приложения его точности и возможностей - выше головы хватит. Я, например, для подобных задач везде пихаю копеечный L-3DP3C и он отлично работает. Подумайте.
От этих простыней китайских пошла кровь из глаз...