relais als ingang

algemene C code
Berichten: 27
Geregistreerd: 06 Sep 2017, 23:51

relais als ingang

Berichtdoor robmulder » 24 Nov 2019, 19:26

hallo daar .


ik ben al een tijdje aan het proberen , maar het wil nog niet lukken
wat is de bedoeling , ik heb in de de cv ketel over de pomp een relais gezet, nu wil ik de vloerverwarming pomp schakelen door middel van arduino
maar daar komt hij het relais contact is geen puls maar een constante (bi stabiel) en deze komt op een ingang , nu moet de ingang een Debounce krijgen.
tot mij verbazing wil dit niet goed lukken.
kan iemand mij op weg helpen?





Code: Alles selecteren
const int buttonPin = 50;    // the number of the pushbutton pin
const int ledPin = 43;      // the number of the LED pin

// Variables will change:
int ledState = HIGH;         // the current state of the output pin
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin

// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);

 
}

void loop() {
  // read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);

  // check to see if you just pressed the button
  // (i.e. the input went from LOW to HIGH), and you've waited long enough
  // since the last press to ignore any noise:

  // If the switch changed, due to noise or pressing:
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer than the debounce
    // delay, so take it as the actual current state:

    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;

      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {
       
      }
    }
  }

  // set the LED:
  digitalWrite(ledPin,HIGH );

 
}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: relais als ingang

Berichtdoor shooter » 26 Nov 2019, 13:13

kijk eens naar lastbuttonstate die word nergens aangezet
paul deelen
shooter@home.nl

Berichten: 27
Geregistreerd: 06 Sep 2017, 23:51

Re: relais als ingang

Berichtdoor robmulder » 27 Nov 2019, 00:25

Hoi Paul, moet ik dan de lastbuttonstate op High zetten om hem actief te maken?, de code heb ik van internet geplukt en een klein beetje aangepast. dact dat ik de togle funtie er uit kon halen , maar dan reageert de boel niet meer.
ik snap dat als ik het relais contact aanbied (potentiaal) dan komt er op de ingang veel ruis binnen .

ga er mee aan de slag Thanks

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: relais als ingang

Berichtdoor Koepel » 27 Nov 2019, 15:31

Waar heb je de code vandaan ?
Het lijkt veel op dit: https://arduinoforum.nl/viewtopic.php?f=9&t=2788.
Dat heb ik opgegeven, omdat ik niet begreep wat er moest gebeuren :cry:

Jouw beschrijving van de CV ketel begrijp ik ook niet, maar daar gaat het niet om.
Je hebt blijkbaar nog een vrij contact op een relais, en je wilt niet de aansturing van het relais meten (dat is niet zo moeilijk met een opto-coupler en een weerstand) maar je wilt naar het contact kijken. Dat dendert, dus daar wil je iets voor.

Je zou kunnen kijken of de ingang van de Arduino gedurende 50 ms stabiel is, en dan pas dat overnemen. Dat kan met millis(), maar dat werkt nu niet vanwege het ontbreken van de lastButtonState zetten zoals shooter al schreef.

De tweede stap is wat je daarmee wilt doen. Ik begrijp niet wat je met een toggle bedoelt, zat er een toggle in de oorspronkelijke code ?

Je zou een library kunnen gebruiken, zoals Bounce2: https://github.com/thomasfredericks/Bounce2.

Je zou het ook zelf kunnen schrijven. Dat is het nodig om te kijken naar een verandering van de ingang. Daar is het "State Change Detection" voorbeeld voor: https://www.arduino.cc/en/Tutorial/StateChangeDetection.
Ik zou de variabelen 'buttonState' en 'lastButtonState' van dat voorbeeld aanhouden. Dan zou ik voor de uiteindelijke waarde een naam geven zoals: "FilteredButtonState", "buttonStateOntdendert", "debouncedButtonState", of zo iets.

Ik voeg graag een boolean variabele toe, om de millis() timer uit en aan te zetten. Bij jouw sketch gaat het na 50 dagen verkeerd.

Wil je de led aanzetten als het relais aan is ?
Stel dat je het moment wilt weten dat de "debouncedButtonState" van waarde wijzigt. Dan heb je misschien een tweede "State Change Detection" nodig, en dan komt er ook een "lastDebouncedButtonState" bij. Dit weet ik nog niet zeker, zover heb ik nog niet nagedacht.

Uiteindelijk krijg je dan een combinatie van de "State Change Detection" met een single shot timer (https://github.com/Koepel/Fun_with_millis/blob/master/millis_single_delay.ino).

Dit is allemaal wel leuk en aardig, maar de allerbelangrijkste vraag is: Wat is je pullup weerstand ?

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: relais als ingang

Berichtdoor shooter » 27 Nov 2019, 22:38

lees je eigen programma eens , en probeer het te snappen,vooral wat lastbuttonstate is en waar wordt die dan gezet.
paul deelen
shooter@home.nl

Berichten: 27
Geregistreerd: 06 Sep 2017, 23:51

Re: relais als ingang

Berichtdoor robmulder » 28 Nov 2019, 23:03

nou er staat mij nog veel uitzoek werk te doen ,maar leerzaam thans heren .
al het werk zien jullie het

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten