27-12-2017, 22:48
Witam wszystkich. Proszę o pomoc, jakich poleceń powinienem użyć aby załączyć przekaźnik na np 30s ( w sumie z tym poradzę ale tylko pod warunkiem że, w ciagu np 5s wcisnę przełącznik 3 razy.
Ocena wątku:
hmm sam nie wiem:) licznik impulsów
|
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
}
}
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);
}