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.
Kerzenanimation
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).
Grafikentwurf als Bitmaps
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: