Feedback Ultraschallsensor Sicherheitssystem mit Buzzer: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 9: Zeile 9:
Nen bsp das ich auf ner alten seite durch google fix gefunden hab: (Gibt auch richtige codeguidlines von bpsw. Google oder so)
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 descriptive names for all variables, function names, constants, and other identifiers.
    Use single letter identifiers only for the counter in loops.
Use single letter identifiers only for the counter in loops.
    Class names start with an upper case letter.
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.)
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.
Method names start with a lower case letter.
    Multi-word identifiers are internally capitalized.
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).
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.
Also du könntest bei dir noch reinschreiben, das namen immer eindeutig beschreibend seien sollen, das zusammengesetzte namen in Camel-Case geschrieben werden usw.
Zeile 57: Zeile 57:


und dann abstand checken und gegebenenfalls den richtigen hochsetzen
und dann abstand checken und gegebenenfalls den richtigen hochsetzen
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
if (Entfernung < 15) {                                 
if (Entfernung < 15) {                                 
   digitalWrite(LED_LAMP_GREEN, HIGH);                // LED Grün geht an
   digitalWrite(LED_LAMP_GREEN, HIGH);                // LED Grün geht an
Zeile 67: Zeile 68:
   Sound = 1000;
   Sound = 1000;
}
}
 
</syntaxhighlight>
und dann wie gehabt. KP obs wirklich besser ist, fands nur bischen eleganter weil kürzer. Ggf aber schlechter zu erklären.
und dann wie gehabt. KP obs wirklich besser ist, fands nur bischen eleganter weil kürzer. Ggf aber schlechter zu erklären.


Zeile 89: Zeile 90:
----------------------------------------------------------------
----------------------------------------------------------------


==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?


All in All echt gut. Hab echt nicht viel zu meckern, was für mich schon echt ungewöhnlich ist. Hab mich jetzt aber auch nur auf die Codesnippets und den ablauf und so fokussiert, nicht auf genaue rechtschreibung.
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.


Wenn du noch iwen brauchst für das paper zum gegenlesen (das ist normalerweise der Teil den meine kommilitonen komplett rot zurückkriegen xD) kannste dich gerne melden.


==Proband 2==
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small">
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);
}
</syntaxhighlight>





Aktuelle Version vom 8. September 2023, 11:20 Uhr

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