Behouden van laatste deel script bij afsluiten.
8 berichten
• Pagina 1 van 1
- Frankenstein
- Berichten: 4
- Geregistreerd: 25 Apr 2023, 14:05
Behouden van laatste deel script bij afsluiten.
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);
}
}
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
Re: Behouden van laatste deel script bij afsluiten.
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.
Dus ....... laat je magneetje gewoon zitten, dan werkt het programma zoals je wil.
- babbelkwebbel
- Berichten: 68
- Geregistreerd: 21 Apr 2013, 22:48
- Woonplaats: Hoorn
Re: Behouden van laatste deel script bij afsluiten.
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
en bij het opstarten van je bordje lees je de waardes terug.
zie de linkk
https://docs.arduino.cc/learn/programming/eeprom-guide
- Frankenstein
- Berichten: 4
- Geregistreerd: 25 Apr 2023, 14:05
Re: Behouden van laatste deel script bij afsluiten.
Beste #Frits1956
Het magneetje blijft niet bij de Reed, dat wisselt tussen beide reeds.
Het magneetje blijft niet bij de Reed, dat wisselt tussen beide reeds.
- Frankenstein
- Berichten: 4
- Geregistreerd: 25 Apr 2023, 14:05
Re: Behouden van laatste deel script bij afsluiten.
Beste #babbelkwebbel
Ik ga je voorstel vanavond bekijken.
Ik ga je voorstel vanavond bekijken.
Re: Behouden van laatste deel script bij afsluiten.
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.
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.
- sterretjeToo
- Berichten: 62
- Geregistreerd: 05 Feb 2023, 13:30
Re: Behouden van laatste deel script bij afsluiten.
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.
Re: Behouden van laatste deel script bij afsluiten.
je hoeft de stand alleen maar op te slaan als deze verandert is dat spaart de eeprom en tijd
paul deelen
shooter@home.nl
shooter@home.nl
8 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: edenoxueuvod en 6 gasten