народ, беда, помогите разобраться
if (timer != timerPress) не срабатывает эта строка
&& timer <= (timerPress + 300) и эта часть
код и монитор порта прологаю
версия arduino IDE 1.8.2
есть светодиод (полевик и набор из 20 шт 5730)
хочу управлять им и с пульта и с кнопки поэтому там button пульт будет задействован позже.
на пульте есть неиспользуемая кнопка... она сделана для других стран
я уже пробовал ее - работает код получен и прочее
СУТЬ! при нажатии на кнопку длительностью меньше 300 миллисекунд включает val = 255 - подаем на светодиод
при повторном нажатии меньше 300 миллисекунд подает val = 0
при удержании с выключенного положения больше 300 миллисекунд начинает прибавлять значение val (скажем прибавили до 180)
при нажатии менее 300 мс val=0
при длительном нажатии начинает убавлять(скажем 150) совсем не светит почти
и при длительном нажатии опять начинает прибавлять...
гладко было было на бумаге, да вот чет не ожидал что так сразу вспотыкаться начну... всем спасибо за конструктивные ответы
int val = 0; // создаем переменную регулировки и определяем её значение
boolean button = false; // нажатие кнопки (пульта или клацалки)
boolean flag = false; // сработка кнопки
unsigned long timer = 0; // таймер с момента включения
unsigned long timerPress = 0; // таймер удержания кнопки
int gatePin = 3; // указываем пин который будем управлять затвором
int buttonPin = 5; // указываем пин кнопки
int regim = 0; // режим
int trend = 1; //направление переключения режимов в большую или меньшую сторону
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
timer = millis();
button = digitalRead(buttonPin);
// нажатие кнопки
if (button == true) //если кнопка нажата ...
{
flag = true; //поднимаем флаг
if (timer != timerPress) // и если таймеры не равны
{
timerPress = timer; // то таймеру нажатия присваивается значение таймера
}
}
//отпускание кнопки
if (button == false && regim == 0 && flag == true && timer < (timerPress + 300) ) // если кнопка отжата и режим 0 и таймер меньше таймера нажатия на 300 мс
{
flag = false; // опускаем флаг
regim = 255; // режим равен 255
}
if (button == false && regim == 255 && flag == true && timer < (timerPress + 300) ) // если кнопка отжата и режим 255 и таймер меньше таймера нажатия на 300 мс
{
flag = false; // опускаем флаг
regim = 0; // режим равен 0
}
// ружимы
if (regim == 0) {
val = 0;
}
if (regim == 1) {
val = 180;
}
if (regim == 2) {
val = 180;
}
if (regim == 3) {
val = 190;
}
if (regim == 4) {
val = 200;
}
if (regim == 5) {
val = 200;
}
if (regim == 6) {
val = 210;
}
if (regim == 7) {
val = 220;
}
if (regim == 8) {
val = 230;
}
if (regim == 9) {
val = 240;
}
if (regim == 10) {
val = 255;
}
//вывод значения
analogWrite(gatePin , val);
//вывод в монитор
Serial.print(" timer-");
Serial.print (timer);
Serial.print(" timerPress-");
Serial.print (timerPress);
Serial.print(" button-");
Serial.print (button);
Serial.print(" flag-");
Serial.print (flag);
Serial.print(" val-");
Serial.println(val);
//делея тут не будет в итоге
delay(10);
}
монитор порта в скрине
ткните носом в косяк