Gestaltung / Aufbau Sketch Verbesserungen? :)

Guten Abend allerseits,

nur eine kleine Frage zu Gestaltung des Sketch's.
Gibt es Verbesserungsvorschläge zur Skruktur zu verwendeten Datentypen?

Es soll noch an Funktionen wie z.B. einer Top 5 Bestenliste erweitert werden,
welche auf Knopfdruck ausgegeben wird.
Eine Teilnehmernummer soll hinzugefügt werden
Taster um Zeit zu verwerfen...

Vielen Dank :slight_smile:
Grillgemüse

/* erstellt 15.11.2017 Version: 0.1
********Beschreibung********
Sketch zur Rundenzeiterfassung
...
****************************
*/

//Ein / Ausgaenge
const int8_t t_start = 2; //NC
const int8_t t_stop = 3; //NC
const int8_t leuchte = 4; //Zeigt aktive Runde an

//Variablen
float rundenzeit = 0;
float print_zeit = 0;
unsigned long akt_ms = 0;
unsigned long start_ms = 0;
unsigned long stop_ms = 0;
unsigned long takt_ms = 0;
uint16_t rundenzaehler = 0;
bool taktmerker = 0;
bool runde = 0;
const int16_t takt_zeit = 500; //Intervall alle 500ms
const int16_t min_zeit = 10000;


void setup()
{
  Serial.begin(19200);
  pinMode(t_start, INPUT);
  pinMode(t_stop, INPUT);
  pinMode(leuchte, OUTPUT);

  while (!Serial) {/*warten*/}
  Serial.println(F("Rundenzeiterfassung V.0.1"));
  Serial.println(F("Bereit fuer neue Runde"));
}
void loop()
{
  akt_ms = millis();

  //Taktmerker
  if (akt_ms - takt_ms >= takt_zeit)
  {
    taktmerker = !taktmerker;
    takt_ms = millis();
  }
  //Rundenzeiterfassung
  if (digitalRead(t_start) == HIGH && digitalRead(t_stop) == LOW && runde == 0)
  {
    start_ms = millis();
    runde = 1;
    rundenzaehler += 1;
    print_info();
  }
  else if (digitalRead(t_stop) == HIGH && runde == 1)
  {
    stop_ms = millis();
    runde = 0;
    print_info();
    runde_stop();
  }
  if (runde == 1)
  {
    digitalWrite(leuchte, taktmerker);
  }
}
void print_info()
{
  Serial.print(F("Runde "));
  Serial.print(rundenzaehler);
  if (runde == 1)
  {
    Serial.println(F(" gestartet"));
  }
  else
  {
    Serial.println(F(" gestoppt"));
  }
}
void runde_stop()
{
  digitalWrite(leuchte, LOW);
  Serial.print(F("Rundenzeit = "));
  rundenzeit = stop_ms - start_ms;

  if (rundenzeit >= min_zeit)
  {
    print_zeit = rundenzeit / 1000;
    Serial.print(print_zeit);
    Serial.println(F(" Sekunden\n"));
  }
  else
  {
    print_zeit = rundenzeit;
    Serial.print(print_zeit);
    Serial.println(F(" Millisekunden\n"));
  }
  Serial.println(F("Bereit fuer neue Runde"));
}

grillgemuese:
Gibt es Verbesserungsvorschläge …

Die Frage, die Du stellst, ist ziemlich ungewöhnlich.

Auf die Schnelle würde ich lediglich den Kopf kürzer machen:

// Rundenzeiterfassung
// V 0.1, 15.11.2017

ist IMO genug.

Außerdem würde ich vor den Funktionen jeweils eine Leerzeile einfügen. Dann ist das noch übersichtlicher gegliedert.

Gruß

Gregor

Hallo,

wenn es funktiniert ist schön, Glückwunsch. Einzig die Lesbarkeit ist nicht so schön. Datentyp Syntax ist Mischmasch. Wenn bool dann auch bitte false/true statt 0/1. Einzig wegen der Lesbarkeit - auch später für dich selbst.

Eingänge/Ausgänge haben meistens nur positive Nummerierung. :slight_smile: int8_t ist signed 8Bit bzw. char. Kannste dich entscheiden zwischen uint8_t oder byte. Das sind sicherlich Kleinigkeiiten die aktuell nicht stören werden. Nur irgendwann kommste durcheinander, verlierst den Überblick und übersiehst Wertebereiche. Deswegen gleich immer den passende Datentyp verwenden.

Ansonsten weitermachen ... :slight_smile:

Kleine Frage zu SwitchCase…
Gibt es eine Möglichkeit mehr als nur eine Konstante in case XXX: einzubauen?

Schon mal C / C++ doku angeguckt? : Nein. So wie du es offensichtlich willst, geht das nicht.

Was geht, ist nur sowas:

byte val = ...
switch (val) {
 case 0: 
   break; // nichts tun
 case 1:
 case 3:
 case 5:
    ungeradeFunktion(); break;
 case 2:
 case 4:   
   geradeFunktion(); break;
 default: 
   zugrossFehler(val); break;
}

Aber das ist wohl nicht deine Frage

Nachtrag:
Meistens gibt es schon auf stackoverflow die Antwort.

grillgemuese:
Kleiner Zwischenstand zur Bestenliste :slight_smile:
...

Eieiei, Du bist echt ambitioniert.

Was mich da stört, sind die mit TAB erzeugten Einrückungen. Das reißt das ganz schön auseinander.

Ich halte mich bei Einrückungen an das, was in meinem C++-Büchlein steht: Einrückungen möglichst durch (nicht zu viele) Leerzeichen erzeugen, weil es dann in jedem Editor gleich aussieht. Ich verwende pro Einrückungs-Ebene üblicherweise zwei Leerzeichen.

Gruß

Gregor

Du kannst problemlos alles (oder wenigstens mehreres) ab in ein client.println packen.

client.println(F("<html>\n<head>\n<title>Arduino_Webserver</title>\n</head>"));

usw. und zusätzlich mit dem F-Macro für konstante Inhalte RAM sparen. ‘\n’ ist ein Zeilenvorschub, damit der Quelltext im Browser gut formatiert ankommt. Das muss für die Funktionalität aber nicht sein.

Gruß Tommy

grillgemuese:
So lala...

Leider funktioniert die Uebertragung an den Browser nicht mit der Funktion Webserver() nach meinen Wuenschen.

Hat jemand einen Rat fuer mich? :frowning:

Ja, klar. Uns klar zu beschreiben, was nicht nach Deinen Wünschen läuft.
Ein anderer Rat ist nach den wenigen Infos nicht möglich.

Gruß Tommy