#1 Re: Програмування Arduino » Помогите с нажатием на кнопку (удержание) » 2018-03-12 10:27:43

Green пише:

Подозреваю, что человек просто не шарит. Бывает же такое?)

Ну так вы шарящий - подскажите! "Люблю" таких умников на форумах, которые сами нехрена не разбираются, но умничают больше других.

#2 Re: Програмування Arduino » Помогите с нажатием на кнопку (удержание) » 2018-03-07 21:45:12

renoshnik пише:

нажал - запомнил время 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;
      }
 }

А как вставляю в основной код - работает не корректно...

#3 Re: Програмування Arduino » Помогите с нажатием на кнопку (удержание) » 2018-03-06 15:06:16

Ну хоть это, ито не получается интегрировать:

#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 Re: Програмування Arduino » Помогите с нажатием на кнопку (удержание) » 2018-03-06 14:59:54

Green пише:

)) Тогда причём кнопка? Найдите источник помехи и устраните. Мудрёно? )

Да, мудрЁно... 4 блока розжига и есть помеха....
Просто подскажите как сделать длинное нажатие, что бы на короткое нажатие не было реакции.
При включении фар идет короткая помеха, которая как то попадает в Serial. И программа расценивает эту помеху за нажатие.
А вот если программа будет ждать длинное нажатие, то на эту помеху не должна сработать....

#5 Re: Програмування Arduino » Помогите с нажатием на кнопку (удержание) » 2018-03-06 14:14:35

vvr пише:

а не пробовали почитать про дребезг контактов и по нормальному обрабатывать данные с кнопки, прицепить какую нибудь библиотеку.

Пробовал, причем тут дребезг контактов??? Кнопка отрабатывает четко. Если кнопку не нажимать (даже отключить) и включить фары - идет сработка.

Библиотеку onebutton пробовал, не вышло что то...

#6 Re: Програмування Arduino » Помогите с нажатием на кнопку (удержание) » 2018-03-06 10:43:46

Экранировать пробовал, от части помогло, но не полностью...
Я уже не знаю что пробовать.
Изначально это был проект "по приколу". Вещь - которая не сильно нужна.
Но теперь уже принципиально доделать...

По сути это остался единственный баг...
Мне кажется, что помогло бы переключение режима по удержанию на кнопку...

#7 Програмування Arduino » Помогите с нажатием на кнопку (удержание) » 2018-03-05 14:41:20

radio-active
відповідей: 59

Есть скетч.
Он управляет светом.
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();        
 
} 

#8 Програмування Arduino » Помогите с блоком управления DRL и стробоскопами » 2017-12-15 11:41:05

radio-active
відповідей: 0

Всем привет.
Не могу найти решение....
Нужно:
-включено зажигание И выключены фары = горят огни
-включено зажигание и включены фары = НЕ горят огни
-выключаю зажигание И были включены или не были включены фары = огни ГОРЯТ 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();
} 

#9 Програмування Arduino » Нужна помощь с bluetooth hc-05 » 2017-03-31 10:21:23

radio-active
відповідей: 2

Всем привет.
Заниматься Arduino стал 1 мес назад, поэтому знаний и опыта пока нет.

Создаю проект:
Без ключевой доступ к авто.
1. Работает по RFID метке.
2. ХОЧУ сделать от  bluetooth модуля.

ЗАДАЧА:
Модуль hc-05, я так понимаю должен быть в режиме MASTER, постоянно ищет устройство с заданным в нем MAC адресом.
При нахождении устройства - открывает авто
При потере связи - закрывает.

Підвал форуму