Reset-Taster am GPIO und Programmierung in Icon

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Holger,

    gestern habe ich eine kleine Animation programmiert. Ein Rad - ein wenig mit 3D-Effekten modelliert - rotiert. Mich würde es wahnsinnig interessieren, ob's auf Deinem 1,8"-Display funktioniert. Insbesondere deswegen, weil da einige Funktionen enthalten sind, die relativ selten zum Einsatz kommen. Unter anderem werden verborgene Fenster dargestellt, auf denen Einzelbilder abgelegt werden. Diese werden dann auf den sichtbaren Bildschirm kopiert und erzeugen den Eindruck einer Bewegung. Interessant ist die Geschwindigkeit. Da flimmert nichts, da flackert nichts - zumindest auf meinem Bildschirm.

    Das Interessante ist, dass es zuerst nur ein stehendes Bild gab - bei Vollauslastung des Prozessors. Erst nach Einbau einer Verzögerungsschleife konnte man die einzelnen Bilder erkennen, die dann einen flüssigen Ablauf ergaben.

    Wenn's Dich interessiert, stelle ich hier heute Abend den Quellcode rein.


    Viel Spaß!

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,

    ich habe auch schon in die PDF (Icon Buch... gb1up.pdf) geschaut. Das ist ja voll cool was man da an Grafik-Sachen machen kann.

    Ach und mit dem 1,8" Display... naja... Das ist nicht so cool. Das ist zu klein.
    Du musst dir vorstellen, wenn ich meinen Raspi starte, läuft sofort der "bootscreen" durch und endet mit Benutzer - Passwort. Also es startet nur die Konsole. Ich kann aus der Konsole nicht Icon-Programme mit Grafik/Fenster anzeigen. Erst mit startx, in meinem Fall mit "FRAMEBUFFER...usw./dev/Fb1 startx , startet die Raspi Grafik Oberfläche.
    Jetzt ist das Display "viel zu" viel zu klein. Ein gedrungenes Fenster mit einem Python-Icon . Da sehe ich nicht das Konsole-Icon um etwaige Programme aufzurufen.
    Ich hab mal gezählt.... Python Icon angeklickt... 10 mal "Taste rechts" gedrückt, da war ich zufällig auf dem Konsole Icon. Da hab ich natürlich deine ICON-Programme getestet. "Läuft" auch auf dem 1,8" Display. Nur sehr unvorteilhaft...

    Aber ich werde mich trotzdem mit "Icon" beschäftigen. Sitze ich ebend vorm Fernseher... :)

    Holger

  • Hallo Holger

    hier das angekündigte Programm einer Animation.

    Ich hoffe, dass es auf jeder Bildschirmgröße läuft - zumindest sind alle Voraussetzen dafür vorhanden.

    Ich habe das Programm mal umfangreich kommentiert, damit Du eine vage Vorstellung bekommst, was es sol alles gibt und wie es angewendet wird.


    Viel Erfolg beim Compilieren und Icon-Lernen!


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,
    jawohl. Und das Rad dreht sich doch.... schönes Ding... leider weiß ich nicht wie ich ein Video hochlade, aber das Rad dreht sich fleißig und flüssig... Wirklich cool man... :D

    17976718df.jpg

    Viele Grüße
    Holger

  • Hallo Holger

    das finde ich ja klasse!

    Ich bin echt beeindruckt - ich habe gestern noch einige Zeit dran gesessen, um das Programm so zu schreiben dass es (mit großer Wahrscheinlichkeit) auf allen denkbaren Bildschirmauflösungen laufen müsste.

    Das Programm ist übrigens die Lösung der Übungsaufgabe von Teil 20 meines Icon-Kurses.

    Das macht jetzt echt Laune, Folge-Programme zu entwickeln, die die Möglichkeiten des Raspberry Pi auch auf kleinen Bildschirmen darstellen.

    Ich habe mal ein kleines Demo-Programm geschrieben, das Funktionen anzeigt. So in der Art

    Code
    xx sin -4 4 -1.1 1.1 blue 3

    xx ist der Name des Programmes (wie auch immer das gehießen haben mag), danach kommt der Funktionsname und dann die Begrenzungen der Graphik sowie noch eine Angabe der Farbe des Funktionsplots sowie die Strichstärke.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (16. April 2014 um 10:20)

  • Hallo Andreas,

    ich hab ein wenig mit deinem Programm "Reset- Taster am GPIO..." gespielt.
    Eine Sache wäre da noch. Vielleicht hast du es auch schon bemerkt, da du jetzt ja auch ein Raspi mit Display hast. Die Konsole läuft sofort nach dem Start auf dem Display los bis zum Login. Da ist auch noch kein Fenster zu sehen.

    Wie kann ich das Programm im Hintergrund laufen lassen, ohne das Display durch das Programm zu blockieren?
    Also eigentlich müsste es so sein, dass ein Programm "eine Taste" immer überwacht, und erst wenn sie gedrückt wird, wird eine Display Ausgabe gestartet. Diese Ausgabe aufs Display kann ja nach 10 sekunden beendet werden, damit die Programmzeile wieder sichtbar wird.

    liebe Grüße
    Holger

  • Hallo Holger,

    ich bin mir jetzt nicht ganz sicher, was Du beabsichtigst.

    Falls Du möchtest, dass das Programm bereits während des Bootens gestartet wird, und im Hintergrund den Reset-Taster beobachtet, dann machst Du so:

    Code
    sudo nano /home/pi/.bash_profile

    Dort gibst Du hinter die letzte Zeile folgendes ein

    Code
    /home/pi/icon9_51/bin/reset-taster &

    oder wie auch immer Du das Programm genannt und wo Du es gespeichert hast.

    Dann speichern und nano wieder verlassen: Strg-X drücken, dann j drücken und danach eingeben

    Code
    sudo reboot

    Und schon startet das Reset-Taster-Programm bei jedem Bootvorgang.

    Das & am Ende bewirkt, dass das Skript in .bash-profile nicht auf das Ende des Reset-Taster Programms wartet, sondern nach Aufruf sofort weiter macht - also den Boot-Vorgang beendet.

    Solltest Du dahinter z.B.

    Code
    startx

    eingeben dann wird automatisch noch die graphische Benutzeroberfläche gestartet.

    Wenn Du was Anderes vorhast: Bitte mehr Details!


    Gutes Gelingen!

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (26. April 2014 um 20:25)

  • Hallo Andreas,
    ok. Das hilft mir.

    Ich will so eine Art "Menü" per Tastendruck erzeugen. (5 Tasten am Raspi)
    mittelste Taste ---> zeigt Auswahl Menu an
    rechts links Tasten ---> zur Auswahl/Markierung der Befehle/Programme
    wieder mittelste Taste --->selektieren/starten der Befehle/Programme

    mittlere Taste lange drücken --> Eingabe der Befehle/Programme und Speicherung

    nach 10 Sek. nichts tun beendet sich das Menü und die Kommandozeile wird wieder sichtbar.

    Kann sein das dafür das Programm, was die Taste überwacht, ein weiteres Programm mit dem "Menü" starten muss.
    (damit nicht das Überwachungsprogramm "der Taste" beendet wird)
    Meine Herausforderungen:
    -ein "icon-Programm" durch ein "icon-Programm" starten können
    -Datei schreiben/lesen zur Speicherung gewünschter Befehle/Programme die selektierbar sein sollen
    -vielleicht farbige Schrift auf der Kommandozeilen-Ebene erzeugen (zur Selektierung)
    -Icon-Programm Beendung aus dem Programm selbst (wie: STR/ALT/C)
    -Programmcode Selektierung, also wenn kein Fenstermodus möglich ist, soll Menü in der Befehlszeile angezeigt werden. Wenn Fenstermodus funktioniert, dann keine Kommandozeile.
    Da hilft sicherlich der Codeschnippsel "stop" nur sollte dann das Programm nicht beendet werden, sondern sie Befehlszeile weiter bedient werden... ohhh... schwierig...

    Ich probiere es mal Stück für Stück...
    Danke
    LG
    Holger

    Ich habe gerade mal getestet. Die Tasterüberwachung ist immer aktiv. Toll.
    Was aber nicht so schön ist, sobald ".bash_profile" angelegt ist, ist sie Kommandozeile komplett farblos. (also kein grüner,roter,blauer Text mehr auf dem Display) :(
    Und Icon geht auch nicht mehr...

    Zitat

    sudo nano /home/pi/.bash_profile

    .... hab ich schnell wieder gelöscht.... rm

    Einmal editiert, zuletzt von holbin (26. April 2014 um 23:43)

  • Hallo Holger,

    was Du vorhast, lässt sich leicht in einem einzigen Programm realisieren.

    Ich würde es so machen, dass das Programm, das Deine 5 Tasten überwacht und auf die Tasten reagiert, auch gleich das Menü anzeigt.

    Das Programm "döst" im Hintergrund, realisierbar durch WAttrib("canvas=hidden").
    Sobald eine der Tasten gedrückt wird, erwacht das Programm: WAttrib("canvas=maximal") und Raise()

    Das Menü erscheint. Das Programm, das ausgewählt wird, wird gestartet: system("Pfad/Programm")
    Du weißt ja jetzt, wie Du Programme starten kannst, ohne dass das aufrufende Programm auf das Ende des gerade aufgerufenen Programmes warten muss.

    Somit kannst Du Dein in Icon geschriebenes Programm, das zunächst nur Tasten an GPIOs überwacht, so erweitern, dass es im Ereignisfall ein Menü anzeigt und ggf. das zugeordnete Programm startet.

    Und natürlich bei keiner Auswahl innerhalb der 10 s wieder "wegdöst": WAttrib(""canvas=hidden") und Lower().

    Dateien Schreiben und lesen: s. Icon-Tutorial Teil 3

    Farbige Schrift: Fg() zum Setzen der Farbe, WWrite() zum Schreiben auf den Bildschirm oder DrawString() zum pixelgenauen Setzen von Text auf dem Bildschirm
    Dazu könnte Dir noch Font() gefallen, um einen speziellen Zeichensatz zu verwenden.

    Wenn Du von dem Taster-Programm aus die vom Taster-Programm gestarteten Programme beenden willst, brauchst Du die Porzess-ID des Programms. Dazu gibt es das Linux-Kommando pidof, top und / oder pstree. Und mit dem Linux-Kommando kill kannst Du den Prozess dann beenden. Somit solltest Du hinter jedem Aufruf von system() auch gleich noch ermitteln, welche Prozess-ID gerade vergeben wurde.
    Beides zusammen geht über eine sog. Pipe - ist in Icon auch ein Kinderspiel

    Programmcode Selektierung ist auch kein Problem:

    Code
    ...
    if Win := WOpen(...) then
    {# Darstellung im Fenster
    }
    else
    {#Darstellung auf Konsole
    }

    Die Darstellung im Fenster erfolgt z.B. über WWrite(), in der Konsole z.B. über write().
    Wenn die Ausgaben ansonsten identisch sind, dann kannst Du es auch so machen:

    Der Befehl stop() ist allerdings denkbar ungeeignet, da das Programm dann auch sofort beendet wird.


    Viel Spaß, gute Ideen und viel Geduld bei der Umsetzung!

    Andreas

    Hallo Holger,


    oops, ...

    Zitat

    Und Icon geht auch nicht mehr...

    Zitat:
    sudo nano /home/pi/.bash_profile

    .... hab ich schnell wieder gelöscht.... rm

    sudo nano machst Du nur einmal, um in der Datei.bash_profile Dein Tasten-Programm zu starten.

    Mit sudo rufst Du als "Admin" das Textverarbeitungsprogramm nano auf. Der Rest ist Pfad und Dateiname.

    Danach ist der Bootvorgang beendet. Wenn Du danach wieder eine Konsole haben willst, dann musst Du sie natürlich öffnen
    - entweder aus der grafischen Oberfläche
    - oder auch wieder in der Datei .bash_profile durch Hinzufügen von lxterminal ...

    Schaue dann mal nach, welche Parameter (Größe der Konsole, Schriftgröße etc.) Du setzen möchtest.

    Und Icon sollte dann auch funktionieren weil nach Ablauf von .bash_profile bashrc (oder ähnlich) gestartet wird - dort hattest Du bereits die Pfade zu Icon etc. erfolgreich gesetzt. Mit dem Starten von lxterminal wird dann auch wieder /home/pi/.bashrc aufgerufen, so dass die Pfade und Umgebungsvariablen für das Funktionieren von Icon gesetzt sind.


    Und zum Schluss noch einen Tip:

    Im Teil 2 meines IconTutorials habe ich die Installation und Konfiguration der IDE Geany beschrieben, so dass man damit recht komfortabel in Icon programmieren und die Programm auch direkt aus der IDE heraus starten kann.


    Das Ende Deiner Datei /home/pi/.bash-profile könnte z.B. so aussehen:

    Code
    taster-programm &
    startx &
    lxterminal ... inkl. Parameter &
    geany &

    Falls Du das Taster-Programm um eine graphiche Oberflächen erweitern möchtest, dann musst Du natürlich vorher startx aufgerufen haben

    Geany öffnet automatisch die zuletzt geöffneten Datein, so dass Du dort weitermachen kannst, wo Du aufgehört hast.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (27. April 2014 um 11:27)

  • Hallo Andreas,
    hab vielen Dank für deine ständige Hilfe sowie Code schnipsel etc.
    Das werde ich ganz sicher brauchen und auch nutzen...

    Ich hab nur derzeitig ein Problem mit ---> /home/pi/.bash_profile
    Vielleicht ist mein System auch etwas anders, weil mein Kernel gepatcht ist, wegens--> Frambufferdevice...???

    Also wenn ich .bash_profile anlege und reboote funktioniert zwar das Tastenprogramm sofort und ständig.
    Aber... (ich programmiere über ssh per Putty) seit dem Reboot ist mein Terminal Fenster in Putty sowie das Display auf dem Raspi nur noch schwarz/weiss.
    Naja und die Programme die ich im Bin Ordner geschrieben habe, lassen sich ebend nicht mehr starten. Ist doch komisch. Wenn ich .bash_Profile lösche, ist wieder alles in Butter.

    Ich werde mal alles mit filezilla untersuchen, vielleicht gibt es noch wo anders ein ".bash_Profile" :helpnew:

    PS. Icon ist geil... :lol: Toll find ich, dass wenn einmal compiliert, braucht man nur noch den Namen des Programms eingeben und es startet (ohne "iconx xx")

    Holger

  • Hallo Holger,

    Zitat


    Ich hab nur derzeitig ein Problem mit ---> /home/pi/.bash_profile
    Vielleicht ist mein System auch etwas anders, weil mein Kernel gepatcht ist, wegens--> Frambufferdevice...???

    Also wenn ich .bash_profile anlege und reboote funktioniert zwar das Tastenprogramm sofort und ständig.

    Es bleibt schwierig. Meine Erfahrungen beruhen auf der Standard-Installation Raspbian Wheezy.

    Mein neuer Raspberry Pi (der mit dem LCD-Screen) ist zwar auch gepatcht, aber kompatibler zum Original in dem Sinn, das ich nicht mit Framebuffer arbeiten muss, sondern startx genauso funktioniert wie auf einem großen Bildschirm.


    Zitat


    Aber... (ich programmiere über ssh per Putty) seit dem Reboot ist mein Terminal Fenster in Putty sowie das Display auf dem Raspi nur noch schwarz/weiss.
    Naja und die Programme die ich im Bin Ordner geschrieben habe, lassen sich ebend nicht mehr starten. Ist doch komisch. Wenn ich .bash_Profile lösche, ist wieder alles in Butter.

    Ich nutze kein putty ... Wenn die Dateien in Icon's Verzeichnis "bin" sich nicht mehr starten lassen, dann bist Du offensichtlich nicht in diesem Verzeichnis bzw. die Pfade PATH, LPATH und IPATH sind nicht auf das Icon-Arbeitsverzeichnis bzw. Pfade innerhalb der IPL gesetzt.
    Diese Pfade waren in /home/pi/.bashrc zu setzen ...

    OK. Was ich Dir jetzt erzähle, ist weit weg vom Standard - Dein System aber wohl auch.

    Du willst irgendwelche Programme (z.B. das Tasterprogramm) mit dem Booten starten und danach in Icon programmieren.

    Normalerweise rufst Du diese Programme über /home/pi/.bash_profile auf.

    Funktioniert bei Dir nicht zur Zufriedenheit, weil dann Dein Icon-System nicht funktioniert.

    Ohne .bash_profile funktioniert Dein Icon-System - aber das Tasterprogramm läuft dann nicht.

    Wie wäre es dann, wenn Du ohne .bash_profile arbeitest und stattdessen das Tasterprogramm nach dem Booten selber startest?
    - entweder schreibst Du in /home/pi/.bashrc eine weitere Zeile ans Ende (das wird dann aber bei jedem Aufruf des Terminals gestartet)

    Code
    tasterprogramm &

    - oder Du hast ein Piktogramm, dass nach Anklicken das Tasterprogramm startet (auf diese Weise führe ich meine System-Updates über ein Icon-Programm durch, das ansonsten im Hintergrund arbeitet und nur ein Fenster aufpoppt, wenn ich irgendwas bestätigen soll).


    Zitat


    PS. Icon ist geil... Toll find ich, dass wenn einmal compiliert, braucht man nur noch den Namen des Programms eingeben und es startet (ohne "iconx xx")

    :bravo2: Die Info ist für mich alles andere als neu - Icon ist geil :thumbs1:
    Das heißt, Du brauchst kein ./ vor dem Programmnamen? Dann hast Du das Icon-System vollkommen richtig aus dem Quellcode erzeugt!

    Wenn Du Dir die Mühe machst, Geany zu installieren, dann kannst Du direkt aus diesem Programm heraus Quellcode compilieren und starten lassen. Dann brauchst Du keine Konsole und icont blabla -x einzugeben.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (28. April 2014 um 23:27)

  • Hallo Nico,

    dieser Thread ist eigentlich nicht dazu gedacht, absolute Grundlagen der Elektronik zu vermitteln. Dazu gibt es die Suchfunktion dieses Forums und ansonsten findet der große Linkfinder alls, was zu dieser Thematik alles verbreitet wurde.

    Aber egal.


    Wenn der Taster zwischen 3V3 und dem Widerstand zu GND geschaltet ist, nennt man dies Pulldown-Widerstand. Die Spannung wird auf annähernd 0 V herabgesenkt / herabgezogen = pulldown. Dadurch wird an dem betreffenden GPIO-Eingang auch LOW erkannt. LOW entspricht einer Spannung < 0,8 V. Das heißt, dass Du einen gewissen Spielraum bei der Festlegung des Widerstands hast. 10k hat sich in der Praxis bewährt. Je kleiner der Widerstand gewählt wird, um so undeutlicher wird LOW erkannt.
    Hast Du schließlich keinen Widerstand, dann empfängt der GPIO alle Signale wie z.B. elektromagnetische Schwingungen beim Einschalten elektrischer Geräte, Motoren und Du bekommst unabhängig vom Taster-Zustand sowohl einmal LOW und ohne Änderung des Tasterzustand HIGH.
    Somit kannst Du einen Taster ohne Pulldown-Widerstand nicht zuverlässig abfragen.
    Wird der Taster gedrückt, bewirkt dies, dass auf dem GPIO-Eingang ein HIGH-Pegel (>1,3 V) erkannt wird, da je eine direkte Verbindung zu 3V3 besteht.


    Wenn der Widerstand zwischen 3V3 und dem Taster zu GND geschaltet ist, nennt man dies Pullup-Widerstand.
    Hier wird die Spannung auf annähernd 3V3 hochgehoben / hochgezogen = pullup. Dadurch wird an dem betreffenden GPIO-Eingang auch HIGH erkannt. HIGH entspricht einer Spannung von > 1,3 V. Auch hier hast Du einen gewissen Spielraum bei der Wahl des Widerstands. Je kleiner der Widerstand gewählt wird, um so undeutlicher wird HIGH erkannt.


    Am besten baust Du die Schaltung einmal auf und probierst sie aus.

    Dann stecke einmal ein einfaches Kabel in einen GPIO, schalte ihn auf Eingang und frage den Status dieses GPIO-Pins ab. Dieser GPIO-Eingang empfängt alle möglichen Störsignale. Um diese SICHER auszuschalten, wird der 10k-Widerstand eingesetzt.

    Der kleinere Widerstand zwischen GPIO-Eingang und 3V3 ist "mein Angstwiderstand", um einen Stromfluss auf ca. 2 mA zu reduzieren.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!