4005

WordClocks with 8*8 or 10*10 NeoPixel-Matrix, ESP8266 and a BASIC-Program based on ANNEX WiFi-RDS . Matrixes are made with Laserprinter or 3D-Printer.


 During the last year I built some WordClocks for some friends who saw the one I built first and fell in love with it.
  This resulted in some different versions with 8x8, 8x8+4 or 10x10 NeoPixel matrix in various housings - So it was fortunately no mass production ;-)

 The display masks of the clocks are made with Laserprinter or 3D-Printer). These are  in German language, but there are masks in other languages available on the net and the BASIC-program can be adapted accordingly .

 The different types of matrixes  are controlled by the same BASIC-program and Webinterface.
 With the webinterface the type of display and  the color and brightness of active and inactive words can be adjusted.
 The settings are saved for the next reboot.
 Programming is based on a BASIC-Script and  ANNEX-WiFi-RDS for any ESP8266-Controler-module (e.g.: Wemos D1 Mini). 
The program text is currently still somewhat German in the variable names and comments

This is what some of the results look like:
https://vimeo.com/221749384
https://vimeo.com/368983581
https://vimeo.com/221750564

The BASIC code for the ESP8266 is created very easily with ANNEX WiFi RDS and looks like this
   
' W o r d C l o c k   mit 10x10- und 8*8-Matrix
' Peter.Neufeld@me.com
' JANUAR 2018(ESPbasic) // NOVEMBER 2019(ANNEX-RDS)
' 10x10 oder 8x8(+4) NeoPixel an !!!!GPIO02 = D04!!!!!
' 8x8+4 = mit 8x8 mit 4 zusaetzlichen Minuten LEDs
' Zeigt beim Start die IP-Adresse als  Stunden an
' TYPUS=[10x10|8x8|8x8+4]  in EEPROM gespeichert
' Sommer-/Winterzeit automatisch 
'   (CET-1CEST,M3.5.0,M10.5.0/3 in config-page)
ver$    = "V7.2 ANNEX"
zeit$   = time$

gosub STARTWERTE
gosub HW_TYPUS
gosub NEO_SETUP
gosub WebInterface
timer0 4000 , WebInterface
gosub ShowIPADR

onhtmlreload WebInterface
onhtmlchange WebInterface

' Falls keine Verbindung zu einem WALAN besteht 
' und keine NTP-Zeit geholt werden konnte:
' DEMO-Modus und rote Anzeige
if IPADR$="192.168.4.1" then
  MODUS$ = "DEMO"
  R = 50
  G = 0
  B = 0
else
  MODUS$ = "UHR"
end if
' !!!!!!!!!!!!!
option.WDT 10000 ' set the WDT at 10 seconds
timer0 2000, MAIN_PRGM

wait

' ##############################################################
MAIN_PRGM:
'wlog  "MAIN_PRGM", time$
option.WDTreset
zeit$ = time$
if MODUS$ = "UHR" then COLOR$ = "NEIN"
if MODUS$ = "COLOR_DEMO" then
  timer0 0
  gosub color_demo
  pause  3000
  timer0 2000, MAIN_PRGM
  MODUS$ = "UHR"
  R_alt = R_alt + 1
endif

if (MODUS$ = "UHR") or (MODUS$ = "UHR_MIT_COLOR_WECHSEL") then
  mm = val(word$(time$,2,":"))
end if

if MODUS$ = "DEMO" then
  COLOR$ = "NEIN"
  mm = mm + 3
  if mm > 59 then
    mm = 0
    hh = hh+1
    if hh > 12 then  hh = 1
  end if
end if

ss = val(word$(time$,3,":"))
if (MODUS$ = "UHR") or (MODUS$ = "UHR_MIT_COLOR_WECHSEL")  then
  hh = val(word$(time$,1,":"))
end if

If hh = 0 then
  hh = 12
end if
if hh >12 then hh = hh - 12

mm_mod = mm 
if ( RX <> RX_alt ) or ( GX <> GX_alt ) or ( BX <> BX_alt ) then
  RX_alt = RX
  GX_alt = GX
  BX_alt = BX
  NEO.STRIP LED_start,LED_end,RX,GX,BX
  R_alt = R_alt + 1
end if

if TYPUS$ <> TYPUS_alt$ then
  gosub HW_TYPUS
  TYPUS_alt$ = TYPUS$
  mm_alt = mm_alt + 1
  NEO.STRIP LED_start,LED_end,RX,GX,BX
end if

'komplexe Uhrzeitumsetzung fuer neopixel nur ansteuern, wenn sich etwas geaendert hat
if ( hh <> hh_alt ) or (mm <> mm_alt) or ( R <> R_alt ) or ( G <> G_alt ) or ( B <> B_alt )  then
  hh_alt = hh
  mm_alt = mm
  R_alt = R
  G_alt = G
  B_alt = B
  If(TYPUS$ = "8x8+4") then   
    mm_mod = mm_mod mod 5 
    if mm_mod > 0 then
      NEO.STRIP LED_end +1,LED_end + mm_mod,R,G,B
      NEO.STRIP LED_end + mm_mod + 1,LED_end + 5,RX,GX,BX
    else
       NEO.STRIP LED_end +1,LED_end + 5,RX,GX,BX
    end if
  endif   
  gosub showtime
else
  ' SMILY]
  if LED_blink > 0 then
    if ON = 1 then
      ON = 0
      NEO.STRIP LED_blink,LED_blink + 1,R/2,G/2,B/2
    else
      ON = 1
      NEO.STRIP LED_blink,LED_blink + 1,R,G,B
    end if
  end if
end if
return

' #######################################################################

' #######################################################################
showtime:
if TYPUS$ = "10x10" then
  gosub showtime_10x10
else
  gosub showtime_8x8
end if
return

' #######################################################################
showtime_10x10:
'alles auf Hintergrund 
NEO.STRIP 0,LED_END,RX,GX,BX,1
'ES:
NEO.STRIP 0,2,R,G,B,1
t$ = ""

'IST:
NEO.STRIP 3,5,R,G,B,1
'FUNF:
if ((mm >4) and (mm<10)) or ((mm >54) and (mm <60)) or ((mm >24) and (mm<30)) or ((mm >34) and (mm <40)) then
  NEO.STRIP 6,9,R,G,B,1
  t$ = t$ + "FUENF "
end if
'ZEHN:
if ((mm >9) and (mm<15)) or ((mm >49) and (mm <55)) then
  NEO.STRIP 10,13,R,G,B,1
  t$ = t$ + "ZEHN "
end if
'ZWANZIG:
if ((mm >19) and (mm<25)) or ((mm >39) and (mm <45)) then
  NEO.STRIP 14,19,R,G,B,1
  t$ = t$ + "ZWANZIG "
end if
'NACH1 nach-halb
if ((mm > 34) and (mm<40)) then
  NEO.STRIP 20,23,R,G,B,1
  t$ = t$ + "NACH "
end if
'VIERTEL:
if ((mm >14) and (mm<20)) or ((mm >44) and (mm <50)) then
  NEO.STRIP 24,29,R,G,B,1
  t$ = t$ + "VIERTEL "
end if
'VOR:
if ((mm >24) and (mm <30))or ((mm > 39) and (mm<60))  then
  NEO.STRIP 30,32,R,G,B,1
  t$ = t$ + "VOR "
end if
'NACH2:
if ((mm >4) and (mm<25)) then
  NEO.STRIP 33,35,R,G,B,1
  t$ = t$ + "NACH "
endif
'HALB:
if (mm>24) and (mm<40) then
  NEO.STRIP 36,39,R,G,B,1
  t$ = t$ + "HALB "
end if
' ab 5 vor halb immer stunde = stunde + 1
hhx=hh
if (mm >24) and (mm<60)  then
  hhx = hh+1
  if hhx = 13 then
    hhx = 1
  end if
end if
'1
if hhx=1 then
  NEO.STRIP 40,45,R,G,B,1
  t$ = t$ + "EINS "
end if
'2
if hhx=2 then
  NEO.STRIP 46,49,R,G,B,1
  t$ = t$ + "ZWEI "
end if
'3
if hhx=3 then
  NEO.STRIP 50,53,R,G,B,1
  t$ = t$ + "DREI "
end if
'4
if hhx=4 then
  NEO.STRIP 56,59,R,G,B,1
  t$ = t$ + "VIER "
end if
'5
if hhx=5 then
  NEO.STRIP 60,64,R,G,B,1
  t$ = t$ + "FUENF "
end if
'6
if hhx=6 then
  NEO.STRIP 65,69,R,G,B,1
  t$ = t$ + "SECHS "
end if
'7
if hhx=7 then
  NEO.STRIP 70,75,R,G,B,1
  t$ = t$ + "SIEBEN "
end if
'8
if hhx = 8 then
  NEO.STRIP 76,79,R,G,B,1
  t$ = t$ + "ACHT "
end if
'9
if hhx = 9 then
  NEO.STRIP 80,83,R,G,B,1
  t$ = t$ + "NEUN "
end if
'10
if hhx = 10 then
  NEO.STRIP 84,86,R,G,B,1
  t$ = t$ + "ZEHN "
end if
'11
if hhx = 11 then
  NEO.STRIP 87,89,R,G,B,1
  t$ = t$ + "ELF "
end if
'12
if hhx = 12 then
  NEO.STRIP 90,95,R,G,B,1
  t$ = t$ + "ZWOELF "
end if
'UHR:
if mm <5 then
  'bisher NEO.STRIP nur im RAM, nun mit refresh!!
  NEO.STRIP 96,99,R,G,B,0
  t$ = t$ + "UHR "
else
  'bisher NEO.STRIP nur im RAM, nun mit refresh!!
  NEO.STRIP 96,99,RX,GX,BX,0
end if
tt$ = t$
return

' #######################################################################

showtime_8x8:
'bis 4 nach:
if (mm<5)  then
  t$ = "genau "
  NEO.STRIP  0, 3,RX,GX,BX,1 'FUENF
  NEO.STRIP  4, 7,RX,GX,BX,1 'ZEHN
  NEO.STRIP 12,15,RX,GX,BX,1 'NACH
  NEO.STRIP  8,10,RX,GX,BX,1 'VOR
  NEO.STRIP 16,19,RX,GX,BX,0 'HALB
  goto STUNDEN
end if

'FUNF nach:
if (mm >4) and (mm<10)  then
  t$ = "FUENF nach "
  NEO.STRIP  0, 3,R,G,B,1 'FUENF
  NEO.STRIP  4, 7,RX,GX,BX,1 'ZEHN
  NEO.STRIP 12,15,R,G,B,1 'NACH
  NEO.STRIP  8,10,RX,GX,BX,1 'VOR
  NEO.STRIP 16,19,RX,GX,BX,1 'HALB
  goto STUNDEN
end if

'ZEHN nach:
if (mm >9) and (mm<15)  then
  t$ = "ZEHN nach "
  NEO.STRIP  0, 3,RX,GX,BX,1 'FUENF
  NEO.STRIP  4, 7,R,G,B,1 'ZEHN
  NEO.STRIP 12,15,R,G,B,1 'NACH
  NEO.STRIP  8,10,RX,GX,BX,1 'VOR
  NEO.STRIP 16,19,RX,GX,BX,1 'HALB
  goto STUNDEN
end if

'FUENFZEHN nach:
if (mm >14) and (mm<20)  then
  t$ = "FUENFZEHN nach "
  NEO.STRIP  0, 3,R,G,B,1 'FUENF
  NEO.STRIP  4, 7,R,G,B,1 'ZEHN
  NEO.STRIP 12,15,R,G,B,1 'NACH
  NEO.STRIP  8,10,RX,GX,BX,1 'VOR
  NEO.STRIP 16,19,RX,GX,BX,1 'HALB
  goto STUNDEN
end if

'ZEHN vor HALB:
if (mm >19) and (mm<25)  then
  t$ = "ZEHN vor HALB "
  NEO.STRIP  0, 3,RX,GX,BX,1 'FUENF
  NEO.STRIP  4, 7,R,G,B,1 'ZEHN
  NEO.STRIP 12,15,RX,GX,BX,1 'NACH
  NEO.STRIP  8,10,R,G,B,1 'VOR
  NEO.STRIP 16,19,R,G,B,1 'HALB
  goto STUNDEN
end if

'FUENF vor HALB:
if (mm >24) and (mm<30)  then
  t$ = "FUENF vor HALB "
  NEO.STRIP  0, 3,R,G,B,1 'FUENF
  NEO.STRIP  4, 7,RX,GX,BX,1 'ZEHN
  NEO.STRIP 12,15,RX,GX,BX,1 'NACH
  NEO.STRIP  8,10,R,G,B,1 'VOR
  NEO.STRIP 16,19,R,G,B,1 'HALB
  goto STUNDEN
end if

'HALB:
if (mm >29) and (mm<35)  then
  t$ = "HALB "
  NEO.STRIP  0, 3,RX,GX,BX,1 'FUENF
  NEO.STRIP  4, 7,RX,GX,BX,1 'ZEHN
  NEO.STRIP 12,15,RX,GX,BX,1 'NACH
  NEO.STRIP  8,10,RX,GX,BX,1 'VOR
  NEO.STRIP 16,19,R,G,B,1 'HALB
  goto STUNDEN
end if

'FUENF nach HALB:
if (mm >34) and (mm<40)  then
  t$ = "FUENF nach HALB "
  NEO.STRIP  0, 3,R,G,B,1 'FUENF
  NEO.STRIP  4, 7,RX,GX,BX,1 'ZEHN
  NEO.STRIP 12,15,R,G,B,1 'NACH
  NEO.STRIP  8,10,RX,GX,BX,1 'VOR
  NEO.STRIP 16,19,R,G,B,1 'HALB
  goto STUNDEN
end if

'ZEHN nach HALB:
if (mm >39) and (mm<45)  then
  t$ = "ZEHN nach HALB "
  NEO.STRIP  0, 3,RX,GX,BX,1 'FUENF
  NEO.STRIP  4, 7,R,G,B,1 'ZEHN
  NEO.STRIP 12,15,R,G,B,1 'NACH
  NEO.STRIP  8,10,RX,GX,BX,1 'VOR
  NEO.STRIP 16,19,R,G,B,1 'HALB
  goto STUNDEN
end if

'FUENFZEHN vor:
if (mm >44) and (mm<50)  then
  t$ = "FUENFZEHN vor "
  NEO.STRIP  0, 3,R,G,B,1 'FUENF
  NEO.STRIP  4, 7,R,G,B,1 'ZEHN
  NEO.STRIP 12,15,RX,GX,BX,1 'NACH
  NEO.STRIP  8,10,R,G,B,1 'VOR
  NEO.STRIP 16,19,RX,GX,BX,1 'HALB
  goto STUNDEN
end if

'ZEHN vor :
if (mm >49) and (mm<55)  then
  t$ = "ZEHN vor "
  NEO.STRIP  0, 3,RX,GX,BX,1 'FUENF
  NEO.STRIP  4, 7,R,G,B,1 'ZEHN
  NEO.STRIP 12,15,RX,GX,BX,1 'NACH
  NEO.STRIP  8,10,R,G,B,1 'VOR
  NEO.STRIP 16,19,RX,GX,BX,1 'HALB
  goto STUNDEN
end if

'FUENF vor :
if (mm >54) and (mm<60)  then
  t$ = "FUENF vor "
  NEO.STRIP  0, 3,R,G,B,1 'FUENF
  NEO.STRIP  4, 7,RX,GX,BX,1 'ZEHN
  NEO.STRIP 12,15,RX,GX,BX,1 'NACH
  NEO.STRIP  8,10,R,G,B,1 'VOR
  NEO.STRIP 16,19,RX,GX,BX,1 'HALB
  goto STUNDEN
end if

STUNDEN:
' ab 10 vor halb immer stunde = stunde + 1
hhx=hh
if (mm >19) and (mm<60)  then
  hhx = hh+1
  if hhx = 13 then
    hhx = 1
  end if
end if

NEO.STRIP 20,63,RX,GX,BX,1

'1
if hhx=1 then
  NEO.STRIP 24,27,R,G,B,1
  NEO.STRIP 28,63,RX,GX,BX,0
  t$ = t$ + "EINS "
end if

'2
if hhx=2 then
  NEO.STRIP 24,27,RX,GX,BX,1
  NEO.STRIP 35,36,R,G,B,1
  NEO.STRIP 45,46,R,G,B,0
  t$ = t$ + "ZWEI "
end if

'3
if hhx=3 then
  NEO.STRIP 35,36,RX,GX,BX,1
  NEO.STRIP 43,46,R,G,B,0
  t$ = t$ + "DREI "
end if
'4
if hhx=4 then
  NEO.STRIP 20,23,R,G,B,1
  NEO.STRIP 43,46,RX,GX,BX,0
  t$ = t$ + "VIER "
end if

'5
if hhx=5 then
  NEO.STRIP 20,23,RX,GX,BX,1
  NEO.PIXEL 39,R,G,B,1
  NEO.PIXEL 47,R,G,B,1
  NEO.PIXEL 55,R,G,B,1
  NEO.PIXEL 63,R,G,B,0
  t$ = t$ + "FUENF "
end if

'6
if hhx=6 then
  NEO.STRIP 27,31,R,G,B,1
  NEO.STRIP 32,63,RX,GX,BX,0
  t$ = t$ + "SECHS "
end if

'7
if hhx=7 then
  NEO.STRIP 32,34,R,G,B,1
  NEO.STRIP 40,42,R,G,B,1
  NEO.STRIP 27,31,RX,GX,BX,0
  t$ = t$ + "SIEBEN "
end if

'8
if hhx = 8 then
  NEO.STRIP 56,59,R,G,B,1
  NEO.STRIP 32,34,RX,GX,BX,1
  NEO.STRIP 40,42,RX,GX,BX,0
  t$ = t$ + "ACHT "
end if

'9
if hhx = 9 then
  NEO.STRIP 52,55,R,G,B,1
  NEO.STRIP 56,59,RX,GX,BX,0
  t$ = t$ + "NEUN "
end if

'10
if hhx = 10 then
  NEO.STRIP 48,51,R,G,B,1
  NEO.STRIP 52,55,RX,GX,BX,0
  t$ = t$ + "ZEHN "
end if
'11
if hhx = 11 then
  NEO.STRIP 61,63,R,G,B,1
  NEO.STRIP 48,51,RX,GX,BX,0
  t$ = t$ + "ELF "
end if
'12
if hhx = 12 then
  NEO.STRIP 35,39,R,G,B,1
  NEO.STRIP 61,63,RX,GX,BX,0
  t$ = t$ + "ZWOELF "
end if
tt$ = t$
return

' #######################################################################
STARTWERTE:

ZEIT$ = ""
IPADR$ = WORD$(IP$,1)
TYPUS$    = ""
TYPUS_alt$= "x" 
Settings$ = ""

tt$    = "ES IST ..."
t$     = tt$
R      = 0
G      = 60
B      = 50
R_alt  = R + 1
G_alt  = G
B_alt  = B
RX     = 5
GX     = 5
BX     = 5
RX_alt = RX
GX_alt = GX
BX_alt = BX
MODUS$ = "UHR"

mm     = 1
mm_alt = 2
hh     = 1
hh_alt = 2
ss     = 1
mm_mod = 0
ON     = 0

' !!!!!!!!!!!!!!!!!!!!!!!!!!
gosub EINSTELLUNGEN_LESEN

return

' #########################################################################
WebInterface:
cls
autorefresh 1000
'wlog time$
a$=""
a$ = a$ + "- - - W O R D C L O C K - - "

a$ = a$ + "################## "+ ver$ a$ = a$ + " #####################" if IPADR$= "192.168.4.1" then a$ = a$ + |Die Uhr ist gerade NICHT in einem WLAN angemeldet
| a$ = a$ + |Evtl sind die Anmeldedaten falsch ... | a$ = a$ + |oder die Entfernung zu dem WLAN-AP ist zu gross. | a$ = a$ + |Bitte auf der CONFIG-PAGE | a$ = a$ + |oben bei StationMode die WLAN-SSID und das Kennwort | a$ = a$ + |eintragen bzw berichtigen. | a$ = a$ + |Weiter zur CONFIG-PAGE | else a$ = a$ + textbox$(zeit$) + " - - - - " + TEXTBOX$(tt$) a$ = a$ + " Farbe der aktiven Zeichen: " a$ = a$ + SLIDER$(R,0,180)+ "R:" + TEXTBOX$(R) + " " a$ = a$ + SLIDER$(G,0,180)+ "G:" + TEXTBOX$(G) + " " a$ = a$ + SLIDER$(B,0,180)+ "B:" + TEXTBOX$(B) + " " a$ = a$ + "Farbe des Hintergrunds: " a$ = a$ + SLIDER$(RX,0,30) + "RX:" + TEXTBOX$(RX) + " " a$ = a$ + SLIDER$(GX,0,30) + "GX:" + TEXTBOX$(GX) + " " a$ = a$ + SLIDER$(BX,0,30) + "BX:" + TEXTBOX$(BX) + " " a$ = a$ +" " + LISTBOX$( MODUS$, "UHR,COLOR_DEMO,DEMO","cssLB")+ " = Betriebs-Modus" a$ = a$ +" " + LISTBOX$( TYPUS$, "8x8,8x8+4,10x10","cssLB")+ " = Uhr-Hardware-Typ" a$ = a$ + " " a$ = a$ + BUTTON$("EINSTELLUNGEN SICHERN", EINSTELLUNGEN_SCHREIBEN,"cssBT") end if a$ = a$ + "################## "+ ver$ + " #####################" a$ = a$ + cssid$("cssLB"," width:150px;height:2em; font-size:1.0em; ") a$ = a$ + cssid$("cssBT"," width:320px;height:2em; font-size:1.0em; border-radius:1.1em; padding:.5em") html a$ a$="" return ' ############################################################## COLOR_DEMO: mm= 0 for yy= 0 to LED_SPALTEN for xx = 0 to LED_SPALTEN rr = 80 - 10 * xx gg = 10 * xx bb = 10 * yy NEO.PIXEL xx + LED_SPALTEN * yy,rr,gg,bb,1 NEO.PIXEL LED_end + 1 - (xx + LED_SPALTEN * yy),rr,gg,bb,0 next xx next yy for i = LED_end to 2 step -1 NEO.PIXEL i,rnd(100),rnd(100),rnd(100),1 NEO.PIXEL LED_end-i,rnd(100),rnd(100),rnd(100),0 next i for yy= 0 to LED_SPALTEN for xx = 0 to LED_SPALTEN bb = 80 - 10 * xx gg = 10 * xx rr = 10 * yy NEO.PIXEL xx + 8 * yy,rr,gg,bb,1 NEO.PIXEL LED_end + 1- (xx + 8 * yy),rr,gg,bb,0 next xx next yy for yy= LED_SPALTEN to 0 step -1 for xx = 0 to LED_SPALTEN rr = 80 - 10 * xx gg = 10 * xx bb = 10 * yy NEO.STRIP 0,LED_end,rr,gg,bb pause 100 next xx next yy for yy= 0 to LED_SPALTEN for xx = 0 to LED_SPALTEN rr = 80 - 10 * xx gg = 10 * xx bb = 10 * yy NEO.STRIP 0,LED_end,rr,gg,bb 'pause 100 next xx next yy NEO.STRIP 0,LED_end,RX,GX,BX return ' ############################################################## EINSTELLUNGEN_LESEN: if file.exists("/Wordclock_settings") then SETTINGS$ = file.read$("/Wordclock_settings") if SETTINGS$ <> "" then R = val(file.read$("/Wordclock_R")) G = val(file.read$("/Wordclock_G")) B = val(file.read$("/Wordclock_B")) RX = val(file.read$("/Wordclock_RX")) GX = val(file.read$("/Wordclock_GX")) BX = val(file.read$("/Wordclock_BX")) TYPUS$= file.read$("/Wordclock_TYPUS") endif if TYPUS$ = "" then TYPUS$ = "8x8" return ' ############################################################## EINSTELLUNGEN_SCHREIBEN: ' schreibt die Einstellungen in einzelne Dateien im Flash tt$ = "Werte schreiben" xxx$ = "Wordclock-Daten" file.save "/Wordclock_settings",xxx$ file.save "/Wordclock_TYPUS",TYPUS$ file.save "/Wordclock_R", str$(R) file.save "/Wordclock_G", str$(G) file.save "/Wordclock_B", str$(B) file.save "/Wordclock_RX", str$(RX) file.save "/Wordclock_GX", str$(GX) file.save "/Wordclock_BX", str$(BX) save_stat$ = "OK" tt$ = "Werte wurden gesichert" return ' ############################################################## ShowIPADR: 'einzelne stellen der IP-Adresse als Stundenwert anzeigen ' 0 = 10 ' Punkt = Anzeige komplett GRUEN ' NEO.STRIP 0,LED_end + (m_LED *4),50,0,0 pause 900 NEO.STRIP 0,LED_end + (m_LED *4),0,0,0 IPADR$ = WORD$(IP$,1) RR=R:GG=G:BB=B ii=1 R=80:G=50:B=0 pp=0 for i = 1 to len(IPADR$) tt$ =mid$(IPADR$,i,1) if tt$ = "." then pp =pp + 1 NEO.STRIP 0,LED_end,0,40,0 pause 400 if pp=3 then R=0 G=100 B=0 endif else mm=0 hh=val(tt$) if hh=0 then hh= 10 end if gosub showtime end if pause 1000 NEO.STRIP 0,LED_end,RX,GX,BX 'neo.cls() next i NEO.STRIP 0,LED_end,0,40,40 pause 2000 NEO.STRIP 0,LED_end,RX,GX,BX R=RR:G=GG:B=BB return ' ############################################################## HW_TYPUS: 'Hardwaretyp der Uhr if (TYPUS$ = "8x8") or (TYPUS$ = "8x8+4") or (TYPUS$ = "") then '8*8-MATRIX-Uhr '############### LED_start = 0 LED_end = 63 LED_SPALTEN = 7 '= LED Anzahl pro Zeile minus 1!!!!! LED_blink = 0 m_LED = 0 ' 0 zusaetzliche Minuten-LEDs vorhanden = 0 end if if TYPUS$ = "8x8+4" then m_LED = 1 ' 4 zusaetzliche Minuten-LEDs vorhanden = 1 end if if TYPUS$ = "10x10" then '10*10-MATRIX-Uhr '############### LED_start = 0 LED_end = 99 LED_SPALTEN = 9 '= LED Anzahl pro Zeile minus 1!!!!! LED_blink = 54 m_LED = 0 ' 0 zusaetzliche Minuten-LEDs vorhanden = 0 end if return ' ############################################################### NEO_SETUP: ' !!!!!!!!!!! NEOPIXEL geht nur noch an GPIO02=D4 !!!!!!!!!!!!!!! 'Anzahl der LEDs incl Minuten-LED neo.setup LED_end + (m_LED * 4) 'neo.setup 120 neo.strip LED_START, LED_END,0,0,0 return ' ##############################################################