Forum: Mikrocontroller und Digitale Elektronik Schulnotenbewertung eines Arduino-Programms


von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Weil es mir jetzt einfach keine Ruhe läßt. Es geht darum, dass ein 
Lehrling, 2 Lehrjahr, Ausbildungsberuf Physiklaborant in der 
Berufsschule die Aufgabenstellung hatten, mittels Arduino ein 
Lauflichprogramm zu erstellen.

Die originale Aufgabenstellung habe ich gerade nicht parat, aber sie 
mußten Arduino dafür verwenden, dürfen (weil wohl nicht besprochen 
wurde) keine Interrupts verwenen und die LEDs sind über ein 
Schieberegistermodul angeschlossen, für das sie eine Beschreibung 
erhalten hatten und vorgestellt wurde, wie dem Schieberegister Werte 
zugewiesen werden. Jetzt ist mein Lehrling - aus meiner Sicht der Dinge 
- (weit) über dem, was ein 18-jähriger im 2. Lehrjahr können muß, er 
interessiert sich hier sehr stark für Arduino und auch grundsätzlich 
Mikrocontroller. Grundsätzlich erkennt man von seiner Art und Weise 
schon auch meine Handschrift in der Programmierung wie ich ihm manche 
Dinge gezeigt habe, bspw. das Zerlegen in kleine Funktionen und 
insbesondere auch das Kommentieren des Codes.

Das Lauflicht sollte über einen Trimmer in der Ablaufgeschwindigkeit 
geändert werden können und über einen 2 pol. Dipschalter 4 verschiede 
Auswahlmuster wählbar sein.

Im Anhang könnt ihr sehen, was er in der Schule abgeliefert hat und ganz 
ehrlich hat es mich "beeindruckt", wie er as gelöst hat (ich bin ganz 
sicherich nicht mehr von einem LED-Laulicht beeindruckt).

Grundsätzlich hat er etwas gemacht, von dem er wahrscheinlich die 
Fachbegriffe gar nicht kennt. Aus meiner Sicht der Dinge hat er so etwas 
wie ein "event-pollinggetriebenes" Programm geschrieben, das aus Sicht 
der I/O Devices (Trimmer, DIP-Schalter, LED) noch nicht einmal 
blockierend ist.  Änderungen am Trimmer oder eine Änderung an den 
DIP-Schaltern erzeugen relativ unmittelbar Änderungen im Programmablauf.

Ich habe viele Lauflichtprogramme von Lehrlingen gesehen, aber das hier 
ist mit Abstand das beste (für mich).

Mich würde jetzt echt interessieren, welche Note aus einer 
"Lehrersichtweise" hier angemessen ist?

PS: natürlich werden jetzt wieder die ewigen Nörgler und Trolle 
aufschlagen, aber auf eine neutrale, sachliche Aussage freue ich mich!

von Rahul D. (rahul)


Lesenswert?

Ralph S. schrieb:
> Mich würde jetzt echt interessieren, welche Note aus einer
> "Lehrersichtweise" hier angemessen ist?

Die kommt auf die Aufgabenstellung, den Lehrstoff und die Erwartung des 
Dozenten an.
Wenn die Erwartung (aka "Musterlösung") ge- oder übertroffen wurde, 
sollte es eine 1 geben.

Ralph S. schrieb:
> Physiklaborant
Erfordert der schon eine (Fach-) Hochschulreife?

Von den meisten meiner Mitschülern meine Berufschulklasse hätte ich man 
sowas nicht bekommen.
Die Quellcode-Formatierung (inkl. Kommentare) finde ich vorbildlich, 
nachdem ich schon von Quellcode von E-Technik-Mastern pflegen durfte, 
die an sowas gar kein Interesse hatten.

von Stefan S. (chiefeinherjar)


Lesenswert?

1
  sr.setvalue(laufl_prog[i + 1], 1);    // Ausgabe eines Leuchtmusters

Warum i+1? Denn so wird das erste Element (mit Index 0) nie angesprochen 
und die Array-Grenze überschritten. Oder sehe ich da was falsch?

von Rahul D. (rahul)


Lesenswert?

Stefan S. schrieb:
> Warum i+1? Denn so wird das erste Element (mit Index 0) nie angesprochen
> und die Array-Grenze überschritten. Oder sehe ich da was falsch?
1
len = laufl_prog[0];
übersehen?
Da mit Pointern auf (unterschiedlich lange) Arrays gearbeitet wird, 
braucht man die Längeninformation explizit.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> Denn so wird das erste Element (mit Index 0) nie angesprochen
Dort wird die Länge herausgeholt:
1
    len = laufl_prog[0];

> die Array-Grenze überschritten.
Nein, weil das Pascal-String-mäßig ja explizit über diesen Längeneintrag 
an Index 0 abgehandelt wird.

Ralph S. schrieb:
> Ich habe viele Lauflichtprogramme von Lehrlingen gesehen, aber das hier
> ist mit Abstand das beste (für mich).
Sieht gut aus. Es wurden einige Gimmicks verwendet, die durchaus als 
"fortgeschritten" eingestuft werden können.

Allerdings muss der Schreiber noch die "Potenz" aus dem Potentiometer 
raushalten ;-)
- https://de.wikipedia.org/wiki/Potentiometer

: Bearbeitet durch Moderator
von Stefan S. (chiefeinherjar)


Lesenswert?

Ahhhh Danke für die Korrektur!

Rahul D. schrieb:
> Stefan S. schrieb:
>> Warum i+1? Denn so wird das erste Element (mit Index 0) nie angesprochen
>> und die Array-Grenze überschritten. Oder sehe ich da was falsch?
> len = laufl_prog[0];
> übersehen?

Tatsächlich übersehen! Danke!

von Ralph S. (jjflash)


Lesenswert?

Rahul D. schrieb:
> Ralph S. schrieb:
>> Physiklaborant
> Erfordert der schon eine (Fach-) Hochschulreife?

erfordert "nur Realschulabschluß, obwohl dort einige Abiturienten und 
Fachhochschulreife Auszubildende dabei sind.

Lothar M. schrieb:
> Allerdings muss der Schreiber noch die "Potenz" aus dem Potentiometer
> raushalten ;-)
> - https://de.wikipedia.org/wiki/Potentiometer

Dass man "Potentiometer" jetzt mit "z" schreibt.... tut nicht nur dir 
weh.

Diese Schularbeit wurde - mir komplett unverständlich - mit einer 3,2 
bewertet und ich bin am Überlegen, ob ich da beim Lehrer "vorstellig" 
werden sollte. Auch um dem Auszubildenden zu zeigen, dass ich nicht 
hinter der Lehrerentscheidung stehe.

Nach meinen Kriterien hätte ich 1,5 gegeben ... auch wegen 
"Flüchtigkeitsfehler" in den Kommentaren:
1
     ADC / 3 = 341; 341 + maxspeed (40) = 381
2
3
     Rueckgabewerte je nach Potenziometereinstellung 0..381
denn es hat eine Spannweite von 40..381, zudem ein Fehler eines 
Funktionsprototypen:
1
uint8_t io_init(void)
2
{
3
  pinMode(dipkey_0, INPUT_PULLUP);
4
  pinMode(dipkey_1, INPUT_PULLUP);
5
  pinMode(speedctrl, INPUT);
6
}

Das hätte "void io_init(void)" heißen müssen...

von Rolf (rolf22)


Lesenswert?

Lothar M. schrieb:
> Mich würde jetzt echt interessieren, welche Note aus einer
> "Lehrersichtweise" hier angemessen ist?

Wie schon andere gesagt haben: Es kommt darauf an, was GENAU die Aufgabe 
war und was gekonnt werden hätte sollen. Das ist also ein subjektiver 
Maßstab, den können wir hier mangels Wissen nicht anlegen. Rein objektiv 
wäre es für einen "richtigen" Programmierer Schulnote 4 minus - 
vorausgesetzt, es läuft wenigstens richtig, was ich bezweifle.
Allerdings muss so ein Azubi nicht das können, was ein richtiger 
Programmierer kann. Anders gesagt: Relativ gesehen mag dieser Azubi gut 
sein, absolut gesehen ist er es nicht.

Nur ein paar Punkte:
Insbesondere die Routine polled_delay() ist misslungen: Es werden dort 
zwei Dinge vermischt, und zwar so unübersichtlich, dass man nicht leicht 
erkennen kann, was da bewirkt wird.

Der zweifache Aufruf von dipkey_get() (einer sichtbar in loop, einer 
unsichtbar in loop) macht das dann noch schlimmer. Mag sein, dass es mit 
diesem und anderen Tricks funktioniert, aber gut im Sinne einer sauberen 
Programmierung ist das nicht. Es sind "schmutzige" Tricks.

Das Arduino-Paradigma (setup vs. loop) ist auch nicht eingehalten, die 
Initialisierungen am Anfang von loop() gehören da nicht hin.

Zur Unübersichtlichkeit:
Deswegen ist es wohl auch passiert, dass der Programmierer selbst nicht 
gemerkt hat, dass die Variablen dipkey_status zwar ausgelesen, ihr aber 
im gesamten Programm nirgendwo ein Wert zugewiesen wird. Läuft das 
Programm denn so überhaupt richtig?

von Rolf (rolf22)


Lesenswert?

Ralph S. schrieb:
> Dass man "Potentiometer" jetzt mit "z" schreibt.... tut nicht nur dir
> weh.

Das ist ein Fachwort und darf deshalb laut Duden weiterhin mit 't' 
geschrieben werden. (Ich schreibe das auch mit 't'.)

von Alexander (alecxs)


Lesenswert?

Ralph S. schrieb:
> Diese Schularbeit wurde - mir komplett unverständlich - mit einer 3,2
> bewertet

Vielleicht weil die Urheberschaft der dafür genutzten KI nicht mit 
angegeben wurde?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.