Am 28.5.22 war für viele ein langes Wochenende, deshalb haben wir keine
neuen Themen angefangen, sondern nur dies und das erweitert oder geübt.
Eine Idee vom letzten Treffen war noch übrig: Wie kann man einen
Arduino automatisch morsen lassen, und der andere soll die Zeichen
verstehen und auf den Bildschirm bringen. In diesem Fall hat nur einer
der beiden Arduinos (der linke) eine Verbindung zum PC. Deshalb muss
der rechte Arduino über zwei Leitungen GND-GND und 5V-5V mit Spannung
versorgt werden. Zusätzlich gibt es die Telegrafenleitung von
D12(rechts) zu D10(links). Im rechten Controller läuft das erweiterte
Programm Morse-Ausgabe mit der zusätzliche Sendeleitung an D12.
Links läuft das unveränderte Programm Morse-Eingabe, das die
Zeichen von der Morsetaste liest. Parallel zur Morsetaste liegt nun der
automatische Morse-Arduino. Die Programme findet man im Kurs 4.
Für diese Anwendung haben wir diesmal den dynamischen Lautsprecher
verwendet. Dazu wurde ein Elko mit 100 µF in Reihe geschaltet. Damit
wird der kleine 32-Ohm-Lautsprecher lauter. Noch lauter wurde er mit
einer kleinen Lautsprecher-Box.
In eine kleine Dose oder Schachtel wird ein Loch geschnitten.
Wenn der Lautsprecher über das Loch geklemmt wird, wird er lauter, und die tiefen Töne werden besser abgestrahlt.
Rechenprogramm mit zwei Schleifen
Diesmal ging es um ein reines Rechenprogramm. Ich wollte zeigen,
wie man ein vorhandenes Programm als Vorbild nehmen kann, um daraus
alle Befehle und Strukturen zu kopieren, die man für eine ganz andere
Aufgabe braucht. Wir haben das Programm Reaktionstest (Kurs 4)
verwendet. Darin enthalten ist eine Zählschleife und ein Beispiel für
serielle Ausgaben an den seriellen Monitor. Daraus wurde Schritt für
Schritt ein Programm zur Darstellung von Rechenblöcken für das
Einmaleins. Wir mussten mehrmals etwas erweitern, korrigieren oder
verbessern, bis alle zufrieden waren.
void loop() {
int n, m;
for (n=1; n<11; n++){
for (m=1; m<11; m++){
Serial.print(" ");
if(m<10)Serial.print(" ");
Serial.print(m);
Serial.print(" * ");
Serial.print(n);
Serial.print(" = ");
Serial.print(n*m);
Serial.println(" ");
delay(500);
}
Serial.println(" ");
}
}
Das Programm erzeugt zehn Rechenblöcke von 1 * 1 = 1 bis 10 * 10 = 100.
Ein Rauschgenerator
Weil ich gerade an einem Rauschgenerator für einen Raspberry Pico
gearbeitet habe, wollte ich selbst ausprobieren, ob so etwas auch mit
einem Arduino zu schaffen ist. Das Pico-Programm hat ein
32-Bit-Schieberegister verwendet. Der Arduino musste mit 16 Bit
auskommen. Es hat zwar im Prinzip funktioniert, aber es war mir kaum
möglich, zu erklären, wie ein Schieberegister funktioniert, und warum
ein Rauschen dabei herauskommen sollte. Siehe https://de.wikipedia.org/wiki/Linear_r%C3%BCckgekoppeltes_Schieberegister
Ein Lautsprecher am Pin 9 ließ tatsächlich ein Rauschen hören.
Zusätzlich hört man allerdings ein wiederkehrendes Geräusch. Das
Rauschen ist deshalb nicht völlig zufällig, weil sich die gleichen
Impulse nach einiger Zeit wiederholen. Mit den zusätzlichen
Printbefehlen sieht man eine quasi-zufällige Zahlenfolge. Nur das
letzte Bit wird an den Lautsprecher ausgegeben.
Um das Rauschen zu verbessern, haben wir dann versucht, die
Random-Funktion einzusetzen. Wir haben random(0, 65535) und random(0,
255) versucht. aber dabei wurde die Ausgabe zu langsam, es kam kein
Rauchen, sondern ein unregelmäßiges Knattern. Zu meiner Überraschung
brachte random(0, 3) eine sehr brauchbare Lösung mit einem lauten
weißen Rauschen.