Приехали вибромоторы, перепрошил вышеуказанный код для вжиков, не работает..
Принимающая дуина мигает одновременно сразу тремя цветами, на передающуюю ноль внимания.Передающую дуину отключаю, мигание на принимающей прекращается...На кнопочной (передающей)дуине на 6,7,8 ноге для вжиков -ноль вольт.
byte BUTTON_PINS[]={3,4,5}; // номера пинов конопок, настройте в соотвествии с вашими подключениями
#define MOTOR_TIME 300 // время "вжика" мотора в миллисекундах
#define MARKER_TIMEOUT 200 // время в миллисекундах, сколько мы можем ждать индекса после маркера. Если за это время индекс не пришел - забываем про маркер
unsigned long markerTime=0;// время когда мы "поймали" маркер светофора
#define TOTAL_BUTTONS sizeof(BUTTON_PINS)/sizeof(byte)
byte MOTOR_PINS[]={6,7,8};// номера пинов на который подключены моторы, поменяйте как удобней подключать
unsigned long times_off[TOTAL_BUTTONS];// тут будем хранить время, когда моторы нужно выключить
void setup(){
for(byte i=0;i<TOTAL_BUTTONS;i++){
pinMode(BUTTON_PINS[i],INPUT);
pinMode(BUTTON_PINS[i],HIGH); //включаем подтягивающие резисторы
pinMode(MOTOR_PINS[i],OUTPUT); // настраиваем пины для моторов на выход
}
Serial.begin(9600);
}
void loop(){
buttonsMon(); // смотрим на кнопки
serialMon(); // смотрим в Serial
offMotors(); // смотрим время и выключаем, если нужно, мооторы
}
// проверяем все кнопки, и сообщаем в Serial о нажатии
void buttonsMon(){
for(byte i=0;i<TOTAL_BUTTONS;i++){ //опрашиваем кнопки
if(!digitalRead(BUTTON_PINS[i])){ // если кнопка нажата
Serial.print(i+1); // посылаем ее индекс. в нумерации "от единицы".
}
}
}
// наблюдает за Serial, вылавливает в нем сообщения о включении светофора
void serialMon(){
if(Serial.available ()){ //пришли какие-то данные
byte ch=Serial.read();
if(ch=='*') { // это маркер
markerTime=millis();// запомнили когда мы его поймали
}
if(millis()-markerTime>MARKER_TIMEOUT)markerTime=0;// забываем про маркер, время вышло
if(markerTime && ch!='*'){ // что-то поймали после маркера
// пытаемся это интерпретировать как индекс светофора
int buttonIndex = ch-48;
buttonIndex=buttonIndex-1; // в массиве нумерация идет с нуля
if(buttonIndex>=0 && buttonIndex<TOTAL_BUTTONS){ //игнорируем случайный мусор, если вдруг прийдет
markerTime=0;// "сбросили" флаг маркера, больше не ждем индекс
if(!times_off[buttonIndex]){ // включаем только выключеные моторы
digitalWrite(MOTOR_PINS[buttonIndex],HIGH); // влючили мотор
times_off[buttonIndex]=millis()+MOTOR_TIME;// высчитали время когда его нужно будет выключить
}
}
}
}
}
// проверяем все моторы и выключает если "время пришло"
void offMotors(){
unsigned long currentTime=millis();
for(byte i=0;i<TOTAL_BUTTONS;i++){
if(times_off[i]>currentTime){ //пора выключать
digitalWrite(MOTOR_PINS[i],LOW); // выключили мотор
times_off[i]=0; // пометили что выключили
}
}
}
#define LED_DELAY 2000 // время горения светодиода
#define IGNORE_BUTTON_TIME 5000 // время, сколько нужно игнорировать кнопку
byte LED_PINS[]={13,12,11}; // номера пинов светодиодов, настройте в соотвествии с вашими подключениями
#define TOTAL_LEDS sizeof(LED_PINS)/sizeof(byte)
unsigned long times_off[TOTAL_LEDS];// тут будем хранить время, когда диоды нужно выключить
unsigned long times_enable_buttons[TOTAL_LEDS]; // тут будем хранить время, когда на кнопку "можно реагировать".
int buttonIndex;
void setup(){
Serial.begin(9600);
for(byte i=0;i<TOTAL_LEDS;i++){
pinMode(LED_PINS[i],OUTPUT);// настроиваем порты
times_off[i]=0; //по умолчанию все диоды выключены
digitalWrite(LED_PINS[i],HIGH);
times_enable_buttons[i]=0; // по умолчанию все кнопки разрешены
}
Serial.println("Ready for command");
}
void loop(){
unsigned long currentTime=millis();
if(Serial.available()){
buttonIndex = Serial.read()-48;
buttonIndex=buttonIndex-1; // в массиве нумерация идет с нуля
Serial.print(millis());
Serial.print(":Readed buttonIndex=");Serial.println(buttonIndex);
if(buttonIndex>=0 && buttonIndex<TOTAL_LEDS){ //игнорируем случайный мусор, если вдруг прийдет
if(times_enable_buttons[buttonIndex] < currentTime){ // игнорируем если еще не настало время, когда на кнопку можно смотреть
digitalWrite(LED_PINS[buttonIndex],LOW); //включаем
Serial.print(currentTime);
Serial.print(":");
for(byte k=0;k<3;k++){ // на всякий случай, вдруг связь плохая, посылаем сообщение о включении светофора три раза
Serial.print("*");// посылаем маркер, что-бы "кнопочная" могла отличить данные от отладочной инфы
Serial.print(buttonIndex+1);// посылаем номер сфетофора в "человеческой" индексации.
}
Serial.println();
times_off[buttonIndex]=currentTime+LED_DELAY;// запоминаем время когда нужно будет выключить
times_enable_buttons[buttonIndex]=currentTime+IGNORE_BUTTON_TIME; // запоминаем время когда опять можно нажимать на кнопку
}
}
}
//проверяем, не настало-ли время включать
for(byte i=0;i<TOTAL_LEDS;i++){
if(currentTime>times_off[i]){ //текуще время больше, расчетного "времени выключения"
digitalWrite(LED_PINS[i],HIGH); //выключаем
if(times_off[i]){ //отчитываемся в serial только если диод был включен
Serial.print(millis());
Serial.print(":TurnOff");Serial.println(i);
}
times_off[i]=0;// помечаем что диод горит
}
}
}
//Кнопочный скетч//
byte BUTTON_PINS[]={3,4,5}; // номера пинов конопок, настройте в соотвествии с вашими подключениями
#define MOTOR_TIME 300 // время "вжика" мотора в миллисекундах
#define MARKER_TIMEOUT 200 // время в миллисекундах, сколько мы можем ждать индекса после маркера. Если за это время индекс не пришел - забываем про маркер
unsigned long markerTime=0;// время когда мы "поймали" маркер светофора
#define TOTAL_BUTTONS sizeof(BUTTON_PINS)/sizeof(byte)
byte MOTOR_PINS[]={6,7,8};// номера пинов на который подключены моторы, поменяйте как удобней подключать
unsigned long times_off[TOTAL_BUTTONS];// тут будем хранить время, когда моторы нужно выключить
void setup(){
for(byte i=0;i<TOTAL_BUTTONS;i++){
pinMode(BUTTON_PINS[i],INPUT);
digitalWrite(BUTTON_PINS[i],HIGH); //включаем подтягивающие резисторы
pinMode(MOTOR_PINS[i],OUTPUT); // настраиваем пины для моторов на выход
times_off[i]=0;
}
Serial.begin(9600);
}
void loop(){
buttonsMon(); // смотрим на кнопки
serialMon(); // смотрим в Serial
offMotors(); // смотрим время и выключаем, если нужно, мооторы
}
// проверяем все кнопки, и сообщаем в Serial о нажатии
void buttonsMon(){
for(byte i=0;i<TOTAL_BUTTONS;i++){ //опрашиваем кнопки
if(!digitalRead(BUTTON_PINS[i])){ // если кнопка нажата
Serial.print(i+1); // посылаем ее индекс. в нумерации "от единицы".
}
}
}
// наблюдает за Serial, вылавливает в нем сообщения о включении светофора
void serialMon(){
if(Serial.available ()){ //пришли какие-то данные
byte ch=Serial.read();
if(ch=='*') { // это маркер
markerTime=millis();// запомнили когда мы его поймали
}
if(millis()-markerTime>MARKER_TIMEOUT)markerTime=0;// забываем про маркер, время вышло
if(markerTime && ch!='*'){ // что-то поймали после маркера
// пытаемся это интерпретировать как индекс светофора
int buttonIndex = ch-48;
buttonIndex=buttonIndex-1; // в массиве нумерация идет с нуля
if(buttonIndex>=0 && buttonIndex<TOTAL_BUTTONS){ //игнорируем случайный мусор, если вдруг прийдет
markerTime=0;// "сбросили" флаг маркера, больше не ждем индекс
if(!times_off[buttonIndex]){ // включаем только выключеные моторы
digitalWrite(MOTOR_PINS[buttonIndex],HIGH); // влючили мотор
// Serial.print("ON");Serial.print(buttonIndex);
times_off[buttonIndex]=millis()+MOTOR_TIME;// высчитали время когда его нужно будет выключить
}
}
}
}
}
// проверяем все моторы и выключает если "время пришло"
void offMotors(){
unsigned long currentTime=millis();
for(byte i=0;i<TOTAL_BUTTONS;i++){
if(times_off[i]<currentTime){ //пора выключать
digitalWrite(MOTOR_PINS[i],LOW); // выключили мотор
// if(times_off[i]){Serial.print("OFF");Serial.println(i);}
times_off[i]=0; // пометили что выключили
}
}
}
byte BUTTON_PINS[]={3,4,5}; // номера пинов конопок, настройте в соотвествии с вашими подключениями
#define MOTOR_TIME 300 // время "вжика" мотора в миллисекундах
#define MARKER_TIMEOUT 200 // время в миллисекундах, сколько мы можем ждать индекса после маркера. Если за это время индекс не пришел - забываем про маркер
unsigned long markerTime=0;// время когда мы "поймали" маркер светофора
#define TOTAL_BUTTONS sizeof(BUTTON_PINS)/sizeof(byte)
byte MOTOR_PINS[]={6,7,8};// номера пинов на который подключены моторы, поменяйте как удобней подключать
unsigned long times_off[TOTAL_BUTTONS];// тут будем хранить время, когда моторы нужно выключить
void setup(){
for(byte i=0;i<TOTAL_BUTTONS;i++){
pinMode(BUTTON_PINS[i],INPUT);
digitalWrite(BUTTON_PINS[i],HIGH); //включаем подтягивающие резисторы
pinMode(MOTOR_PINS[i],OUTPUT); // настраиваем пины для моторов на выход
}
Serial.begin(9600);
}
void loop(){
buttonsMon(); // смотрим на кнопки
serialMon(); // смотрим в Serial
offMotors(); // смотрим время и выключаем, если нужно, мооторы
}
// проверяем все кнопки, и сообщаем в Serial о нажатии
void buttonsMon(){
for(byte i=0;i<TOTAL_BUTTONS;i++){ //опрашиваем кнопки
if(!digitalRead(BUTTON_PINS[i])){ // если кнопка нажата
Serial.print(i+1); // посылаем ее индекс. в нумерации "от единицы".
}
}
}
// наблюдает за Serial, вылавливает в нем сообщения о включении светофора
void serialMon(){
if(Serial.available ()){ //пришли какие-то данные
byte ch=Serial.read();
if(ch=='*') { // это маркер
markerTime=millis();// запомнили когда мы его поймали
}
if(millis()-markerTime>MARKER_TIMEOUT)markerTime=0;// забываем про маркер, время вышло
if(markerTime && ch!='*'){ // что-то поймали после маркера
// пытаемся это интерпретировать как индекс светофора
int buttonIndex = ch-48;
buttonIndex=buttonIndex-1; // в массиве нумерация идет с нуля
if(buttonIndex>=0 && buttonIndex<TOTAL_BUTTONS){ //игнорируем случайный мусор, если вдруг прийдет
markerTime=0;// "сбросили" флаг маркера, больше не ждем индекс
if(!times_off[buttonIndex]){ // включаем только выключеные моторы
digitalWrite(MOTOR_PINS[buttonIndex],HIGH); // влючили мотор
times_off[buttonIndex]=millis()+MOTOR_TIME;// высчитали время когда его нужно будет выключить
}
}
}
}
}
// проверяем все моторы и выключает если "время пришло"
void offMotors(){
unsigned long currentTime=millis();
for(byte i=0;i<TOTAL_BUTTONS;i++){
if(times_off[i]>currentTime){ //пора выключать
digitalWrite(MOTOR_PINS[i],LOW); // выключили мотор
times_off[i]=0; // пометили что выключили
}
}
}
Попробовал. Во время включения светофора на ноге № 6---0,02 вольта , на 7 и 8 -ноль.Сама светофорная дуина работает, как и раньше.Вжики подключил через ULN 2003(более 80 мА потребление).Я так понимаю,что во время включения соотвеств сигнала на 6,7,8 ногах должен быть сигнал +
Все, пошел к водоему поглубже. "звездочка 1" прекрасно работает... Светодиод на 13 пине горит 3 секунды...
Значит и на 7 и на 8 пине должен быть сигнал.Где-то туплю...Подключил модемы, кнопки работают, кнопочный светиик на 13 ноге не горит. Дело в светофорном скетче ?
> кнопочный светиик на 13 ноге не горит. Дело в светофорном скетче?
Подключете светофорную к дуине. Ей в serial руками шлете 1 (теперь без зведочки). Помимо зажигания светофора, она должна ответить "*1*1*1". Если ответила - значить проблема где-то в связи между ними. Проверте подключение.
Следующие - возможно у вам модули полу-дуплексные, тогда нужно будет кнопочную чуток менять, что-бы она не "забивала эфир" постоянной передачей при нажатой кнопке.
Подключил светофорную к SM.Зажигает светофор,отвечает "*1*1*1*. Поключаю модули, кнопочная зажигает светофорную, связь есть. (по крайней мере, в одну сторону).Изредка, с пропусками,на вкл. светофора отвечает светик на13 ноге кнопочной дуины(сигнал для вжика)
Да, посмотрел в даташит. Модули таки полу-дуплексные (не могут одновременно передавать и принимать данные). Что-бы на 100% убедится что проблема в этом
1. В "кнопочной" уменьшаем время горения 3000 до 500 (думаю пол секунды будут нормально заменты для глаза).
2. В сфетофорную вливаемт такой скетч.
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("*1*1*1");
delay(1000);// каждую секунду посылаем команду включить первых вжик (светик)
}
на этом скетче, led на кнопочной должен мигать раз в секунду. если при этом нажать кнопку и миги начнут "пропускатся" - значит версия подтвердилась.
Выход:
Тупо попытася поднять скорость с 9600 на что-то большие, в надежде что "успеет пролезть".
//Кнопочный скетч//
byte BUTTON_PINS[]={3,4,5}; // номера пинов конопок, настройте в соотвествии с вашими подключениями
#define MOTOR_TIME 500 // время "вжика" мотора в миллисекундах
#define MARKER_TIMEOUT 200 // время в миллисекундах, сколько мы можем ждать индекса после маркера. Если за это время индекс не пришел - забываем про маркер
unsigned long markerTime=0;// время когда мы "поймали" маркер светофора
#define TOTAL_BUTTONS sizeof(BUTTON_PINS)/sizeof(byte)
byte MOTOR_PINS[]={13,7,8};// номера пинов на который подключены моторы, поменяйте как удобней подключать
byte prev_buttons_state[TOTAL_BUTTONS];// будем тут хранить предыдущие состояние кнопки
unsigned long times_off[TOTAL_BUTTONS];// тут будем хранить время, когда моторы нужно выключить
void setup(){
for(byte i=0;i<TOTAL_BUTTONS;i++){
pinMode(BUTTON_PINS[i],INPUT);
digitalWrite(BUTTON_PINS[i],HIGH); //включаем подтягивающие резисторы
pinMode(MOTOR_PINS[i],OUTPUT); // настраиваем пины для моторов на выход
times_off[i]=0;
}
Serial.begin(9600);
}
void loop(){
buttonsMon(); // смотрим на кнопки
serialMon(); // смотрим в Serial
offMotors(); // смотрим время и выключаем, если нужно, мооторы
}
// проверяем все кнопки, и сообщаем в Serial о нажатии
void buttonsMon(){
for(byte i=0;i<TOTAL_BUTTONS;i++){ //опрашиваем кнопки
byte button_state=!digitalRead(BUTTON_PINS[i]);
if(button_state && !prev_buttons_state[i]){ // если кнопка нажата, а предыдущем состояним было "не нажата"
Serial.print(i+1); // посылаем ее индекс. в нумерации "от единицы".
}
prev_buttons_state[i]=button_state; // запомнили состояние кнопки
}
}
// наблюдает за Serial, вылавливает в нем сообщения о включении светофора
void serialMon(){
if(Serial.available ()){ //пришли какие-то данные
byte ch=Serial.read();
if(ch=='*') { // это маркер
markerTime=millis();// запомнили когда мы его поймали
}
if(millis()-markerTime>MARKER_TIMEOUT)markerTime=0;// забываем про маркер, время вышло
if(markerTime && ch!='*'){ // что-то поймали после маркера
// пытаемся это интерпретировать как индекс светофора
int buttonIndex = ch-48;
buttonIndex=buttonIndex-1; // в массиве нумерация идет с нуля
if(buttonIndex>=0 && buttonIndex<TOTAL_BUTTONS){ //игнорируем случайный мусор, если вдруг прийдет
markerTime=0;// "сбросили" флаг маркера, больше не ждем индекс
if(!times_off[buttonIndex]){ // включаем только выключеные моторы
digitalWrite(MOTOR_PINS[buttonIndex],HIGH); // влючили мотор
// Serial.print("ON");Serial.print(buttonIndex);
times_off[buttonIndex]=millis()+MOTOR_TIME;// высчитали время когда его нужно будет выключить
}
}
}
}
}
// проверяем все моторы и выключает если "время пришло"
void offMotors(){
unsigned long currentTime=millis();
for(byte i=0;i<TOTAL_BUTTONS;i++){
if(times_off[i]<currentTime){ //пора выключать
digitalWrite(MOTOR_PINS[i],LOW); // выключили мотор
// if(times_off[i]){Serial.print("OFF");Serial.println(i);}
times_off[i]=0; // пометили что выключили
}
}
}
Возможно потребует еще антидребезг на кнопки прикрутить, если будут давать слишком много импульсов.
Залил крайний кнопочный скетч из поста 124 , ВСЕ РАБОТАЕТ ! Уже и вжик вжикает....
Только постоянно нажатая кнопка не зажигает через 5 секунд светофор.Постоянно нажатая кнопка вообще светофор не зажигает.Только во время отпускания спустя 5 секунд.Возможна человеческая ошибка.Можно вернуть старый алгоритм включения кнопки, т.е . зажигание светофора происходит только при именно нажатии кнопки спустя некоторое (допустим,5 сек) время после предыдущего именно ее нажатия? Вообще-то, Если я злоупотребляю вашим временем,то и Бог с ним...
Сегодня собрал все три кнопки со вжиками,поставил максимальную скорость 57600, попробовал. Одновременное нажатие кнопок -вроде пошли пропуски загорания.Завтра испытаю на свежую голову..
[quote=leshak]
Добрый день !
Приехали вибромоторы, перепрошил вышеуказанный код для вжиков, не работает..
Принимающая дуина мигает одновременно сразу тремя цветами, на передающуюю ноль внимания.Передающую дуину отключаю, мигание на принимающей прекращается...На кнопочной (передающей)дуине на 6,7,8 ноге для вжиков -ноль вольт.
А опять так же проблема. У вас поправили, а на форуме - осталось. А при переделке я взял форумный вариант.
В нопочном, 16-тая строка
вместо pinMode нужен digitalWrite
Ну в этом варианте, это 17-тая строка кнопочного. замените pinMode на digitalWrite в ней.
Кнопочный
Вот так?
>Вот так?
В предыдущем я дал скетч целиком. Попробуйте его.
P.S. вставляя, лучше сворачивать большие скетчи, а то колесико на мышке стирается, такие темы скролить http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Спасибо, буду учиться..Пошел пробовать..
Попробовал. Во время включения светофора на ноге № 6---0,02 вольта , на 7 и 8 -ноль.Сама светофорная дуина работает, как и раньше.Вжики подключил через ULN 2003(более 80 мА потребление).Я так понимаю,что во время включения соотвеств сигнала на 6,7,8 ногах должен быть сигнал +
>Во время включения светофора на ноге № 6---0,02 вольта
Возможно это просто тестер не успел замерить 5v. Включается-то всего на 300 миллисекунд. Поставте MOTOR_TIME 3000
Что-бы он три секунды включенным держал, что-бы четче было видно включился или нет. Да и тестеру 3 сек должно хватить на измерение.
Теперь вообще полный ноль на 6,7,8 ноге
Вы точно используете скетч из сообщения #106?
Поменяйте (только в скетче, не изменяю подключения, в строке 10) 6-тую ногу. На 13-тую.
Тогда вместо перового вжика, должен на плате зажигатся светодиод. Зажигается?
Если нет - подключаете плату к компу, и в Serial Монтор, руками набираете-осылаете строку "*1"
Светик должен включится на 3 сек.
Светодиод не горит в обоих случаях.На кнопки жмешь, 1,2,3 бегут в Сериал- мониторе
>На кнопки жмешь, 1,2,3 бегут в Сериал- мониторе
Ну правильно что бегут. Это она сообщает о кнопках. вы
>Если нет - подключаете плату к компу, и в Serial Монтор, руками набираете-осылаете строку "*1"
Сдеали? Команду на включение дали?
Да.Подключил кнопочную дуину к компу, ввел в верхную строку 1 и нажал SEND. На переходнике к дуине загорелся светик Tx, передача идет?
Светик на дуине не горит
Если давали, то руками в Serial монтор, то возникает вопрос "а той ли плате вы давали"?
Вы к компу подключили именно кнопочную плату? Ей слали *1? Не светофорной?
> ввел в верхную строку 1
Не "один", а "звездочка 1"
Все, пошел к водоему поглубже. "звездочка 1" прекрасно работает... Светодиод на 13 пине горит 3 секунды...
Значит и на 7 и на 8 пине должен быть сигнал.Где-то туплю...Подключил модемы, кнопки работают, кнопочный светиик на 13 ноге не горит. Дело в светофорном скетче ?
>Значит и на 7 и на 8 пине
Они включатся *2 и *3 соотвественно.
Прогоните на кнопочной дуине такой скетч
Он будет включить их по очереди (светик, 7,8) на секунду.
Если и при этом на них 5v не появится,значит где-то в своих эксперементах подпалили ноги. Попробуйте другие.
> кнопочный светиик на 13 ноге не горит. Дело в светофорном скетче?
Подключете светофорную к дуине. Ей в serial руками шлете 1 (теперь без зведочки). Помимо зажигания светофора, она должна ответить "*1*1*1". Если ответила - значить проблема где-то в связи между ними. Проверте подключение.
Следующие - возможно у вам модули полу-дуплексные, тогда нужно будет кнопочную чуток менять, что-бы она не "забивала эфир" постоянной передачей при нажатой кнопке.
Подключил светофорную к SM.Зажигает светофор,отвечает "*1*1*1*. Поключаю модули, кнопочная зажигает светофорную, связь есть. (по крайней мере, в одну сторону).Изредка, с пропусками,на вкл. светофора отвечает светик на13 ноге кнопочной дуины(сигнал для вжика)
Да, посмотрел в даташит. Модули таки полу-дуплексные (не могут одновременно передавать и принимать данные). Что-бы на 100% убедится что проблема в этом
1. В "кнопочной" уменьшаем время горения 3000 до 500 (думаю пол секунды будут нормально заменты для глаза).
2. В сфетофорную вливаемт такой скетч.
на этом скетче, led на кнопочной должен мигать раз в секунду. если при этом нажать кнопку и миги начнут "пропускатся" - значит версия подтвердилась.
Выход:
Тупо попытася поднять скорость с 9600 на что-то большие, в надежде что "успеет пролезть".
Либо нужно будет чуток поменять принимающую.
Попробуйте вот такой кнопочный
Возможно потребует еще антидребезг на кнопки прикрутить, если будут давать слишком много импульсов.
Ответ на 123 пост.Залил скетчи.На светофорной дуине постоянно включен красный свет(команда 1).На кнопочной ничего ни мигает
(Ответ на пост124)
Залил крайний кнопочный скетч из поста 124 , ВСЕ РАБОТАЕТ ! Уже и вжик вжикает....
Только постоянно нажатая кнопка не зажигает через 5 секунд светофор.Постоянно нажатая кнопка вообще светофор не зажигает.Только во время отпускания спустя 5 секунд.Возможна человеческая ошибка.Можно вернуть старый алгоритм включения кнопки, т.е . зажигание светофора происходит только при именно нажатии кнопки спустя некоторое (допустим,5 сек) время после предыдущего именно ее нажатия? Вообще-то, Если я злоупотребляю вашим временем,то и Бог с ним...
И нужен-ли антидребезг?
Сегодня собрал все три кнопки со вжиками,поставил максимальную скорость 57600, попробовал. Одновременное нажатие кнопок -вроде пошли пропуски загорания.Завтра испытаю на свежую голову..
[сорри, не в ту тему ответил]