nachdem die einzelnen Hard- und Software-Komponenten funktionieren, werden diese zum Gesamtsystem zusammengefügt und eine erste einfache Lösung erstellt (Initial Operating Capability). Das folgende Bild zeigt welchje Komponenten bei der ersten einfachen Lösung zusammenarbeiten sollen.
Das Klassendiagramm ähhnelt sehr dem womit die Komponenten getestet wurden.
Der Systemstart sollte schon ein bisschen sexy sein. Neben der Initialisierung der Geräte zeigen wir eine kleine Begrüßung für den Nutzer an und empfangen diesen mit ein paar netten Tönen. So etwas ist nicht nur Spielerei sondern signalisiert dem Anwender akustisch und optisch das Hochfahren und die Arbeitsbereitschaft des Systems.
Controller::onStart()
// boot sequence after start SysTick statusLED.blink(1); display.clear(); display.home(); display.write("WELCOME"); // Uhr stellen clock.hour=11; clock.minute=20; clock.second=0; // weckzeit stellen sensorBus.eep.writeData(10,clock.hour); waitMs(10); sensorBus.eep.writeData(11,clock.minute+1); waitMs(10); sensorBus.eep.writeData(12,clock.second); waitMs(10); speaker.play(FLASHSTR("a.a.a.ddd.ccc"));
Übersetzen Sie das Programm und übertragen Sie dieses auf den Controller. Es sollte jetzt beim Systemstart die Begrüßung auf dem Display erscheinen und eine kurze Tonfolge erklingen.
Als nächstes soll die aktuelle Uhrzeit, Temperatur und der Weckstatus auf dem Display angezeigt werden.
Controller::onEvent1s()
uint8_t temerature; temerature=sensorBus.temperatureSensor.getTemp(); String txt; txt.format("Temp=%d ",temerature); display.setPos(1,1); display.write(txt); txt=clock.getTimeAsText(); display.setPos(1,2); display.write(txt); uint8_t wm,wh,ws; wh=sensorBus.eep.readData(10); wm=sensorBus.eep.readData(11); ws=sensorBus.eep.readData(12); if (wh==clock.hour) { if (wm==clock.minute) { if(ws==clock.second) { //alarm alarm=true; speaker.on(); statusLED.flicker(); } } }
Damit die I2C Komponenten funktionieren müssen diese am I2C-Bus angemeldet werden (logisch Verbindung in der Software).
TemperatureSensor::onStart()
connect(app.sensorBus,0x90);
EEPROM::onStart()
connect(app.sensorBus,addr);
UserButton::onClick()
// hier alarm ausschalten app.speaker.off(); app.statusLED.blink(1);
Wir erweitern die Uhr wie folgt:
Clock::onEvent1s()
second++; if (second>60) { minute++; second=0; if (minute>60) { hour++; minute=0; if (hour>24) { hour=0; } } }
Clock::getTimeAsText()
String txt; txt.format("%d:%d:%d",hour,minute,second);
Übersetzen Sie das Programm und übertragen Sie dieses auf den Controller. Der Wecker hat jetzt seine komplette Funktionalität. Die Datenübertragung vom PC zum Stellen des Weckers und der Echtzeituhr wurden ebenfalls schon implementiert. Es fehlt nur noch das PC-Programm, um Wecker und Uhr zu stellen und die aktuelle Uhrzeit anzuzeigen.
Nachdem die erste einfache Version erfolgreich getestet wurde können Sie den nächsten Schritt im Projekt gehen.