Wetterstation: Virtuelle Kerze
Zur Weihnachtszeit gehört auch immer etwas Deko. Im Büro kommt es dann zum Wettrüsten. Wer hat den weihnachtlichsten Arbeitsplatz?
Ich bin da eher zurückhaltend. Doch damit fällt man schnell auf, bzw. aus dem Rahmen. Outet sich womöglich als Weihnachtsmuffel.
Und damit meine soziale Kompetenz nicht in Frage gestellt wird hab ich mich für eine Alternative entschieden. Key Features -
Feinstaubbelastung gegen Null. Keine Geruchsbelästigung. Übrigens offenes Feuer ist per Hausordnung ebenfalls ausgeschlossen.
Kann die etwas Besonderes?
Die Umsetzung mit dem Dev Board der Wetterstation ist besonders interessant, denn mit dem Feuchtigkeitssensor können wir ermitteln
ob jemand die Kerze auspusten will. Ist dies der Fall muss so eine virtuelle Kerze natürlich auch aus gehen.
Die Anwendungen
$include "lcd.bas"
$include "weather.bas"
Dim Page As Byte
Dim Column As Byte
Dim Count As Byte
Dim Temp As Word
Dim Ref As Word
Dim Rand As Word
Dim Raw As Word
Clear_lcd
Ref = Read_rh()
Do
Backlight = 1
Temp = Read_rh()
Gosub Getrawdata
Temp = Temp - Ref
Loadwordadr Background
Page = 5
Column = 42
Print_bmp Page , Column , 3 , 44
If Temp > 10 Then
Backlight = 0
Loadwordadr Flame3
Page = 2
Column = 59
Print_bmp Page , Column , 4 , 10
Do
Loop
Else
Rand = Raw And &B0000000000000001
If Rand = 0 Then
Loadwordadr Flame1
Page = 2
Column = 59
Print_bmp Page , Column , 4 , 10
Else
Loadwordadr Flame2
Page = 2
Column = 59
Print_bmp Page , Column , 4 , 10
End If
End If
Loop
End
Getrawdata:
Raw = Read_temp()
Loadadr Raw , Z
$asm
st Z+, r0
St Z, r1
$end Asm
Return
Background:
Data &HE0 , &HF0 , &HF8 , &H38 , &H1C , &H1C , &H1E , &H0E , &H0E , &H0E , &H07 , &H07 , &H07 , &H03 , &H03 , &HC2,
Data &HE0 , &H60 , &H20 , &H32 , &H06 , &HFE , &HFC , &H80 , &H10 , &H10 , &H32 , &HF3 , &HE3 , &H03 , &H03 , &H03,
Data &H03 , &H03 , &H06 , &H06 , &H06 , &H0E , &H0C , &H0C , &H18 , &H78 , &HF0 , &HE0 , &HFF , &H03 , &HFF , &HFC,
Data &HF8 , &HF8 , &HF0 , &HF0 , &HF0 , &HF0 , &HE0 , &HE0 , &HE0 , &HE0 , &HE0 , &HE1 , &HE1 , &HE3 , &HE2 , &HE2,
Data &HE4 , &HE4 , &HE4 , &HE6 , &HE2 , &HE2 , &HE3 , &HE1 , &HE0 , &HE0 , &HE0 , &HE0 , &HE0 , &HE0 , &HF0 , &HF0,
Data &HF0 , &HF0 , &HF8 , &HF8 , &HFC , &HFC , &H03 , &HFF , &H7F , &HC0 , &H9F , &H3F , &H7F , &H7F , &HFF , &HFF,
Data &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF,
Data &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &H7F,
Data &H3F , &H87 , &HF0 , &H3F,
Flame1:
Data &H00 , &H00 , &H00 , &HE0 , &HFC , &HFF , &HFF , &HE0 , &H00 , &H00 , &H80 , &HF0 , &HFE , &H7F , &H1F , &H07,
Data &HFF , &HFF , &HFC , &H00 , &HFF , &HFF , &HFF , &HC0 , &H80 , &H00 , &H80 , &HFF , &HFF , &HFC , &HE1 , &H67,
Data &H2F , &H3F , &H1F , &HFF , &HFF , &H8F , &H17 , &H11,
Flame2:
Data &H00 , &H00 , &H00 , &H00 , &HC0 , &HF0 , &HF0 , &H00 , &H00 , &H00 , &H00 , &HC0 , &HF0 , &H7E , &H1F , &H3F,
Data &HFF , &HFC , &H80 , &H00 , &HFC , &HFF , &HFF , &H00 , &H00 , &H00 , &HE1 , &HFF , &HFF , &HFC , &HE1 , &H67,
Data &H2F , &H3E , &H1C , &HFF , &HFF , &H8F , &H17 , &H11,
Flame3:
Data &H00 , &H00 , &H00 , &H00 , &H04 , &H09 , &H60 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , &H21 , &H80,
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HC0 , &H30 , &H0B , &H00 , &H00 , &H00 , &HE0 , &H60,
Data &H20 , &H28 , &H0C , &HFC , &HF8 , &H80 , &H10 , &H10,
Funktion
Zu Beginn der Anwendung wird die aktuelle Luftfeuchtigkeit ermittelt und als Referenzpunkt gespeichert.
Danach wird in einer Endlosschleife die Luftfeuchtigkeit gemessen und mit der Referenz verglichen.
Bei einer Abweichung von > 10% (einmal kräftig Pusten) wird die Hintergrundbeleuchtung deaktiviert
und die entsprechende Grafik angezeigt.
Grafikentwurf und Animation
Alle Grafiken wurden mit MSPaint erstellt und mit Mosiac für BASCOM umgewandelt.
Die Animation der Kerze besteht aus zwei Grafiken. Diese werden zufällig umgeschaltet. Als Zufallsgenerator dient das niederwertigeste Bit aus den
Rohdaten der Temperaturmessung (Rand = Raw And &B0000000000000001).
Die Anzeige der Kerze besteht aus zwei Teilen. Einem statischen Hintergrund (die Kerze oder das Teelicht selbst) und dem Flammenbild.
Ausgetauscht wird jeweils nur das Flammenbild für die Animation oder die erloschene Kerze nach dem Auspusten.
Download und Links: