Hallo Rolf, äh meine natürlich Hardest,
erst einmal ein herzliches Willkommen im Forum.
Vll ist es aber doch mein Code... wer ihn mal anguggen will
anguggen hab ich getan.
Die while()-Geschichte habt ihr ja schon zusammenbekommen.
Die 'spinnerten Momente', ja da liegst du richtig, es ist dein main()-Programm, welches das Problem erzeugt. Die Hardware können wir bestimmt ausschliessen.
Das main() läuft bei dir einmal von oben nach unten durch. Startet zwischendurch deine Funktionen und endet unten bei der }.
Das ist nicht gut, da die CPU dann Langeweile bekommt und ein bisschen rumspinnt.
2 Möglichkeiten führen zu einer Besserung.
1) Dein main() wird genau ein mal durchlaufen:
Code:
int main(void)
{
Init();
//Ab hier beginnt Rolf zu "Leben"
.
.
//miau
RWARD();
Msleep(1000);
STOP();
while (1); // <<<<<------ Hier wird die CPU geparkt. KOMA-Zustand
// Wiederbeleben von Rolf nur noch mit aus- und einschalten moeglich.
return 0; // Sieht ueberfluessig aus, verhindert aber ein waring beim Compiler.
}
2) Oder Rolf wird senil und wiederholt immer alles:
Code:
int main(void)
{
Init();
//Ab hier beginnt Rolf zu "Leben"
//Morgenmassage senden
SerPrint("\r\nMuah... muss ich aufstehen?\r\n");
while (1) // <<<<---- die Schleife der Wiederholung beginnen ...
{
//Rolf wartet erstmal ab
erwarten(1);
.
.
STOP();
} // <<<<---- ... und natürlich die Schleife zumachen.
while (1); // Das ist zwar nun ueberfluessig, aber schuetzt vor
// 'spinnenden Momenten', falls die Schleife oben durch einen
// Programmfehler verlassen wird.
return 0;
}
Ob dies schon ausreicht alle von dir beschriebenen Sonderlebensfunktionen zu beheben, weiss ich nicht genau. Vor allem die Taster-Funktion hat im Rolf so ihr Eigenleben. Aber ist es nicht genau das was du mit deinem Programm erreichen wolltest?
Ist es so nicht schon fertig? 
Weiter viel Erfolg, vor allem Spaß und viel Geduld mit Rolf
wünscht euch Sternthaler
Lesezeichen