Arduino EEPROM _read_block HOW TO?

OP #4335878
Lesenswert?

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
#4335887
Lesenswert?

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
#4335898
Lesenswert?

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 #4336031
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren