Ребята в чем может быть подвох

Proger_xxx
Offline
Зарегистрирован: 01.03.2016
void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}

boolean debounce(boolean last)
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}

void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
SWITCH_TIME = SWITCH_TIME + 3000;
}
lastButton = currentButton;

if (SWITCH_TIME > 9000) SWITCH_TIME = 0;
delay(SWITCH_TIME);
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);

}

Где-то имеется ошибка не нашел. Прощу помощи!!! (А сама затея по нажатию кнопки должно время прибавляться. Для эксперимента 3 сек. А патом загорается светодиод) больше 9 сек обнуляется

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

А полный скетч показать камасутра не позволила?

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Виноват... Вот прощу 

int switchPin = 2;
int ledPin = 9;
boolean lastButton = LOW;
int SWITCH_TIME = 0;
boolean currentButton = LOW;

void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}

boolean debounce(boolean last) 
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}

void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
SWITCH_TIME = SWITCH_TIME + 3000;
}
lastButton = currentButton;

if (SWITCH_TIME > 9000) SWITCH_TIME = 0;
digitalWrite(ledPin, SWITCH_TIME);
delay(1000);
digitalWrite(ledPin, LOW);
}

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

А почему в новом скетче нет строки 28 из старого? Задержка больше не нужна?

Как подключена кнопка? К земле притянута?

DIVGENY
Offline
Зарегистрирован: 23.08.2016

программа циклится по строке

return current;

и не переходит в цикл

void loop()

-------------

для отладки есть же обычный способ
void setup() {
  Serial.begin(9600);
      // открываем последовательное соединение
отправить значение переменной
SWITCH_TIME в монитор порта
добавив к 29 сроке Serial.println((SWITCH_TIME), DEC);

значение 3000 и 6000 для digitalWrite(ledPin,xxx)
мне не понятно в 34 строке.
я бы написал
 if(SWITCH_TIME > 0)digitalWrite(ledPin, HIGH);

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DIVGENY пишет:

 

и не переходит в цикл

void loop()

-------------

А это цикл?

Вот же, блин, век живи - век учись.

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Всеровно где-то ошибка. Протеус ругается. Прощу помощи ребята! Давайте все вместе! Вот окончательный кодинг: 

int switchPin = 2;
int ledPin = 9;
boolean lastButton = LOW;
int SWITCH_TIME = 0;
boolean currentButton = LOW;

void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}

boolean debounce(boolean last) 
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}

void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
SWITCH_TIME = SWITCH_TIME + 3000;
}
lastButton = currentButton;

if (SWITCH_TIME > 9000) SWITCH_TIME = 0;
if(SWITCH_TIME > 0)digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}

 

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Поможешь может? Вот окончательный кодинг. Но, протеус ругается

int switchPin = 2;
int ledPin = 9;
boolean lastButton = LOW;
int SWITCH_TIME = 0;
boolean currentButton = LOW;

void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}

boolean debounce(boolean last) 
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}

void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
SWITCH_TIME = SWITCH_TIME + 3000;
}
lastButton = currentButton;

if (SWITCH_TIME > 9000) SWITCH_TIME = 0;
if(SWITCH_TIME > 0)digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}

 

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Все притянута. Все имеется. Да и вообще. Сначала на эмуляторе хотябы заработало. А то вот собрал на Атмеге. Не работает... :(

Вот сам кодинг. Прощу приглянуться:

Поможешь может? Вот окончательный кодинг. Но, протеус ругается

int switchPin = 2;
int ledPin = 9;
boolean lastButton = LOW;
int SWITCH_TIME = 0;
boolean currentButton = LOW;

void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}

boolean debounce(boolean last) 
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}

void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
SWITCH_TIME = SWITCH_TIME + 3000;
}
lastButton = currentButton;

if (SWITCH_TIME > 9000) SWITCH_TIME = 0;
if(SWITCH_TIME > 0)digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Proger_xxx пишет:

Прощу помощи ребята! Давайте все вместе!

народу западло юзеру с таким ником помогать прогить_хахаха!

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Я тебе дело. А ты что?!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Он прав.

Я бы мог помочь, но я терпеть не могу слов "прогер" "кодинг" и им подобных, и мне неприятно быть в этой теме.

Ну, ник уж хрен с ним, но если будете продолжать использовать всякие кодинги, я больше не буду тут мораль читать - просто исчезну.

А по делу. Вас ведь по-русски спросили в посте №3 "зачем Вы выкинули задержку". Вы её так и не вернули. Вы вообще читаете. что Вам пишут?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Proger_xxx пишет:

Я тебе дело. А ты что?!

Я - всё!

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Для начала возьми свой "кодинг" и попробуй к каждой строке добавить комментарий, что она делает. Не исключено что уже на этом этапе тебе станет ясно на что ругается ид. Хотя это и так должно быть ясно, ведь иде не просто посылает туда куда Клапоуций, а в конкретную строчку "кодинга". Потом пройдись по программе и думай так как думает мк, благо мозгов у него меньше чем у тебя. Ну и да, ник поскромнее и люди потянутся)

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Обиделся я на вас. Не буду больше с вами разговаривать...

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Все вернул на место. Только логика разбросанная. Наверное из-задребезга. Хотя вроде бы защита имеется 

int switchPin = 2;
int ledPin = 9;
boolean lastButton = LOW;
int SWITCH_TIME = 0;
boolean currentButton = LOW;

void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}

boolean debounce(boolean last)
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}

void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
SWITCH_TIME = SWITCH_TIME + 3000;
}
lastButton = currentButton;

if (SWITCH_TIME > 9000) SWITCH_TIME = 0;
delay(SWITCH_TIME);
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Proger_xxx пишет:

Все вернул на место. Только логика разбросанная. Наверное из-задребезга. Хотя вроде бы защита имеется

Товарищу Дребезгу поставить на вид за злостное разбрасывание логики!

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

ЕвгенийП пишет:

Товарищу Дребезгу поставить на вид за злостное разбрасывание логики!

Задребезгу... товарищу

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Да не, логику разбрасал компилятор когда ругался на ошибки...