Behouden van laatste deel script bij afsluiten.

Arduino specifieke Software
Berichten: 4
Geregistreerd: 25 Apr 2023, 14:05

Behouden van laatste deel script bij afsluiten.

Berichtdoor Frankenstein » 28 Apr 2023, 12:35

Beste mensen (m/v/d),
Ben nieuw op deze site en (mega)digibeet. En derhalve een vraag.

Ik heb wat zitten oefenen met de IDE software en heb een kleine script geschreven voor 2 leds en 2 reed-sensoren.
De bedoeling is dat deze afwisselend oplichten.
Dat is allemaal gelukt, dus dat is niet het probleem.
Wat ik echter zou willen is dat de laatste stand/positie van de led wordt opgeslagen.
Dus dat bij het opstarten deze stand automatisch wordt geactiveerd.
Wie kan mij hierbij helpen en/of suggestie geven?
Bijgaand het script.

Script wissel 2 Led door twee Reed-sensoren.

int Ledpin12output = 12 ; // pin 12 voor digitale output LED
int Ledpin13output = 13 ; // pin 13 voor digitale output LED
int Reedsensor1 = 2; // pin 2 REED sensor1 digitale input
int Reedsensor2 = 3; // pin 3 REED sensor2 digitale input
int Value1 ;
int Value2 ;
void setup ()
{
pinMode (Ledpin12output, OUTPUT) ; // Defineer digitale output (LED is verbonden aan pin 12)
pinMode (Ledpin13output, OUTPUT) ; // Defineer digitale output (LED is verbonden aan pin 13)
pinMode (Reedsensor1, INPUT) ; // Defineer digitale input Reedsensor1 is verbonden aan pin 2
pinMode (Reedsensor2, INPUT) ; // Defineer digitale input Reedsensor2 is verbonden aan pin 3
}
void loop ()
{
Value1 = digitalRead (Reedsensor1) ; // Lees de waarde digitale input op pin 2
Value2 = digitalRead (Reedsensor2) ; // Lees de waarde digitale input op pin 3

if (Value1 == HIGH) // Als reedsensor1 actief is (HIGH), zet led op pin12 aan
{
digitalWrite (Ledpin12output, HIGH);
digitalWrite (Ledpin13output, LOW);
}

if (Value2 == HIGH) // Als reedsensor2 actief is (HIGH), zet led op pin13 aan
{

digitalWrite (Ledpin12output, LOW);
digitalWrite (Ledpin13output, HIGH);
}
}

Advertisement

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Behouden van laatste deel script bij afsluiten.

Berichtdoor Frits1956 » 29 Apr 2023, 19:03

Als je reedcontact geactiveerd blijft start je programma toch gewoon met de led die als laatste hoog was.
Dus ....... laat je magneetje gewoon zitten, dan werkt het programma zoals je wil.

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Behouden van laatste deel script bij afsluiten.

Berichtdoor babbelkwebbel » 29 Apr 2023, 21:19

misschien een idee om de EEprom van je Arduino bord te gebruiken, hier kan je dan de laatste stand van je reed switches dan wel led status in weg schrijven.
en bij het opstarten van je bordje lees je de waardes terug.

zie de linkk
https://docs.arduino.cc/learn/programming/eeprom-guide

Berichten: 4
Geregistreerd: 25 Apr 2023, 14:05

Re: Behouden van laatste deel script bij afsluiten.

Berichtdoor Frankenstein » 30 Apr 2023, 11:29

Beste #Frits1956

Het magneetje blijft niet bij de Reed, dat wisselt tussen beide reeds.

Berichten: 4
Geregistreerd: 25 Apr 2023, 14:05

Re: Behouden van laatste deel script bij afsluiten.

Berichtdoor Frankenstein » 30 Apr 2023, 11:32

Beste #babbelkwebbel

Ik ga je voorstel vanavond bekijken.

Berichten: 9
Geregistreerd: 19 Apr 2023, 16:55

Re: Behouden van laatste deel script bij afsluiten.

Berichtdoor Breeze360 » 01 Mei 2023, 10:49

Om de laatste stand van de LED op te slaan, kun je gebruik maken van de EEPROM van de Arduino. De EEPROM is een klein stukje geheugen dat gebruikt kan worden om gegevens op te slaan die behouden blijven wanneer de stroom wordt uitgeschakeld.

Hieronder is een aangepaste versie van je code met de EEPROM-functionaliteit toegevoegd:

#include <EEPROM.h>

int Ledpin12output = 12 ; // pin 12 voor digitale output LED
int Ledpin13output = 13 ; // pin 13 voor digitale output LED
int Reedsensor1 = 2; // pin 2 REED sensor1 digitale input
int Reedsensor2 = 3; // pin 3 REED sensor2 digitale input
int Value1 ;
int Value2 ;
int lastLedState = 0;

void setup ()
{
pinMode (Ledpin12output, OUTPUT) ; // Defineer digitale output (LED is verbonden aan pin 12)
pinMode (Ledpin13output, OUTPUT) ; // Defineer digitale output (LED is verbonden aan pin 13)
pinMode (Reedsensor1, INPUT) ; // Defineer digitale input Reedsensor1 is verbonden aan pin 2
pinMode (Reedsensor2, INPUT) ; // Defineer digitale input Reedsensor2 is verbonden aan pin 3

// Lees de laatste LED-status uit de EEPROM
lastLedState = EEPROM.read(0);

// Controleer of de laatste LED-status geldig is
if (lastLedState == 1) {
digitalWrite(Ledpin12output, HIGH);
digitalWrite(Ledpin13output, LOW);
} else if (lastLedState == 2) {
digitalWrite(Ledpin12output, LOW);
digitalWrite(Ledpin13output, HIGH);
} else {
// Als de laatste LED-status ongeldig is, zet beide LEDs uit
digitalWrite(Ledpin12output, LOW);
digitalWrite(Ledpin13output, LOW);
}
}

void loop ()
{
Value1 = digitalRead (Reedsensor1) ; // Lees de waarde digitale input op pin 2
Value2 = digitalRead (Reedsensor2) ; // Lees de waarde digitale input op pin 3

if (Value1 == HIGH) // Als reedsensor1 actief is (HIGH), zet led op pin12 aan
{
digitalWrite (Ledpin12output, HIGH);
digitalWrite (Ledpin13output, LOW);
lastLedState = 1;
}

if (Value2 == HIGH) // Als reedsensor2 actief is (HIGH), zet led op pin13 aan
{
digitalWrite (Ledpin12output, LOW);
digitalWrite (Ledpin13output, HIGH);
lastLedState = 2;
}

// Sla de huidige LED-status op in de EEPROM
EEPROM.write(0, lastLedState);
}

De variabele lastLedState wordt gebruikt om de laatste stand van de LED op te slaan. Bij het opstarten wordt deze waarde gelezen uit de EEPROM en wordt de LED dienovereenkomstig aangezet. In de loop wordt de waarde van lastLedState bijgewerkt wanneer de LED wordt ingeschakeld en wordt deze waarde opgeslagen in de EEPROM om de laatste stand van de LED te behouden.

Berichten: 62
Geregistreerd: 05 Feb 2023, 13:30

Re: Behouden van laatste deel script bij afsluiten.

Berichtdoor sterretjeToo » 21 Mei 2023, 16:21

Breeze360 schreef:
Code: Alles selecteren
// Sla de huidige LED-status op in de EEPROM
EEPROM.write(0, lastLedState);


Dat zal de levensduur van de specifieke EEPROM cell niet ten goede komen. Verder is lastLedState een 16-bit variabele en EEPROM.write() schrijft slechts één byte. Het is veel beter om EEPROM.put() te gebruiken voor beide redenen; EEPROM.put() kijkt eerst of de data veranderd is voordat er besloten wordt al dan niet naar de EEPROM te schrijven.

Verder ligt het eraan hoe vaak er veranderde gegevens naar de EEPROM geschreven worden. De specificatie van een 328P zegt dat een EEPROM cel 100.000 keer geschreven kan worden. En daar ben je zo aan met de gepresenteerde code.

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

Re: Behouden van laatste deel script bij afsluiten.

Berichtdoor shooter » 22 Mei 2023, 09:32

je hoeft de stand alleen maar op te slaan als deze verandert is dat spaart de eeprom en tijd
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: pacilates en 15 gasten