Ви не увійшли.
Сторінки 1
Подозреваю, что человек просто не шарит. Бывает же такое?)
Ну так вы шарящий - подскажите! "Люблю" таких умников на форумах, которые сами нехрена не разбираются, но умничают больше других.
нажал - запомнил время 1
отпустил - запомнил время 2
получил разницу время 2 и время 1
если меньше заданного значения - игнорировать
Да, но я не могу внедрить из за:
attachInterrupt(0, buttonPin, FALLING);
оно мне все портит....
Так скетч отдельно работает:
int T = 0;
void setup()
{
pinMode(13, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
if(digitalRead(2)==LOW)//если кнопка нажата ...
{
T++;// прибавляем к переменной 1 при каждой смене цикла.
delay(500);//небольшая защита от "дребезга" контактов кнопки
}
else
{
T=0;
}
if(T>=3)
{
digitalWrite(13,!digitalRead(13));//инвертируем состояние пина
T=0;
}
}
А как вставляю в основной код - работает не корректно...
Ну хоть это, ито не получается интегрировать:
#include "OneButton.h"
OneButton button(2, true);
void setup() {
button.attachLongPressStart(buttonPin);
pinMode(13, OUTPUT);
}
void loop() {
button.tick();
delay(10);
}
void buttonPin() {
digitalWrite(13, HIGH);
}
)) Тогда причём кнопка? Найдите источник помехи и устраните. Мудрёно? )
Да, мудрЁно... 4 блока розжига и есть помеха....
Просто подскажите как сделать длинное нажатие, что бы на короткое нажатие не было реакции.
При включении фар идет короткая помеха, которая как то попадает в Serial. И программа расценивает эту помеху за нажатие.
А вот если программа будет ждать длинное нажатие, то на эту помеху не должна сработать....
а не пробовали почитать про дребезг контактов и по нормальному обрабатывать данные с кнопки, прицепить какую нибудь библиотеку.
Пробовал, причем тут дребезг контактов??? Кнопка отрабатывает четко. Если кнопку не нажимать (даже отключить) и включить фары - идет сработка.
Библиотеку onebutton пробовал, не вышло что то...
Экранировать пробовал, от части помогло, но не полностью...
Я уже не знаю что пробовать.
Изначально это был проект "по приколу". Вещь - которая не сильно нужна.
Но теперь уже принципиально доделать...
По сути это остался единственный баг...
Мне кажется, что помогло бы переключение режима по удержанию на кнопку...
Есть скетч.
Он управляет светом.
1-й режим - ходовые огни
2-й и 3-й - стробоскопы.
В машине при включении ксенона идет помеха, которая как то попадает в сериал порт и дает ложное собрание.
Ни кондеры ни резисторы ни дроселя - не помогают
Выход один - назначить действие на удержание, но у меня это не получается и все, помогите:
int led1 = 6;
int led2 = 7;
int led3 = 8;
int led4 = 9;
int lighton = 4;
int val=1, stope=1;
long previousMillis = 0;
int buttonState = 0;
long interval = 300;
void setup() {
Serial.begin(9600);
delay(2);
pinMode(2, INPUT);
digitalWrite(2, HIGH);
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (led4, OUTPUT);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
pinMode (lighton, INPUT); // Вход для выключателя DRL от фар
digitalWrite(lighton, HIGH);
attachInterrupt(0, buttonPin, FALLING);
while(!Serial);
}
void one()
{
while(stope==1)
{
if (digitalRead(lighton) == LOW)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
if (digitalRead(lighton) == HIGH) //Если подается +12 с зажигания - ДХО горят
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
if(Serial.available() > 0) stope = Serial.parseInt();
}
}
void two()
{
while(stope==1)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
delay(300);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
delay(300);
if(Serial.available() > 0) stope = Serial.parseInt();
}
}
void three()
{
while(stope==1)
{
digitalWrite(led1, HIGH);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led1, LOW);
digitalWrite(led3, LOW);
delay(40);
digitalWrite(led1, HIGH);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led1, LOW);
digitalWrite(led3, LOW);
delay(40);
digitalWrite(led1, HIGH);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led1, LOW);
digitalWrite(led3, LOW);
delay(40);
digitalWrite(led1, HIGH);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led1, LOW);
digitalWrite(led3, LOW);
delay(40);
digitalWrite(led1, HIGH);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led1, LOW);
digitalWrite(led3, LOW);
delay(40);
digitalWrite(led1, HIGH);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led2, LOW);
digitalWrite(led4, LOW);
delay(40);
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led2, LOW);
digitalWrite(led4, LOW);
delay(40);
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led2, LOW);
digitalWrite(led4, LOW);
delay(40);
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led2, LOW);
digitalWrite(led4, LOW);
delay(40);
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led2, LOW);
digitalWrite(led4, LOW);
delay(40);
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
delay(40);
if(Serial.available() > 0) stope = Serial.parseInt();
}
}
void loop()
{
if(Serial.available() > 0) val = Serial.parseInt();
switch(val)
{
case 1:stope=1; one();break;
case 2:stope=1; two();break;
case 3:stope=1; three();break;
}
}
void buttonPin()
{
static unsigned long millis_prev;
if(millis()-1000 > millis_prev)
{
stope=1;
delay(50);
val++;
delay(50);
stope=0;
Serial.println(val);
if(val==4)val=1;
}
millis_prev = millis();
}
Всем привет.
Не могу найти решение....
Нужно:
-включено зажигание И выключены фары = горят огни
-включено зажигание и включены фары = НЕ горят огни
-выключаю зажигание И были включены или не были включены фары = огни ГОРЯТ 30 сек и тухнут...
Вот часть код:
void one()
{
while(stope==1)
{
if (digitalRead(acc) == HIGH && digitalRead(lighton) == HIGH)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
if (digitalRead(acc) == HIGH && digitalRead(lighton) == LOW) //Если подается +12 с зажигания - ДХО горят
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
led1On = true;
led1OnTime = millis();
}
if(led1On)
if(millis() - led1OnTime > 3000) //При отсутствии питания от зажигания, горят 2 минуты и гаснут.
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
led1On = false;
}
if(Serial.available() > 0) stope = Serial.parseInt();
}
Всем привет.
Заниматься Arduino стал 1 мес назад, поэтому знаний и опыта пока нет.
Создаю проект:
Без ключевой доступ к авто.
1. Работает по RFID метке.
2. ХОЧУ сделать от bluetooth модуля.
ЗАДАЧА:
Модуль hc-05, я так понимаю должен быть в режиме MASTER, постоянно ищет устройство с заданным в нем MAC адресом.
При нахождении устройства - открывает авто
При потере связи - закрывает.
Сторінки 1