uwefed:
Das kannst Du nicht mit einer Pause realisieren. Da mußt Du kontrollieren ob der Zustand des Pins sich ändert und dann ein bzw Ausschalten.
Da die while schleife nur dann aktiv ist wenn der Knopf gedrückt ist , läuft der code doch normal weiter wenn der knopf wieder losgelassen wird
uwefed:
Arbeite mit indizierten Variablen (arrays) und For schleifen. Ein solcher Spaghetticode ist ein Grauß.
Arrays statt EEPROM kann ich versuchen. Erste versuche haben aber weniger erfolg erzielt als der EEPROM
Und ich wüsste nicht inwiefern die for schleife mir helfen soll? Da sehe ich die while schleife doch als hilfreicher
zb
while ( taster1 = LOW) {
// code zum abarbeiten
}
uwefed:
Wie schon beschrieben ist der Fehler daß du 2 Byte ins EEProm schreibst aber die Adresse nur um 1 Byte verschiebst. Nimm entweder die Funktion, die 1 Byte ins EEprom schreibt, Lösche die Eepromsache ganz oder verwende Adressen die um 2Byte außeinanderliegen.
Vieleicht solltest Du die Basisgrundlagen lernen.
Wenn der Zustand denn abgespeichert würde. Beim Einschalten wird das EEprom ja als erstes gelöscht.
Grüße Uwe
Das stimmt so nicht, es sei denn eine 0 bzw eine 1 belegt 2 bytes. im change() wird nämlich auf die gegebene adresse entweder die 1 oder die 0 geschrieben. so sollte eigentlich immer 1 byte belegt werden
Um den Sinn der Projektes vielleicht etwas verständlicher zu machen:
Wenn man einen Taster drückt soll sich der Status der LED ändern ( von an zu aus und umgekehrt) und eine Serielle information übermittelt werden.
Um den akuellen status zu speichern habe ich eben den EEPROM genutzt um zu speichern ob der Status gerade an oder aus ist (1 und 0 die abwechselnd gespeichert werden)
change() ist hierfür meine Wechselschaltung die eben aus dem EEPROM den gepeicherten Zustand ausliest und umändert, die LED umschaltet und das Passende Serielle signal aussendet
Doc_Arduino:
Hallo,
ich bin mal so frei und gebe dazu einen Democode raus. Nutzt die Anfänger freundliche Bounce2 Lib. Ich hoffe Hitmare kann das nachvollziehen, dann dürfte eine Erweiterung auf 8 Taster/Schalter keine Probleme bereiten.
GitHub - thomasfredericks/Bounce2: Debouncing library for Arduino and Wiring
/*
Doc_Arduino - german Arduino Forum
IDE 1.8.3
Arduino Mega2560
31.08.2017
2 Taster mit Tastfunktion
2 Taster mit Schaltfunktion
*/
#include <Bounce2.h>
const byte Taster_1_Pin = 2; // Taster
const byte Taster_2_Pin = 3; //
const byte Taster_3_Pin = 4; //
const byte Taster_4_Pin = 5; //
const byte LED_1_Pin = 30;
const byte LED_2_Pin = 31;
const byte LED_3_Pin = 32;
const byte LED_4_Pin = 33;
byte stateTaster1 = HIGH; // Ausgangszustand
byte stateTaster2 = HIGH; //
byte stateTaster3 = LOW; //
byte stateTaster4 = LOW; //
Bounce debouncer1 = Bounce(); // Instantiate a Bounce object 1
Bounce debouncer2 = Bounce(); //
Bounce debouncer3 = Bounce(); //
Bounce debouncer4 = Bounce(); //
void setup() {
pinMode(Taster_1_Pin, INPUT_PULLUP);
pinMode(Taster_2_Pin, INPUT_PULLUP);
pinMode(Taster_3_Pin, INPUT_PULLUP);
pinMode(Taster_4_Pin, INPUT_PULLUP);
debouncer1.attach(Taster_1_Pin); debouncer1.interval(30); // setup der Bounce Instanzen
debouncer2.attach(Taster_2_Pin); debouncer2.interval(30);
debouncer3.attach(Taster_3_Pin); debouncer3.interval(30);
debouncer4.attach(Taster_4_Pin); debouncer4.interval(30);
pinMode(LED_1_Pin, OUTPUT);
pinMode(LED_2_Pin, OUTPUT);
pinMode(LED_3_Pin, OUTPUT);
pinMode(LED_4_Pin, OUTPUT);
}
void loop() {
update_Inputs();
update_Outputs();
} // loop Ende
// ****** Funktionen ******* //
void update_Inputs ()
{
debouncer1.update();
debouncer2.update();
debouncer3.update();
debouncer4.update();
// Taster 1
stateTaster1 = debouncer1.read();
// Taster 2
stateTaster2 = debouncer2.read();
// Schalter 3
if ( debouncer3.fell() ) {
stateTaster3 = !stateTaster3; // toggle state
}
// Schalter 4
if ( debouncer4.fell() ) {
stateTaster4 = !stateTaster4; // toggle state
}
}
void update_Outputs ()
{
digitalWrite(LED_1_Pin, !stateTaster1);
digitalWrite(LED_2_Pin, !stateTaster2);
digitalWrite(LED_3_Pin, stateTaster3);
digitalWrite(LED_4_Pin, stateTaster4);
}
Leider versteh ich nicht wie mir die Bounce Bibliothek helfen soll, noch wie sie funktioniert und anwendbar ist
GitHub - thomasfredericks/Bounce2: Debouncing library for Arduino and Wiring <- Das hier ist auch nicht wirklich hilfreich für mich
MicroBahner:
Bei aller Liebe - aber geht's bitteschön noch umständlicher? Diese Lib verbrennt für jeden Taster 8! der auf den AtMegas kostbaren RAM-Bytes. Es reicht völlig aus, am Anfang des loops alle Tastereingänge in ihre Statusvariablen einzulesen, und per millis() dafür zu sorgen, dass das nur alle 10-20ms (= Entprellzeit) gemacht wird.
const unsigned long prellZeit = 20;
unsigned long lastUpdate ;
bool stateTaster1, stateTaster2;
const byte taster1Pin = 4;
const byte taster2Pin = 5;
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
if ( millis() - lastUpdate > prellZeit ) {
lastUpdate = millis();
// Taster 1
stateTaster1 = digitalRead( taster1Pin );
// Taster 2
stateTaster2 = digitalRead( taster2Pin );
}
// Taster verarbeiten
}
Bei vielen Tastern empfiehlt sich - wie hier schon erwähnt, das ganz über Arrays und eine Forschleife zu machen.
Hab die Variante versucht anstatt der while schleife und leider funktioniert es nicht wie gewollt. Die Schaltung "flattert" bei 20ms wartezeit (schaltet die LED ein und aus bei der drückzeit). Werde es man mit dem Zehnfachen oder mehr versuchen