Project - Simple Relay

Simple relay control, offering onscreen On and Off buttons with LED indicator.
Also a Toggle button that changes colour from green when off to red when on.

Obviously you are not likely to need the LED as well as the coloured button,
but better to offer both options so you can choose what to keep or remove.
The Toggle button styling can be applied to the On and Off buttons if wished.

Configured for the standard Sonoff pins - 0 for button, 12 for relay, 13 for LED.
The hardware button toggles the relay On or Off, the LED echoes relay status.

Basic:
title$  = "Simple Relay"
led = 1                                            'Onscreen LED$ variable, 0=on 1=off,
ledpin = 13                                     'Sonoff green LED (active low)
ledoff = 1                                        'Sonoff LED Off state
pin.mode ledpin, output
pin(ledpin) = ledoff
relaypin = 12                                  'Sonoff relay (active high)
relayoff = 0                                     'Sonoff Relay Off state
pin.mode relaypin, output
pin(relaypin) = 0
buttonpin = 0                                  'Sonoff button (active low)
pin.mode buttonpin, input, pullup
interrupt buttonpin, pressed
ledstat$ = "green"                          'Toggle button colour
gosub paint
onhtmlreload paint
wait


paint:
cls
a$ = a$ + |<br><div style='display: table; margin-right:auto;margin-left:auto;text-align:center;'>|
a$ = a$ + title$ + "<br><br>"
a$ = a$ + led$(led)
a$ = a$ + "<br><br>" + button$("Instant On",relayon) + string$(9,"&nbsp;") + button$("Toggle", toggle, "butled") + string$(9,"&nbsp;") + button$("Instant Off",relayoff)
a$ = a$ + cssid$("butled", "height:3em; font-size:1.5em; border-radius:.4em; padding:.5em; color:white; background:" + ledstat$ + ";")
a$ = a$ + |</div>|
html a$
a$ = ""
return

pressed:
if pin(buttonpin) = 0 then gosub toggle
return

relayon:
if pin(relaypin) = relayoff then
 if relayoff = 0 then pin(relaypin) = 1 else pin(relaypin) = 0
endif
pin(ledpin) = 1 - ledoff
html cssid$("butled", "background:red;")
led = 0
refresh
return

relayoff:
refresh
if pin(relaypin) <> relayoff then pin(relaypin) = relayoff
pin(ledpin) = ledoff
html cssid$("butled", "background:green;")
led = 1
refresh
return

toggle:
if pin(relaypin) = relayoff then gosub relayon else gosub relayoff
return

'-------------------- End ---------------------





Margaret Baker,
Mar 2, 2018, 3:59 PM
v.1