Arduino Polska Forum
hmm sam nie wiem:) licznik impulsów - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: hmm sam nie wiem:) licznik impulsów (/watek-hmm-sam-nie-wiem-licznik-impuls%C3%B3w)

Strony: 1 2


hmm sam nie wiem:) licznik impulsów - tooomek89@gmail.com - 27-12-2017

Witam wszystkich. Proszę o pomoc, jakich poleceń powinienem użyć aby załączyć przekaźnik na np 30s ( w sumie z tym poradzę Smile ale tylko pod warunkiem że, w ciagu np 5s wcisnę przełącznik 3 razy.


RE: hmm sam nie wiem:) licznik impulsów - ANT - 27-12-2017

Pkt 1. Start programu.
Pkt 2. Sprawdź czy minęło 5 sekund? Jeżeli nie to wykonaj punkt 3. Jeżeli tak, punkt 1.
Pkt 3. Czy przełącznik został wciśnięty 3 razy? Jeżeli nie to wykonaj punkt 2. Jeżeli tak, punkt 4.
Pkt 4. Załącz przekaźnik na 30 sekund. Potem wykonaj punkt 1.

Konkretnych poleceń Ci nie podam ponieważ można to rozwiązać programistycznie na wiele sposobów.

Napisz kod i jak coś Ci nie wychodzi wtedy pytaj.
Tak to możemy sobie tylko powróżyć odnośnie rozwiązań problemu Smile

Pozdr.
ANT


RE: hmm sam nie wiem:) licznik impulsów - tooomek89@gmail.com - 28-12-2017

ok coś zacznę kombinować i na pewno bede pytać:0


RE: hmm sam nie wiem:) licznik impulsów - bob35 - 28-12-2017

Poczytaj o warunkach if co to jest jak się zapisuje .


RE: hmm sam nie wiem:) licznik impulsów - tooomek89@gmail.com - 31-12-2017

coś znalazlem w sumie to prawie całość tylko jesli zmieniam czas delay na dłuższy to nie włącza sie dioda

Kod:
const byte btnPin = 4,
         ledPin = 13,
         dbTime = 25; // debounce time
unsigned long timeStart, // debounce timer
            cntStart; //button press timer
const int timeOut = 5000; // 5 seconds
bool btn,
   oldBtn = false, // previous button state
   btnState = true,
   timing = false;
byte cnt = 0; // button press counter

void setup()
{
Serial.begin(9600);
pinMode(btnPin,INPUT_PULLUP);
pinMode(ledPin,OUTPUT);
}
void loop()
{
// first, debounce the button +++++++++++++++
if(digitalRead(btnPin) != btnState)
{
  timeStart = millis();
  btnState ^= 1;
}
if(millis() - timeStart > dbTime)
  btn = !btnState;
// end debounce +++++++++++++++++++++++++++++  
if(btn != oldBtn && btn == true) // if state changed and button is pressed
{
  if(!timing) // if first press, start timer
  {
    cntStart = millis();
    timing = true;
  }
if(++cnt > 2)
  digitalWrite(ledPin,HIGH); // press reset button to clear
delay(20000);
digitalWrite(ledPin, LOW);
Serial.println(cnt);  
}
oldBtn = btn;
if(millis() - cntStart > timeOut)
{
  cnt = 0;
  timing = false;
  cntStart = millis(); // reset counter and timer
}
}



RE: hmm sam nie wiem:) licznik impulsów - tooomek89@gmail.com - 31-12-2017

jeśli delay wynosi 1000 ms to działa ale jeśli już jest 20000ms to nie działa


RE: hmm sam nie wiem:) licznik impulsów - JasQ - 04-01-2018

delay to zło w czystej postaci Smile poniżej masz kod z założeniami jakie podałeś w terminalu masz 3 liczby
czas oczekiwania na 3 naciśnięcia / ilość naciśnięć / czas pracy przekaźnika po załączeniu

program działa liniowo bez pętli i delay więc nie będzie wpływał na inne funkcje programu

Kod:
long cm;
long pm,pm_1;
long licznik;
byte start;
int stat,start_1;
byte czas_oczekiwania = 5;

void setup() {
  Serial.begin(9600);
pinMode(5, INPUT_PULLUP);
}

void loop() {
  
cm = millis()/1000;

if ( digitalRead(5) == HIGH )stat = 0;

if ( digitalRead(5) == LOW and stat == 0 )
    {start ++;stat = 1;pm = cm;}

if ( start > 0 ){
  if ((cm - pm) == 1){licznik ++;pm = cm;}}

if ( licznik > czas_oczekiwania and digitalRead(13) == 0 )
    {licznik = 0;start = 0;}
      
if ( start >= 3 )
    {digitalWrite(13,HIGH);}

if ( digitalRead(13) == HIGH ){
  licznik = 0;start = 0;
  if ((cm - pm_1) > 0){start_1 ++;pm_1 = cm;}
  if ( start_1 > 30 ){digitalWrite(13,LOW);start_1 = 0;}}

Serial.print(licznik);
Serial.print(" / ");
Serial.print(start);
Serial.print(" / ");
Serial.println(start_1);
}

posprzątałem lekko w kodzie


RE: hmm sam nie wiem:) licznik impulsów - tooomek89@gmail.com - 05-01-2018

Po wgraniu podpięta dioda tylko się żarzyła, dodałem pinMode (12, OUTPUT); i zmieniłem {digitalWrite(12,HIGH);} i teraz po 3 wciśnięciach przycisku dioda zapala się z pełną mocą i świeci się cały czas aż wcisnę reset. JasQ bardzo dziękuje za kod i pomógłbyś jeszcze?


RE: hmm sam nie wiem:) licznik impulsów - JasQ - 06-01-2018

Bo na pinie 13 masz diodę na płytce Arduino dlatego dodatkowa Ci tylko jażyła.


RE: hmm sam nie wiem:) licznik impulsów - tooomek89@gmail.com - 07-01-2018

dodaje delay po wlaczeniu diody jednak swieci się cały czas i nie gaśnie