Teil 10 des Rasberry Pi I2C Projektes

Mehr Funktionen im User Interface

In diesem Teil geht es weiter mit dem User Interface. Die Übersichtsseite habe ich mit GLADE noch einmal neu gemacht. Das hat etwas Arbeit gemacht aber es hat sich gelohnt. Nachdem ich mir noch ein paar Videos zu GLADE angeschaut habe hatte ich festgestellt, in einem Fenster sollte man ein fixed Grid verwenden. Damit lassen sich dann die Widgets genauer positionieren als mit einer Tabelle.

Desweiteren fehlter der Bereich, das Widget mit dem Menü. Das ist jetzt auch enthalten.

Das neu erstellte Fenster mit der Menüstruktur und ausgeklappter Combo-Box für AD-0

Die Relais konnten bereits mit den Schaltern geschaltet werden. Das ist also quasi fertig und bedarf erst einmal keiner weiteren Aktion. Der AD-Wandler war bisher nur grundlegend eingebunden. Es fehlt noch die Umschaltung der Messbereiche. Diese habe ich in Combo-Boxen mit Textauswahl realisiert. Erst einmal für AD-0, die weiteren AD-Wandler Kanäle sind jetzt quasi copy & paste.

AD-0 Messbereich 4.096V

Es werden die AD-Kanäle abgefragt und anhand der richtigen Messbereiche werden die Spannungen eingetragen, angezeigt. Spannend wird es wenn der Messbereich überschritten wird. Dazu habe ich mir überlegt in der Anzeige *.***V auszugeben. Das sollte deutlich machen das der Bereich überschritten ist. Mit dem am AD-0 angeschlossenen Netzteil lässt sich das gut überprüfen.

Messbereich überschritten!

Das auslesen der Combo-Box ist eigentlich auch ganz simple. In der Beschreibung von GTK findet man dazu entsprechenden Code. Diesen habe ich auf meine Umgebung angepasst und als Signal habe ich den Trigger „changed“ genommen. Dabei wird der ausgewählte Wert in der Combo Box mit übergeben. Nachfolgend der Codeschnipsel

void on_comboboxtext1_changed (GtkComboBox *widget, gpointer user_data) {
    GtkComboBox *combo_box = widget;

    gchar *distro = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box));
    //
    // Je nach eingestelltem Messbereich setze die globale Variable im IOData Array
    if (strcmp(distro,"4,096") == 0) IOData.AD_Messbereich[0] = 1;
    if (strcmp(distro,"2,048") == 0) IOData.AD_Messbereich[0] = 2;
    if (strcmp(distro,"1.024") == 0) IOData.AD_Messbereich[0] = 3;
    if (strcmp(distro,"0,512") == 0) IOData.AD_Messbereich[0] = 4;
    if (strcmp(distro,"0,256") == 0) IOData.AD_Messbereich[0] = 5;

    g_free(distro);
    //
    // Lese den AD-Wandler ein und aktualisiere die Labels
    on_refresh_clicked_AD();
}