Go Down

Topic: Code verbessern? (Read 804 times) previous topic - next topic

herot

Hallo,

Ich habe eine Funktion geschrieben,die prüfen soll, wie lange es dauert, bis ein Magnet eine Umdrehung macht. Falls es länger als sechs Sekunden dauert, soll es *timeend als eine große Zahl definieren so dass die Geschwindigkeit als Null angezeigt wird.  Seitdem ich die if statements eingefügt habe, stimmen die Geschwindigkeiten nicht mehr, die angezeigt werden. Z.B. fahre ich nur 50km/h und es zeigt 200km/h an. Gibt es irgendwie eine andere Art, in der ich die Funktion schreiben könnte?
Der Code:
Code: [Select]
void tripuino::rech(unsigned long *timestart, unsigned long *timeend, int *stehen){
 unsigned long check;
 check = millis();
 while (digitalRead(3) == HIGH){
   if((millis() - check) > 6000){
     *timestart = 0;
     *timeend = 40000;
     *stehen = 0;
     break;
   }
   }
   *timestart = millis();
   while (digitalRead(3) == LOW){
     if((millis() - check) > 6000){
     *timestart = 0;
     *timeend = 40000;
     *stehen = 0;
     break;
   }
   }
   while (digitalRead(3) == HIGH){
     if((millis() - check) > 6000){
     *timestart = 0;
     *timeend = 40000;
     *stehen = 0;
     break;
   }
   }
   *timeend = millis();
}



Gibt es außerdem noch eine Art, wie man die loop() Funktion von vorne anfangen könnte, nachdem ein interrupt passiert? Ich habe ein interrupt der die LCD Anzeige ändern soll immer wenn ein Knopf gedrückt wird. Leider muss ich sechs Sekunden warten, bis das passiert wegen meiner rechen() Funktion. Ich dachte, dass ich vielleicht so etwas mit noch einem interrupt machen könnte, aber ich habe keine Ahnung wie so etwas geht.

Falls ihr meinen gesamten Code sehen möchtet, hier ist er: http://ubuntuone.com/p/W4D/
und eine Übersicht von dem, was ich bisher gemacht habe: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1293063615/1#1

Guten Rutsch,

Firestork

Go Up