Flash LED programmierung
This commit is contained in:
parent
defe4e3c03
commit
20882feeca
|
@ -0,0 +1,126 @@
|
||||||
|
"""
|
||||||
|
Soft-LED
|
||||||
|
|
||||||
|
Mögliche Basisfarben:
|
||||||
|
Rot, Grün, Blau, Orange, Gelb, Aqua, Violett, Weiß
|
||||||
|
|
||||||
|
Funktionen
|
||||||
|
Farbe einstellen
|
||||||
|
Helligkeit einstellen
|
||||||
|
Blitzen
|
||||||
|
Einschalten
|
||||||
|
Ausschalten
|
||||||
|
Leuchten, limitiert auf eine Zeitdauer
|
||||||
|
|
||||||
|
TODO Eigene Drawingarea im Frontend
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import math
|
||||||
|
from gi.repository import GLib, Gtk
|
||||||
|
|
||||||
|
colordef = {
|
||||||
|
'red': ((1.0, 0.0, 0.0), "0xff0000"),
|
||||||
|
'green': ((0.0, 1.0, 0.0), "0x00ff00"),
|
||||||
|
'blue': ((0.0, 0.0, 1.0), "0x0000ff"),
|
||||||
|
'orange': ((1.0, 0.6, 0.0), "0xff9900"),
|
||||||
|
'yellow': ((1.0, 1.0, 0.0), "0xffff00"),
|
||||||
|
'aqua': ((0.2, 0.4, 1.0), "0x3366ff"),
|
||||||
|
'violet': ((1.0, 0.0, 0.4), "0xff0066"),
|
||||||
|
'white': ((1.0, 1.0, 1.0), "0xffffff")
|
||||||
|
}
|
||||||
|
|
||||||
|
class LED():
|
||||||
|
|
||||||
|
def __init__(self, parent):
|
||||||
|
# parent muß ein Gtk.Fixed-Objekt sein
|
||||||
|
self._colorname = ""
|
||||||
|
self._color = (0, 0, 0) # Farbe schwarz ist aus
|
||||||
|
self._brightness = 0.0
|
||||||
|
self._color_off = (0.3725, 0.4275, 0.6078) # RGB(95, 109, 155)
|
||||||
|
self._pos_x = 30
|
||||||
|
self._pos_y = 16
|
||||||
|
self._radius = 4
|
||||||
|
self._flashcounter = 0
|
||||||
|
|
||||||
|
# Box oberhalb des Displays
|
||||||
|
self._da = Gtk.DrawingArea()
|
||||||
|
parent.put(self._da, 64, 56)
|
||||||
|
self._da.set_size_request(400, 32)
|
||||||
|
self._da.connect("draw", self.on_draw)
|
||||||
|
|
||||||
|
def on_draw(self, widget, ctx):
|
||||||
|
#Debug
|
||||||
|
#ctx.set_source_rgb(1, 0, 0)
|
||||||
|
#ctx.rectangle(0, 0, 400, 32)
|
||||||
|
#ctx.stroke()
|
||||||
|
ctx.set_source_rgb(*self._color_off)
|
||||||
|
ctx.arc(self._pos_x, self._pos_y, self._radius, 0, 2*math.pi)
|
||||||
|
ctx.fill_preserve()
|
||||||
|
ctx.set_source_rgb(0, 0, 0) # Schwarzer Rand
|
||||||
|
ctx.stroke()
|
||||||
|
ctx.arc(self._pos_x, self._pos_y, self._radius, 0, 2*math.pi)
|
||||||
|
ctx.stroke()
|
||||||
|
|
||||||
|
def on_timer(self):
|
||||||
|
self.switchOff()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def on_flash(self):
|
||||||
|
if self._flashcounter > 0:
|
||||||
|
self._flashcounter -=1
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def switchOn(self, duration=None):
|
||||||
|
self._brightness = 1.0
|
||||||
|
self._ctx.save()
|
||||||
|
self._ctx.set_source_rgb(*self._color)
|
||||||
|
self._ctx.arc(self._pos_x, self._pos_y, self._radius, 0, 2*math.pi)
|
||||||
|
self._ctx.fill_preserve()
|
||||||
|
self._ctx.set_source_rgb((0, 0, 0)) # Schwarzer Rand
|
||||||
|
self._ctx.stroke()
|
||||||
|
self._ctx.restore()
|
||||||
|
if self._duration:
|
||||||
|
GLib.timeout_add_seconds(duration, self.on_flash)
|
||||||
|
|
||||||
|
|
||||||
|
def switchOff(self):
|
||||||
|
self._brightness = 0.0
|
||||||
|
self._ctx.save()
|
||||||
|
self._ctx.set_source_rgb(*self._color_off)
|
||||||
|
self._ctx.arc(self._pos_x, self._pos_y, self._radius, 0, 2*math.pi)
|
||||||
|
self._ctx.fill_preserve()
|
||||||
|
self._ctx.set_source_rgb((0, 0, 0)) # Schwarzer Rand
|
||||||
|
self._ctx.stroke()
|
||||||
|
self._ctx.restore()
|
||||||
|
|
||||||
|
def doFlash(self, count=1):
|
||||||
|
if (self._brightness > 0) or (count < 0):
|
||||||
|
# Wenn aktiv oder falscher Parameter, dann passiert nichts
|
||||||
|
return
|
||||||
|
if count > 10:
|
||||||
|
# maximal 10 Blitze
|
||||||
|
self._flashcounter = 10
|
||||||
|
else:
|
||||||
|
self._flashcounter = count
|
||||||
|
GLib.timeout_add_seconds(0.2, self.on_flash)
|
||||||
|
|
||||||
|
def setColor(self, colorname, brightness=1.0):
|
||||||
|
#TODO Helligkeit einstellen
|
||||||
|
colorname = colorname.lower()
|
||||||
|
if not colorname in colordef:
|
||||||
|
return
|
||||||
|
self._colorname = colorname
|
||||||
|
self._color = colordef[colorname][0]
|
||||||
|
|
||||||
|
def getColor(self):
|
||||||
|
return self._color
|
||||||
|
|
||||||
|
def getColorAsHex(self):
|
||||||
|
# TODO
|
||||||
|
return None
|
||||||
|
|
||||||
|
def setBrightness(self, newbrightness):
|
||||||
|
# 0% bis 100%, ausgehend von der aktuellen Basisfarbe
|
||||||
|
pass
|
11
obp60v.py
11
obp60v.py
|
@ -109,6 +109,7 @@ import uuid
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from appdata import AppData
|
from appdata import AppData
|
||||||
|
from led import LED
|
||||||
import nmea0183
|
import nmea0183
|
||||||
import pages
|
import pages
|
||||||
|
|
||||||
|
@ -359,13 +360,21 @@ class Frontend(Gtk.Window):
|
||||||
|
|
||||||
self.connect("draw", self.on_draw)
|
self.connect("draw", self.on_draw)
|
||||||
|
|
||||||
|
self.fixed = Gtk.Fixed()
|
||||||
|
self.add(self.fixed)
|
||||||
|
|
||||||
|
# OBP GUI
|
||||||
self.da = Gtk.DrawingArea()
|
self.da = Gtk.DrawingArea()
|
||||||
self.da.add_events(Gdk.EventMask.BUTTON_PRESS_MASK|Gdk.EventMask.BUTTON_RELEASE_MASK)
|
self.da.add_events(Gdk.EventMask.BUTTON_PRESS_MASK|Gdk.EventMask.BUTTON_RELEASE_MASK)
|
||||||
self.add(self.da)
|
self.fixed.put(self.da, 0, 0)
|
||||||
|
self.da.set_size_request(530, 555) # für fixed benötigt
|
||||||
self.da.connect("draw", self.da_draw)
|
self.da.connect("draw", self.da_draw)
|
||||||
self.da.connect('button-press-event', self.da_button_press)
|
self.da.connect('button-press-event', self.da_button_press)
|
||||||
self.da.connect('button-release-event', self.da_button_release)
|
self.da.connect('button-release-event', self.da_button_release)
|
||||||
|
|
||||||
|
# Flash LED
|
||||||
|
self.flashled = LED(self.fixed) # Soft Flash-LED
|
||||||
|
|
||||||
self.button_clicked = 0 # Geklickter Button vor Loslassen
|
self.button_clicked = 0 # Geklickter Button vor Loslassen
|
||||||
self.keylock = False
|
self.keylock = False
|
||||||
self.pages = profile
|
self.pages = profile
|
||||||
|
|
Loading…
Reference in New Issue