• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Prośba o analizę kodu 2 klik w określonym czasie
#1
Witam
Możecie mi podpowiedzieć jak w tym programie zrobić żeby np 2 kliknięcia w ciagu 5s włączyły diodę, a jeśli nie będzie 2 klików w tym czasie to ignoruje. I jaki warunek użyć żeby diody zapały się na przemian ?
Program działa tak że jak szybko kliknę 2 razy to reaguje, ale jak chciałbym kliknąć 2 razy w ciągu np 5s nie reaguje.
Kod:
#include "ClickButton.h"
const int ledPin = 12;
const int ledPin2 = 13;
int ledState = 0;
int ledState2 = 0;
const int buttonPin1 = 8;
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
int LEDfunction = 0;

void setup()
{
  pinMode(ledPin,OUTPUT); 
  pinMode(ledPin2,OUTPUT); 
  button1.longClickTime  = 1000 ;
 
}

void loop()  {
 
  button1.Update();
  if (button1.clicks !=0) LEDfunction = button1.clicks;
  if(button1.clicks == 1) ledState = !ledState; 
digitalWrite(ledPin,ledState);
if(button1.clicks == 2) ledState2 = !ledState2; 
digitalWrite(ledPin2,ledState2);
}
 
Odpowiedź
#2
z ignorancją będzie źle bo trzeba bibliotekę przerabiać...

Myśle że wystarczy ta linijka

multiclickTime = 250; // Time limit for multi clicks

na

multiclickTime = 5000; // Time limit for multi clicks

A to drugie to wystarczy to

if(button1.clicks == 2) ledState2 = !ledState2;

Na to

if(button1.clicks == 2) ledState2 = !ledState;
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
Wcześniej tyle się z tym męczyłem. Bardzo dziękuje za podpowiedź. Działa super, czas i zapala na przemian. Ignoruje jak drugie wciśnięcie jest powyżej 5s tylko, kiedy wciskam 2 razy w ciągu tych 5s to muszę odczekać około 5s zanim dioda się zapali.
Proszę jeszcze o wskazówkę jaki warunek wpisać, żeby diody wyłączały się po określonym czasie.
Kod:
#include "ClickButton.h"
const int ledGreen = 12;
const int ledRed = 13;
int ledState = 0;
int ledState2 = 0;
const int buttonPin1 = 8; // przycisk
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
int LEDfunction = 0;

void setup()
{
  pinMode(ledGreen,OUTPUT); 
  pinMode(ledRed,OUTPUT);
  button1.multiclickTime = 5000;  // Time limit for multi clicks
}

void loop()
{
  button1.Update();

  if (button1.clicks != 0) LEDfunction = button1.clicks;
  if(button1.clicks == 2) ledState = !ledState;
  if(button1.clicks == 2) ledState2 = !ledState;
  digitalWrite(ledGreen,ledState);
  digitalWrite(ledRed,ledState2);
}
 
Odpowiedź
#4
void loop()
{
button1.Update();
Static uint32_t Tims = millis();


if (button1.clicks != 0) LEDfunction = button1.clicks;
if(button1.clicks == 2) ledState = !ledState;
if(button1.clicks == 2) ledState2 = !ledState;
Tims=millis();
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);


if(millis()- Tims >= 5000){ // 5sekund do wyłączenia
Tims =millis();
ledState = LOW;
ledState2 = LOW;
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);



}
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#5
Dziękuje za ogromną pomoc. Kombinuje od godz ale nie wiem jak na początku programu zadeklarować milisa
 
Odpowiedź
#6
a po co deklarować?? przecież to funkcja wewnętrzna ona już jest.

Mi się tylko pomyliło bo powinno być static z małej litery nie z dużej...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#7
Kod:
#include "ClickButton.h"
const int ledGreen = 12;
const int ledRed = 13;
int ledState = 0;
int ledState2 = 0;
const int buttonPin1 = 8; // przycisk
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
int LEDfunction = 0;

void setup()
{
  pinMode(ledGreen,OUTPUT); 
  pinMode(ledRed,OUTPUT);
  button1.multiclickTime = 5000;  // Limit czasu w ciagu ktorego podajemy dwa impulsy.
}

void loop()
{
  button1.Update();
  static uint32_t Tims = millis();


if (button1.clicks != 0) LEDfunction = button1.clicks;
if(button1.clicks == 2) ledState = !ledState;
if(button1.clicks == 2) ledState2 = !ledState;
Tims=millis();
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);


if(millis()- Tims >= 5000){ // 5sekund do wyłączenia
Tims =millis();
ledState = LOW;
ledState2 = LOW;
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
}
}
Poprawiłem skompilował się, ale diody nie gasną po 5 s
 
Odpowiedź
#8
A może pokaż jak masz podłączone diody bo źle chyba przewidziałem że do masy lub funkcja bution się nie zeruje
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#9
Na płytce jedna nóżka diody jest na stałe podłączona do masy, a druga przez opornik do pinu Atmegi, stan wysoki z Atmegi włącza diodę.
Próbowałem za nic nie mogę zmusić ich do zgaszenia po określonym czasie Sad
 
Odpowiedź
#10
Zobacz teraz

#include "ClickButton.h"
const int ledGreen = 12;
const int ledRed = 13;
int ledState = 0;
int ledState2 = 0;
const int buttonPin1 = 8; // przycisk
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
int LEDfunction = 0;

uint32_t Tims = millis();

void setup()
{
pinMode(ledGreen,OUTPUT);
pinMode(ledRed,OUTPUT);
button1.multiclickTime = 5000; // Limit czasu w ciagu ktorego podajemy dwa impulsy.
}

void loop()
{
button1.Update();



if (button1.clicks != 0) LEDfunction = button1.clicks;
if(button1.clicks == 2) ledState = !ledState;
if(button1.clicks == 2) ledState2 = !ledState;
Tims=millis();
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);


if(millis()- Tims >= 5000){ // 5sekund do wyłączenia
Tims =millis();
ledState = LOW;
ledState2 = LOW;
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
}
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości