Samstag, 16. Februar 2019

13. Teil iRadio: Skalensimulation Lorenz C2 V2

 unter /home/pi/iRadio/display/x11/LorenzC2_V2 findet sich eine besondere Simulation. Sie wurde entwickelt um eine Lorenz C2 Skala auf einem 5" Display darzustellen und hat als features einen Standby-Mode, in dem die Uhrzeit angezeigt wird sowie eine Weckerfunktion.

 

Die Beschreibung in der README.txt ist sehr knapp gehalten, weswegen ich hier etwas ausführlicher auf Installation und Bedienung eingehen will.

Die Zentrierung der Skala, der Zeigerelemente und der angezeigten Texte:

die passende Grundauflösung wird in der /boot/config.txt eingestellt:

max_usb_current=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt=800 480 60 6 0 0 0
 

Die grafischen Elemente passen direkt auf ein Display mit der Auflösung 800x480. Soll aber mal eine andere Auflösung verwendet werden oder das Skalenbild ausgetauscht werden will ich zeigen an welchen Stellen Anpassungen nötig sind.

Schauen wir uns zuerst den Quellcode sdlskale.cxx an:

Hier wird die native Auflösung des display eingetragen:

#define SKALE_HOEHE 480
#define SKALE_BREITE 800

In der gleichen Auflösung muss auch die hinterlegte Grafik skale.png gezeichnet sein.

Hinweis: um die Skala bildschirmfüllend darzustellen muss evt. in der /boot/config.txt oder in raspi-config der overscan-Modus ausgeschaltet werden.

An dieser Stelle justieren wir die Zeiger zur Skala:

// Position und Dimension des Skalenzeigers
SDL_Rect ZeigerRect;
ZeigerRect.x = 240; ZeigerRect.y = 110;
ZeigerRect.w = 320; ZeigerRect.h = 320;

x und y entsprechen den Positionen des Drehpunktes der Zeiger auf der Skala, also dem Zeigermittelpunkt.

w und h beeinflussen die Größe der Zeiger. Da die Zeiger in einem Quadrat gezeichnet werden und der Drehpunkt in dessen Mittelpunkt liegt sind die beiden Werte gleich. Im Gegensatz zur Skala können die Zeiger auch größer gezeichnet sein und werden auf die w und h - Parameter skaliert.

zeiger_stunde.png und zeiger_minute.png sind im einfachsten Fall Kopien der zeiger.png, wobei aber jeweils eine Zeigerhälfte wegradiert wird.

Alle Zeiger-Grafiken müssen einen transparenten Hintergrund haben, da sie ÜBER der Skala liegen.

Der nächste Punkt, wo eine manuelle Positionsanpassung notwendig werden kann, ist die Einblendung des Stationsnamens:

// Position und Dimension Programmanzeige
int texW = 0; int texH = 0;
SDL_QueryTexture(textur_prgtitel, NULL, NULL, &texW, &texH);
SDL_Rect dstrect = { 120, 450, texW, texH };

gleiches gilt für die Anzeige der Betriebsart (NET = Internetradio, BT = Bluetooth, STB = Standby):

// Position und Dimension Betriebsmodi
texW = 0; texH = 0;
SDL_QueryTexture(textur_modi, NULL, NULL, &texW, &texH);
SDL_Rect dstrect_modi = { 710, 360, texW, texH };

 

Bluetooth aktivieren:

cd /home/pi/iRadio/bt-speaker
sudo ./install.sh

bitte die Reihenfolge beachten. Nachdem die C2-Skala installiert ist darf das BT-script nicht mehr ausgeführt werden. Oder die Dateien connect und disconnect müssen entsprechend der readme im LorenzC2_V2-Ordner neu umkopiert werden.

Nun werden die Dateien connect und disconnect aus dem LorenzC2_V2 Paket für den Bluetoothservice nach /etc/bt_speaker/hooks/ kopiert:

sudo cp ~/iRadio/display/x11/LorenzC2_V2/connect /etc/bt_speaker/hooks
sudo cp ~/iRadio/display/x11/LorenzC2_V2/disconnect /etc/bt_speaker/hooks

Bauen des Steuerungs-daemon

für eine Tastenbedienung wird in der Quelldatei stby_gpiod.c die gpio-Belegung festgelegt:

#define PIN_PRG_HOCH RPI_GPIO_P1_11
#define PIN_PRG_RUNTER RPI_GPIO_P1_12
#define PIN_PRG_AUS RPI_GPIO_P1_08
#define PIN_PRG_AN RPI_GPIO_P1_10

beim Kompilieren der Simulation mit der build.sh wird der daemon stby_gpiod erzeugt, der dann als gpiod händisch nach /usr/bin kopiert und in die rc.local eingetragen werden muss.

bei Verwendung eines Drehencoders ist die Quelldatei stby_rotary.c zuständig:

#define RoAPin 0 // GPIO-Pin 17, Pinnummer 11
#define RoBPin 1 // GPIO-Pin 18, Pinnummer 12
#define RoSWPin 15 // Pinnummer 8
#define PowerPin 4 // GPIO-Pin 23, Pinnummer 16
 

der PowerPin wird ebenfalls in der Datei connect im gleichen Pfad geändert:

sudo nano connect

dort eintragen:

// NF-Stufe an Pin 16 anschalten
gpio mode 4 out
gpio write 4 1
und speichern.

 die build.sh erzeugt den daemon stby_rotary_gpiod, der ebenfalls von Hand alternativ als gpiod nach /usr/bin kopiert wird und in der rc.local gestartet wird.

Falls das Koieren scheitert weil schon ein gpio-Dienst läuft kann dieser mit folgender Anweisung gekillt werden:

sudo killall -9 gpiod
 

Kompilation der kompletten Simulation

das script build.sh kompiliert die komplette Simulation. Die daemonen sdlskale, weckerd und gpiod müssen in der rc.local eingetragen werden.

Beispiel dafür:

..
/usr/bin/vlcd
&
#/usr/bin/displayd & //auskommentiert da hier nicht benötigt)
/usr/bin/gpiod &
/usr/bin/weckerd &
/usr/bin/gpiod_volume & //falls noch ein daemon für die Lautstärkeeinstellung erzeugt wurde
startx /home/pi/iRadio/display/x11/LorenzC2_V2/sdlskale &
..

Bedienkonzept

Der Drehencoder hat nun folgende Aufgaben:

Während das Internetradio läuft, klar Programmumschaltung.
Drückt man den Taster des Encoders kurz (länger als 500ms aber kürzer als 1.2 Sekunden) geht das Radio in den Standbymodus, eine externe NF-Stufe wird über WiringPi Pin 4 ausgeschaltet (Low-Pegel).
Drückt man den Taster des Encoders lange (länger als 2.5 Sekunden), wird der Wecker ein- bzw. wieder ausgeschaltet. Einen eingeschalteten Wecker erkennt man am Weckzeiger im Stby-Bildschirm. Ist der Wecker deaktiviert, dann wird der Weckzeiger nicht in der Uhr gezeichnet.

Koppelt man ein Mediengerät mit dem iRadio, geht das Display in den BT-Modus und eine NF-Stufe erhält über WiringPi Pin 4 die Stromfreigabe (3.3 V High-Pegel).
Achtung kann nur 3.3V max. 10 mA!, Treiberstufe + Optokoppler empfohlen.

Wird der PowerPin in stby_rotary.c abgeändert, muss er auch in der Datei connect angepasst werden!

// NF-Stufe an Pin 4 anschalten
gpio mode 4 out
gpio write 4 1


In diesem Fall wird also der Wert 4 an den jeweiligen "PowerPin" angepasst. Natürlich muss eine geänderte connect auch nochmal nach /etc/bt_speaker/hooks/ kopiert werden!


Keine Kommentare:

Kommentar veröffentlichen