Arduino EEPROM _read_block HOW TO?

OP #4335878
Servus,

ich möchte einen 16Bit Zahlenwert in den EEPROM des Arduino MEGAS 
schreiben.

das mach ich wie folgt:
1
void loop() {
2
  // put your main code here, to run repeatedly:
3
  
4
  if(Serial.available()){
5
    int input = Serial.read();
6
 
7
 eeprom_write_block(0,&input,sizeof(2));
8
    delay(1000); 
9
 }
10
}

nach dem  delay soll er den gespeicherten  Wert wieder zurück an die 
UART senden.
kann mir wer beim auslesen helfen?

ich  verwende die AVR/EEPROM libary.

Danke im Voraus!

Gruss
Dani
Daniel R. schrieb:
> Servus,
>
> ich möchte einen 16Bit Zahlenwert in den EEPROM des Arduino MEGAS
> schreiben.
>
> das mach ich wie folgt:
>
>
1
void loop() {
2
>   // put your main code here, to run repeatedly:
3
> 
4
>   if(Serial.available()){
5
>     int input = Serial.read();
6
> 
7
>  eeprom_write_block(0,&input,sizeof(2));
8
>     delay(1000);
9
>  }
10
> }
11
>
>
> nach dem  delay soll er den gespeicherten  Wert wieder zurück an die
> UART senden.
> kann mir wer beim auslesen helfen?
>

  int output
  eeprom_read_block(0,&output,sizeof(2));


anstatt sizeof(2) schreibst du besser sizeof(int) oder noch besser 
sizeof(output).

Für 16 Bit Einheiten gibt es dann auch noch die speziellen Funktionen
eeprom_read_word ( eeprom Adresse);
eepom_write_word ( eeprom Adresse, Wert);


https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM
Hmmm.
Im Zusammenhang mit deiner Konfigurationsfrage im PC-Programmierung 
Bereich

Bist du sicher, dass du das
1
     int input = Serial.read();
so machen möchtest?

Wenn du am PC den Text "345" wegschickst, dann kriegst du hier nicht 
einen int mit dem Wert 345 heraus. Sondern du kriegst nacheinander die 
ASCII Codes des Buchstaben '3', '4' und '5'. Als Zahlenwerte dann eben 
51 (hex 0x33), 52 (hex 0x34) und 53 (hex 0x35).

Entweder du setzt die einzelnen Zeichen dann selbst zusammen oder du 
benutzt die Serial Memberfunktion parseInt

https://www.arduino.cc/en/Reference/Serial
OP
Vielen Dank für die hilfreichen Antworten!

funktioniert wunderbar bzw.  hat....

wollt den Wert einem Delay übergeben und seit dem  bekomme ich im 
Terminal immer eine Null zurück-Warum?
1
#include <avr/eeprom.h>
2

3
int timerwert=0;
4

5
void setup() {
6
  // put your setup code here, to run once:
7
//eeprom_read_block((void*)&settings, (void*)0, sizeof(settings));
8
Serial.begin(115200);
9
pinMode(13,OUTPUT);
10
}
11

12
void loop() {
13
  
14
  if(Serial.available()){
15
   
16
   
17
   int input = Serial.parseInt();
18
   if(Serial.read()=='\n'){
19
    input = input;
20
    eeprom_write_word(0,input);
21
    delay(1000);  
22
    word output=  eeprom_read_word(0);
23
    output = timerwert;
24
  
25
    Serial.print(output);
26
    Serial.println();
27
    
28
    }
29
   
30
  }
31
 delay(timerwert);
32
  digitalWrite(13,HIGH);
33
  delay(timerwert);
34
  digitalWrite(13,LOW);
35
  
36
  
37
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.