Lösungen für die Übungen mit dem mySTM32 light Board
In den einzelenen Abschnitten wurden Übungsaufgaben gestellt um das Gelernte zu vertiefen. Diese sollten selbständig erarbeitet werden. Hier finden Sie Lösungsvorschläge für die gestelleten Aufgaben um diese mit ihren Lösungen zu vergleichen.
Lösung Übung 1
Aufgabe
Erweitern Sie zur Übung die Anwendung um eine weitere ErrorLED an Pin B1. Orientieren sie sich an den obigen Arbeitsschritten. Lassen Sie die ErrorLED im Gegentakt zur StatusLED blinken.
Lösung:
Lösung Übung 2
Aufgabe
Erweitern Sie zur Übung die Anwendung um eine weitere Taste an Pin A1. Orientieren sie sich an den obigen Arbeitsschritten. Die Erweiterung der Lösung soll folgende Anforderungen erfüllen:
- wenn die Funktionstaste gedrückt ist soll die Anzeige-LED leuchten
- wenn die Zusatztaste gedrückt ist soll die Anzeige-LED blinken
- wenn beide Tasten gedrückt sind hat die Zusatztaste Vorrang
- wenn keine Taste gedrückt ist soll die Anzeige-LED aus sein
Lösung:
Lösung Übung 3
Aufgabe
Erweitern Sie zur Übung die Anwendung um eine Reaktion beim loslassen der Funktionstaste nach dem langen halten (onHoldEnd). Beim Loslassen der gehaltenen Taste soll die Anzeige-LED kurz aufblitzen (flash).
Lösung:
Lösung Übung 4
Aufgabe
Ändern Sie zur Übung die Anwendung wie folgt:
- Änderung: Kommentieren Sie den Code in onTimer10ms aus und lassen den Speaker in onWork toggeln.
Bilden und Testen Sie diese geänderte Anwendung.
Vergleichen und bewerten Sie das akustische Ergebnis.- Der Ton ist viel höher. Was bedeutet das?
- Der Ton hat ist nicht durchgehend sondern hat Störungen. Warum?
- Änderung: Fügen Sie in onWork mit waitMs eine Wartezeit von 500 ms ein.
Bilden und Testen Sie diese geänderte Anwendung.
Vergleichen und bewerten Sie das optische und akustische Ergebnis.- Der Ton ist nur noch ein Knacksen.
- Das Timing der Blinkenden LEDs hat sich verändert.
Ziehen Sie aus dem Ergebnis dieser Änderungen Schlussfolgerungen für die Anwendung von Wartefunktionen.
Lösung
Lösung Übung 5
Aufgabe
Fügen Sie einen Taster als SendenTaste der Systemlösung hinzu. Stellen Sie die Lösung so um, dass die Datenübertragung im 100 Millisekunden Systemereignis onEvent100ms() erfolgt wenn die Taste Senden betätigt ist.
Lösung
Lösung Übung 6
Aufgabe
Erweitern Sie zur Übung die Anwendung um eine ErrorLED. Die ErrorLED soll bei Sensorwerten unter 100 leuchten.
Lösung
Lösung Übung 7
Aufgabe
Erweitern Sie zur Übung die Anwendung um eine UART-Verbindung mit 19200 BAUD zum SiSy-ControlCenter. Senden sie die PWM-Werte für die Ansteuerung der LED als 8 Bit Zahlen an das SiSy-ControlCenter. Verfolgen Sie den Signalverlauf in der Oszi-Ansicht des ControlCenters.
Lösung
Controller::onWork//----------------------------------------------------- // duty++; // if (duty>=1000) // duty=0; // pwm.setDuty(duty); //----------------------------------------------------- // atmende LED mit Exponentialfunktion pwm 0-1000 // beachte #include math.h duty++; uint16_t dimValue; if (duty<1000) dimValue = pow(1.00693,duty); else if (duty<2000) dimValue = pow(1.00693,2000-duty); else duty=0; //----------------------------------------------------- pwm.setDuty(dimValue); terminal.writeByte((uint8_t)(dimValue/4)); waitMs(1);
Lösung Übung 8
Aufgabe
Erweitern Sie zur Übung die Anwendung um eine LED die bei jedem Trigger-Event umschaltet (toggle).
Lösung:
Lösung Übung 9
Aufgabe
Erweitern Sie die Anwendung um eine Zweite Taste mit einem UART-Terminal. Bei jedem Tastendruck soll ein Zähler hochgezählt werden und mit 19200 Baud an das SiSy-Controlcenter gesendet werden.
Lösung:
Lösung Übung 10
Aufgabe
Erweitern Sie die Anwendung um eine AlarmLED. Die AlarmLED soll bei Sensorwerten unter 100 schnell Blinken (flicker).
Bei werten über 100 ist die LED aus. Nutzen Sie für die AlarmLED das Pin B4. Geben Sie die Information „OK“ oder „ALARM“ zusätzlich auf dem Display aus.
Lösung:
Controller::onWork()// lese Analogwert ein uint16_t value; value=sensor.getValue(); // formatiere die Textausgabe ------------------ String txt; txt.format("Value=%d ",value); // Textausgabe Analogwert in der ersten Zeile -- display.home(); display.write(txt); // Balken als Anzeige in der zweiten Zeile ----- display.setPos(1,2); for (uint16_t i=0; i<16; i++ ) { if (i<=value/64) display.write("*"); else display.write(" "); } if (value<100) alarmLED.flicker(); else alarmLED.off(); // dem Auge Zeit lassen das Display zu lesen --- waitMs(100);
Lösung Übung 11
Aufgabe
Erweitern Sie die Anwednung. Nutzen Sie das Text-LCD um die Sensordaten anzuzeigen!
Lösung
Controller::onWork// continuous event from the Mainloop temperatur=sensorBus1.temperaturSensor.getRawValue(); String txt; txt.format("\ntemp=%d",temperatur); terminal.writeString(txt); display.setPos(1,1); display.write("Temperatur"); display.setPos(1,2); txt.format("%d Grad",temperatur/10); display.write(txt); waitMs(100);
Lösung Übung 12
Aufgabe
Erweitern Sie beide Lösungen so, dass diese jeweils eine SendeTaste und eine EmpfangsLED besitzen und die Board 1 an 2 und Board 2 an ein sendet.
Lösung:
Lösung Übung 13
Aufgabe
Erweitern Sie zur Übung die Anwendung um die Funktionalität das System per UART fernsteuern zu können. Das Protokoll soll folgende Kommandos umfassen:
- E, Betriebsmodus ECO
- N, Betriebsmodus NORMAL
- S, Betriebsmodus SPEED
- O, System ausschalten OFF
- A, Alarm
Lösung: