[Anfänger fragt] Werte eingeben und speichern.


hallo zusammen,

zunächst erstmal sorry für's neue thema. ich habe echt viel gestöbert aber entweder nicht das passende gefunden, oder daraus einfach nicht schlau geworden. meine programmierkentnisse reichen leider nicht weit über den grundkurs informatik in der schule hinaus.

was ich möchte:
ich möchte gerne ein programm betreiben, welches kontinuierlich eine temperatur überwacht und beim Überschreiten einer grenztemperatur eine aktion durchführt. zusätzlich dazu sollen werte wie die grenztemperatur über taster eingegeben werden können, die später im eeprom gespeichert werden.

ich habe bereits die lcdmenulib gefunden, jedoch steht da, dass diese nicht mit einem grafik-display funktioniert. ich verwende später allerdings das nokia 5110 display.

wo ist mein problem:
zunächst einmal habe ich ein wenig meine schwierigkeiten mit der loop-routine des arduino. um die temperatur kontinuiertlich zu überwachen mag diese sehr nützlich sein. um eine grenztemperatur oder einen anderen parameter einzugeben, scheint sie mir jedoch irgendwie hinterlich, sodass ich aus ihr ausbrechen möchte (z.b. mittels eines schalters). ich würde mir wünschen, von euch ein paar tipps zu bekommen, und vorallem wie ich es besser machen könnte. ich habe einmal beigefügt, ich mir bisher ausgedacht habe. ich bin jedoch irgendwie mehr als unzufrieden. das ganze rumgehüpfe mit den goto-befehlen gefällt mir nicht, ebenso wie eigentlich der ganze quellcode. :-[

der hardware-aufbau:


der quellcode:
code: [select]

double tgrenz = 0;
double tpause = 0;

void setup() {
serial.begin(9600);
}


void loop() {
  if (digitalread(1)==high){ //wippschalter umgelegt
  serial.println("einstellungen:");
    delay (500);
    grenztemperatur:
    serial.println("grenztemperatur");
    delay(500);
    abfrage:
    if (digitalread(3)==high){ //rechter taster gedrückt
      settgrenz();}
    if (digitalread(2)==high){ //linker taster gedrückt
      serial.println("pausenzeit");
      delay(500);
      goto abfrage2;
    }
    if (digitalread(3)==low && digitalread(2)==low && digitalread(1)==high){
    goto abfrage;
    }
    abfrage2:
    if (digitalread(3)==high){
      settpause();}
    if (digitalread(3)==low && digitalread(2)==low && digitalread(1)==high){
      goto abfrage2;} else { if (digitalread(1)==high){goto grenztemperatur;}}
  } else {
  serial.println("normaler modus");
  delay(1000);
  }
}

void settgrenz (){
serial.println("bitte grenztemperatur eingeben: ");
    delay(1000);
    do
{
      if (digitalread(3)==high){
      tgrenz = tgrenz + 0.5;
              serial.println(tgrenz);
              delay(300);
            }
      if (digitalread(2)==high){
      tgrenz = tgrenz - 0.5;
              serial.println(tgrenz);
              delay(300);
            }
} while (digitalread(1)==high);
}

void settpause () {
serial.println("bitte pausenzeit eingeben: ");
    delay(1000);
    do
{
      if (digitalread(3)==high){
      tpause = tpause + 1;
              serial.println(tpause);
              delay(300);
            }
      if (digitalread(2)==high){
      tpause = tpause - 1;
              serial.println(tpause);
              delay(300);
            }
} while (digitalread(1)==high);
}


"normaler modus" dient hier als platzhalter für die spätere temperaturüberwachung. mittels des schiebeschalters soll aus der loopschleife ausgebrochen werden um werte eingeben zu können. es erscheint die grenztemperatur. durch drücken des rechten tasters kann diese verändert werden. durch drücken des linken tasters kommt man zur nächsten einstellung, der pausenzeit. durch drücken des rechten tasters kann diese verändert werden. durch drücken des linken tasters gelangt man wieder zur grenztemperatur. wird der schalter wieder umgelegt, kehrt man in den normalen modus zurück.

ich weiß, das ist alles sehr unelegant und unübersichtlich. daher erhoffe ich mir hier ein paar tipps und konkrete verbesserungsvorschläge. :)

wo auch immer du das goto aufgeschnappt hast, dass gehört in fast allen zu der schlechtesten programmiertechnik! der sketch ist jetzt schon dadurch relativ kompliziert zu lesen.

schreibe das erst einmal um. mit if und switch-anweisungen.


Arduino Forum > International > Deutsch (Moderator: uwefed) > [Anfänger fragt] Werte eingeben und speichern.


arduino

Comments