Hur man lagrar en momentan knapptryckning som ett menyval (3 / 4 steg)
Steg 3: anmärkningar
Denna skiss visas hur du använder EEPROM slitage utjämning, spara ett litet heltal värdet urval i EEPROM, och sätta en variabel som är kunna span återställs och power ups.
Att trycka på knappen bifogas stift 12 gör ett menyval, används för att bestämma det önskade uppförandet av andra funktioner eller funktioner i skissen. Det markerade värdet kan användas för att tända en lämplig LED eller Visa lämplig text som visar urvalet gjorts. Sen, resten av skissen kan göra vad det val efterlyser.
Markeringen lagras i EEPROM med en slitage-utjämning algoritm så det inte kommer lägga en hel del slitage på någon enstaka bit. Varje gång en urvalsändring görs av knapp, ändras bara en bit av EEPROM. 1,6 miljoner knapptryckningar kan föras in i de 4 byte av EEPROM-minne används för att lagra markeringsstatusen innan det fått 100.000 skriver för någon en cell överskrids.
Eftersom algoritmen för att lagra aktuella urval värde håller rensa bitar tills den aktuella markeringen representeras ordentligt, spelar vanligtvis rensa endast en bit, det ingen roll om EEPROM initierades till alla värden i synnerhet. Det kommer automatiskt justera och initiera EEPROM byte som behövs.
Denna skiss använder EEPROMex.h för att behandlingen/uppdatera EEPROM. EEPROM.setMaxAllowedWrites är en funktion av EEPROMex.h som är användbara under utveckling och felsökning, att hålla dig från att oavsiktligt kodar en skenande sekvens av skriver och bära ut din Arduino EEPROM minne inom ett par minuter. För produktionsanvändning kommer du vill inaktivera gränsen. EEPROMex.h i dokumentationen för detaljer. Länken till få EEPROMex.h bibliotek är:
http://Playground.Arduino.cc/Code/EEPROMex
Och den här artikeln beskrivs hur du installerar bibliotek:
https://www.Arduino.cc/en/guide/libraries
Jag visar också i denna demo skiss hur man gör flera saker i en slinga utan att blockera och utan förseningar. Det finns många artiklar på webben och i arduino.cc forumet för att göra flera saker samtidigt och looping utan förseningar.
Alla ATmega328P - eller ATmega32U4-baserade Arduino, såsom Uno Pro Mini, Leonardo, Pro Micro, etc., bör kunna använda skissen och lagra till den inbyggda EEPROM. För Pro mikro, som inte har stift 11, 12 och 13 tog fram till huvudet stift, justera skissen för att använda andra stift. PIN 17 i Pro mikro är RXLED och kan användas som en ombord LED, ersätta stift 13. RXLED i Pro mikro är på när produktionen stift går låg, medan stift 13 ledde på UNO är på när produktionen stift går hög. Så, för att se LED glöden dim i Pro mikro du skulle behöva vända pulse bredd så PIN-koden är hög för längre tid än det är låg. Det gör att du kan ändra behandlingen av pin 17, i 2 platser i skissen, från
om (digitalRead(17))
till
om (! digitalRead(17))
Ytterligare läsning: