Einstellungen auf dem Arduino per Funkverbindung ändern

Hallo liebes Forum :)

Und zwar habe ich de Frage, ob es möglich ist Einstellungen auf dem Arduino drahtlos (mit entsprechendem Equipment) per Handy oder Computer zu ändern und zu speichern, sodass diese Einstellung beim nächsten Start beibehalten wird ?

Danke schon mal für eure Antworten. LG Moritz

Ja. Wenn du sie im EEPROM speicherst. SD-Karte ist auch eine Möglichkeit wenn vorhanden

SD-Karte würde da eher in Frage kommen, weil der EEPROM relativ schnell den Geist aufgeben würde, aber eine andere Möglichkeit außer der SD-Karte gibt es nicht oder ?

#include <avr/eeprom.h>
#define LED1 3
#define LED2 5
#define LED3 6

typedef struct 
{
  uint8_t init; //0xAA
  uint8_t val1;
  uint8_t val2;
  uint8_t val3;
} SETTINGS;
SETTINGS settings;


void setup(void)
{
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  
  eeprom_read_block((void*)&settings, 0, sizeof(SETTINGS));
  if((settings.init != 0xAA)
  {
    settings.init = 0xAA;
    settings.val1 = 0;
    settings.val2 = 123;
    settings.val3 = 5;
	
    eeprom_write_block((void*)&settings, 0, sizeof(SETTINGS));
  }
}


void loop(void)
{
  analogWrite(LED1, setting.val1);
  analogWrite(LED2, setting.val2);
  analogWrite(LED3, setting.val3);  
}

if((settings.init != 0xAA)

Das ist beabsichtigt. Wenn du einen neuen Sketch hochlädst wird somit nicht dauerhaft neu ins Eeprom geschrieben. Somit wird das nur einmal ausgeführt, egal wie häufig du den Sketch hochlädst.
Was hast du genau vor, warum sollte das Eeprom so schnell den Geist aufgeben?

Das interne EEPROM hat mind. 100.000 Schreibzyklen. Wenn du nicht ständig Sachen schickst und nur Änderungen abspeicherst hält das schon eine Weile.

FRAM ist noch eine Option. Das hat die Geschwindigkeit von SRAM, aber ist nicht-volatil: http://www.elv.de/ic-fm24c04.html Das hat über 10 Milliarden Schreibzyklen. Neuere Typen haben noch mehr.

Serenifly: Das interne EEPROM hat mind. 100.000 Schreibzyklen. Wenn du nicht ständig Sachen schickst und nur Änderungen abspeicherst hält das schon eine Weile.

FRAM ist noch eine Option. Das hat die Geschwindigkeit von SRAM, aber ist nicht-volatil: http://www.elv.de/ic-fm24c04.html Das hat über 10 Milliarden Schreibzyklen. Neuere Typen haben noch mehr.

Das mit den Zyklen wollte ich gerade schreiben, war mir nur nicht sicher, ob die "Garantie"-grenze bei 10k oder 100k lag. :zipper_mouth_face: Hier noch eine Info http://forum.arduino.cc/index.php/topic,29761.0.html

Für das Speichern der Einstellungen somit vollkommen ausreichend.

Wenn es darum geht, dass die Einstellungen vorhanden bleiben, nach dem unverhofft die Spannung weggefallen ist, dann bist du mit der SD-Karte nicht gut dabei.

Denn gerade SD Karten reagieren sehr unangehm auf Spannungsverlust beim Schreiben. Sinnvoller ist es eine kleine USV aufzubauen. Muss nicht großes sein. Gibt davon zB. von Sparkfun und Co genügend Shields. Ob die den Funktionsumfang haben weiß ich nicht.

Aber wenn Spannung wegfällt muss Zeitgleich ein "Schalter" fallen, der auf Batteriebetrieb geht. Dieses solltest du dann mit dem Arduino abfragen. Wenn dass der Fall ist, alle großen Verbraucher deaktivieren und die Daten schreiben.

Bei Relais wäre ein Kondensator zur Pufferung sinnvoll. Bei MOSFETs müsstest du es testen, ob hier ein kleiner Elko bereits ausreicht.

Also ich erkläre mal kurz was hinter der Frage steckt.

Da ich ja dabei bin meinen eigenen Quadrocopter zu entwerfen und zu programmieren bin ich auf die nützliche Idee gekommen Einstellungen des Quadrocopters direkt über das Handy per Funk zu ändern, ohne das man das Teil immer am PC anschließen und den Code ändern muss. Ich kann mir aber sehr gut vorstellen, dass dies häufiger der Fall sein wird weswegen ich mir sorgen um den EEPROM mache.

Vermutlich ist eher dein Handy vom Tippen schrott :stuck_out_tongue_closed_eyes: Für einen solchen Zweck ist das EEprom optimal. Mein Code Snippet passt für den Zweck ebenfalls perfekt.

Sobald dein MCU zum ersten Mal hochfährt, schreibt er einmal die Werte ins Eeprom. Danach geschieht dieses nicht mehr, da settings.init == 0xAA ist.

Wenn du nun Einstellungen machst über dein Handy, bleiben diesen Werte auch bestehen, wenn du ihn mal neu aufspielen musst.

Ok das ist ja super :D

Dann werde ich das doch einfach über den EEPROM machen.