Feedback Ultraschallsensor Sicherheitssystem mit Buzzer
Autor: Justin Frommberger
Proband 1
Programmierrichtlinien:
Passt es das die Programmierrichtlinien unter "https://wiki.hshl.de/wiki/index.php/Programmierrichtlinien_Einsteiger" so wenig und vorallem so eigen sind ? kenne es bspw. eigentlich so das man variablen komplett klein und Methoden Namen groß schreibt (ist meine Java vorgabe geweseb). Wenn bei dir methoden kleingeschrieben werde muss das aufjedenfall auch ins wiki
Nen bsp das ich auf ner alten seite durch google fix gefunden hab: (Gibt auch richtige codeguidlines von bpsw. Google oder so)
Use descriptive names for all variables, function names, constants, and other identifiers. Use single letter identifiers only for the counter in loops. Class names start with an upper case letter. Variable names start with a lower case letter. (Variables include parameters, local variables, and data fields. Exception: use UPPER_CASE for constants - final variables.) Method names start with a lower case letter. Multi-word identifiers are internally capitalized. Do not use hyphens or underscores to separate multi-word identifiers (except for constants, which have all upper case letters).
Also du könntest bei dir noch reinschreiben, das namen immer eindeutig beschreibend seien sollen, das zusammengesetzte namen in Camel-Case geschrieben werden usw.
Guck außerdem das du die geschweiften klammer immer gleich nutzt (ist manchmal unterschiedlich), Also: void(){ }
versus:
void() { }
sind zwei verschiedene Coding styles über die sich immer gestritten wird was man lieber mag. Solltest konsistent seien musst das aber denke nicht umbedingt definieren (haben btw auch namen aber da komm ich gerad net drauf)
6.3.4 Entfernung und Dauer:
"Berechnen Sie die Strecke durch 2 multipliziert mit der Schallgeschwindigkeit = 0.03432." bischen komisch geschrieben. Das sieht aus als ob die gesamtrechnung das ergebnis ist und nicht das das nur die Schallgeschwindigkeit ist.
Außerdem warum ist da keine Maßeinheit hinter !!!! das darf nicht fehlen, sind ja keine Bananen xD
7. Komplett lösung:
"Zählt der Mikrocontroller die Zeit in Mikrosekunden, bis der Schall zum Ultraschallsensor zurückkehrt" <- Satzbau. Das ist doch keine frage oder? ;)
Also man kann den Mustercode noch bischen effizienter machen und denke kürzer, aber nicht so das er so gut leserlich bleibt wie jetzt. Finde das man dem Code sehr gut folgen kann und vorallem die Kommentare gut gesetzt sind.
Wenn du ne idee haben willst wie man das vllt sogar noch etwas kürzer strukturieren kann ginge das wie folgt:
erst alle inputs direkt auf LOW setzen, also digitalWrite(LED_LAMP_GREEN, LOW); digitalWrite(LED_LAMP_YELLOW, LOW); digitalWrite(LED_LAMP_RED, LOW);
und dann abstand checken und gegebenenfalls den richtigen hochsetzen
if (Entfernung < 15) {
digitalWrite(LED_LAMP_GREEN, HIGH); // LED Grün geht an
}
elif (Entfernung < 10) {
digitalWrite(LED_LAMP_YELLOW, HIGH);
}
elif (Entfernung < 5) {
digitalWrite(LED_LAMP_RED, HIGH);
Sound = 1000;
}
und dann wie gehabt. KP obs wirklich besser ist, fands nur bischen eleganter weil kürzer. Ggf aber schlechter zu erklären.
Habs btw nicht hingekriegt in dem Online arduino das ding auszulösen, also des es nicht "auerßhalb der Range" ist. Hab rumgeklickt aber passierte nicht. sollte man vllt dazuschreiben wie das geht bin vllt aber auch einfach zu dumm. (Also an die stelle wo du den Online Arduino mit link angibst kann man das hinzuschreiben) - Würde übrigens "Außerhalb der Reichweite" anstatt "Außerhalb der Range" schreiben. Denglisch ist bei sowas zwar unvermeidbar, aber finds da unpassend.
Grundkenntnisse der Programmierung:
zu deiner "https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Pulsierende_LED)" seite kommt man nur durch links von unterteilen also bspw. wenn man auf "https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Pulsierende_LED)#Initialisierung_(Zuweisung)" klickt. Ich würde definitiv ganz oben beim ablauf die komplette seite verklinken sodass ein user bei fragen zu codestellen erstmal da nachschauen kann. Bspw. warum loop() und setup() genutzt werden etc. Hatte mich schon gefragt warum du das nirgends erklärst - war halt auf der Seite die ich erst garnicht gefunden habe xD.
2.2 Du benutzt aufeinmal "Du" anstatt "Sie" das sollte überall einheitlich seien. Prüf das am besten nochmal.
5.1 "Das if-Bedingung checkt, ob eine Bedingung wahr ist und führt dann den Code aus, der innerhalb der Klammern steht." Ist leider nicht richtig. Besser wäre: Die if-Bedingung prüft, ob die angegebene Bedingung in den runden klammern () wahr ist und führt dann den Code aus, der innerhalb der Geschweiften Klammern {} steht. Siehe Beispiel ...
Proband 2
Ablaufplan:
Die Links verweisen auf die falschen Bilder/Wiki-Seiten:
Nur die Links in 2 und 6 sind korrekt.
Aufgabenstellung:
Besser definieren. Ab wann leuchtet die rote LED? Laut Aufgabenstellung könnten auch alle LEDs rot sein. Wie viele LEDs sollen verwendet werden?
Entfernung und Dauer:
Um die Entfernung zu messen, benötigt man eine Rechnung, die wie folgt abläuft: Berechnen Sie die Strecke geteilt durch 2 ms, multipliziert mit 0.03432 ms (Schallgeschwindigkeit).
Würde ich umschreiben. Die ms würde ich beim Halbieren weglassen.
Die Entfernung wird berechnet, indem die Dauer durch zwei geteilt und mit 0,03432 ms (Schallgeschwindigkeit) multipliziert wird. Oder Die Entfernung wird berechnet, indem die Dauer halbiert und mit 0,03432 ms (Schallgeschwindigkeit) multipliziert wird. Oder Berechnung: Dauer geteilt durch 2, multipliziert mit 0,03432 ms (Schallgeschwindigkeit). Oder Dauer geteilt durch 2 multipliziert mit 0,03432 ms (Schallgeschwindigkeit).
If-Bedingung für LEDs und Buzzer:
sound = 1000; ist unnötig, da der Sound sonst im Code nicht geändert wird. Man kann den Sound auch gleich bei der Variablendeklaration auf 1000 setzen.
"Außerhalb der Reichweite" ist für Dritte irreführend, da dies nur für die Tonanage und nicht für die gesamte Anlage gilt. Warum wird die Reichweite nur angezeigt, wenn die Entfernung unter 5 ist?
Tonanage mit Kommentar beschreiben. Oder direkt bei der LED dazuschereiben, denn der Buzzer soll ja nur dann ertönen, wenn die LED leuchtet. Wenn es zu unübersichtlich ist, kannst du den Code auch mehr Kommentieren.
Ich würde den Code so ändern:
if (entfernung < 5)
{
digitalWrite(LED_LAMP_RED, HIGH);
tone(SOUND_BUZZER, sound); //Buzzer und rote LED sind eingeschaltet
}
else
{
digitalWrite(LED_LAMP_RED, LOW); //Buzzer und rote LED sind ausgeschaltet
noTone(SOUND_BUZZER);
Serial.println("Sound Buzzer außerhalb der Reichweite");
}
Serial.print(entfernung);
Serial.println(" cm");
delay(300);
}
→ zurück zum Hauptartikel: BA: Arduino-Projekte für die Lehre