Reset-Taster am GPIO und Programmierung in Icon

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Himbeer-Freunde, Linux-Freaks und Forumsbewohner,

    in den vergangenen Tagen habe ich mir überlegt, wie man einen Reset-Taster an der GPIO-Schnittstelle anschließen und so programmieren kann, das er z.B.nach einem kurzen Tasten rebootet, nach längerem Drücken sauber herunterfährt.

    Und natürlich wollte ich das Ganze in Icon programmieren (weil ich Python nicht kann und C nicht mag).

    Herausgekommen sind:

    - Schaltplan als Einzeiler:
    GPIO14 ==> R=330 Ohm ==> Kathode-LED-Anode ==> 3.3V ==> Taster ==> R=620 Ohm ==> GPIO10 ==> R=11 kOhm ==> GND

    - ein überschaubar kurzes Progrmm


    Was macht das Programm im Einzelnen?
    Es öffnet die GPIO-Library (auch in Icon geschrieben). Zwei Variablen werden definiert, die darauf hinweisen, dass am GPIO10 ein Taster und eine LED am GPIO14 hängt.

    In einer Endlosschleife wird der dem Taster zugeordnete GPIO10 abgefragt und invertiert. Dieser invertierte Wert wird auf dem GPIO14 gesetzt (ich möchte, dass beim Drücken des Tasters (Signal auf HIGH) die LED leuchtet (Signal auf LOW).
    Während der Taster gedrückt wird, zählt eine Variable solange hoch, bis der Taster losgelassen wird.
    Falls der Taster losgelassen wird, wird beim kurzen Tasten rebootet, bei längerem Drücken sauber heruntergefahren.

    Natürlich kann man hier die Dauer des Taster-Drückens weiter aufteilen und andere Aktionen erfolgen lassen.

    Das Programm ist auch deswegen so kurz, weill die GPIO-Library sehr viel (in meinen Augen unnütze) Arbeit abnimmt. So gibt es eigentlich nur einen Befehl GPIO(), der sowohl zum Lesen als auch zum Schreiben verwendet werden kann.
    Syntax 1: w := GPIO(pin) zum Auslesen des GPIO-Pins pin
    Syntax 2: GPIO(pin, wert) zum Setzen eines Wertes auf dem GPIO-Pin pin.

    Die Library prüft, ob Version 1 oder Version 2 des Raspberry Pi vorliegt und erlaubt die in den einschlägigen Tabellen angegebenen Pin-Bezeichnungen.

    Alles andere wie GPIO exportieren oder Richtung definieren erledigt die GPIO-Library ebenfalls im Hintergrund.


    Beste Grüße

    Andreas

    ____________
    Hier die GPIO-Library (bitte nach /home/pi/icon9_51/lib kopieren und die Dateiendung .txt entfernen - leider lässt sich die Datei mit der .u1 oder .u2 nicht hochladen):er
    GPIO.u1.txt
    GPIO.u2.txt

    EDIT 08-OKT-2017: Wer die aktuellste in Icon programmierte GPIO-Library nutzen möchte, suche bitte danach. Sobald ich meine eigenen Beiträge wieder gefunden habe, verlinke ich auch hier darauf.

    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.

    2 Mal editiert, zuletzt von Andreas (8. Oktober 2017 um 11:44)

  • Hallo,

    hier noch der Schaltplan im Anhang...


    Beste Grüße

    Andreas

  • Hallo,
    Kannst du vielleicht noch kurz erklären was Icon ist? Sorry.
    Wäre sehr interessant zu wissen, welche Endung das Script hat und wie es gestartet wird. Und dann sollte es ja im "Autostart" stehen, also das es gleich beim Raspistart funktioniert. Ich habe bei mir auch 5 Taster am Raspi System. Möchte da verschiedenen Funktionen drauf setzen. Bin da noch nicht ganz schlau mit den Rechten. Unter Python muss man doch im root arbeiten.

    Danke

  • Hallo Holbin,

    Icon ist eine Programmiersprache, die seit Juni 2013 in der Version 9.5.1 vorliegt. Es handelt sich um eine der ersten Programmiersprachen, die für eine beeindruckende Anzahl an Betriebssystemen existiert. Die Erfahrung hat gezeigt, dass sich diese ganz leicht auf so ziemlich jedes Betriebssystem übertragen lässt, für das ein C-Compiler existiert.

    Mit dieser Kenntnis habe ich Icon 2013 auf den Raspberry übertragen und seit der Zeit einen bislang 29-teiligen Programmierkurs geschrieben. Basierend auf einzelnen Programmen dieses Kurses habe ich ein Entwicklungsprojekt für eine industrielle Produktionsmaschine geleitet und hier den Raspberry Pi eingesetzt.

    Dies hat mir gezeigt, dass die gesamte Umsetzung (Raspberry Pi, Icon-Entwicklungssystem, entwickelte Hardware, entwickelte Software) professionellen Anforderungen genügt.

    Zum einen können mit dem Compiler lauffähige Programme erzeugt werden - es ist aber auch möglich, den Quellcode als Skript ablaufen zu lassen. Demzufolge hat das ausführbare Programm unter Linux keine Endung. Der Quellcode trägt die Endung .icn.

    Wenn Rechte fehlen, dann kannst Du einzelnen Befehlen Admin-Rechte einräumen - nicht das gesamte Programm läuft unter "sudo".

    Ich programmiere seit über 10 Jahren in Icon und halte das Gesamtkonzept für sehr durchdacht und leicht zu erlernen.

    Wenn Du mehr über Icon wissen willst, dann schaue mal in folgende Beiträge von mir: (EDIT: 08-OKT-2017 Links zeigen in s neue Forum!)
    1. Icon-Programmiersprache auf Raspberry PI

    2. Festplattentemperatur

    3. Icon: Teil 1, Tutorial zum Erlernen der Programmiersprache Icon: Installation

    4. Programmiersprache Icon, Teil 2: Installation und Konfiguration von Geany
    5. Lösung: Unable to resolve hostname
    6. Reset-Taster am GPIO und Programmierung in Icon


    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.

    3 Mal editiert, zuletzt von Andreas (8. Oktober 2017 um 12:38)

  • Hallo Andreas,
    ist ja wirklich ne tolle Sache. Ich hab "icon" nach deiner Anleitung installiert. Muss mich jetzt noch damit beschäftigen/rein Kniehen.
    Habe nur noch ne allgemeine Frage.
    Ich kann mit "icont Hallo" nicht compilieren.
    Nur mit: sudo ./icont hallo beginnt die Compilierung.
    Muss ich unter root arbeiten? Oder was kann bei mir falsch sein...

    Danke

  • Es gibt noch ein anderes Problem.
    Beim Compilieren von "Icon" wir nur icont , .placeholder , libIgpx.a erzeugt.
    Es fehlt iconx.
    Daher kann ich Programme zwar compilieren aber nicht starten... schade... wo steckt der Fehler... :s

  • Hallo Holbin,

    Wenn Du Dich exakt an meiner beschriebenen Vorgehensweise orientierst, solltest Du das angegebene Programm compilieren können.

    Überprüfe bitte Folgendes:

    Code
    pwd

    Als "Antwort" sollte das Verzeichnis kommen, in das Du Icon installiert hast, nach meiner Vorgehensweise

    Code
    /home/pi/icon9_51/bin


    Kommt was anderes, dann gib ein

    Code
    cd /home/pi/icon9_51/bin

    (oder das Verzeichnnis, in dass Du das Arbeitsverzeichnis abgelegt hast.

    Ganz beliebt sind auch fehlerhafte Pfade. Schicke mir bitte die Ergebnisse von Folgendem

    Code
    echo $PATH
    ==> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/home/pi/icon9_51/bin
    echo $IPATH
    ==> /home/pi/icon9_51/lib /home/pi/icon9_51/ipl/packs/loadfunc /home/pi/icon9_51/ipl/packs/loadfuncpp
    echo $LPATH
    ==> /home/pi/icon9_51/ipl/gincl /home/pi/icon9_51/ipl/grpcs /home/pi/icon9_51/ipl/incl /home/pi/icon9_51/ipl/procs

    Für IPATH könntest Du evtl. etwas anderes erhalten (gestrige Konfigurationsänderung).

    Dann gib mal ein:

    Code
    icont -V
    ==> Icon Version 9.5.1, June 5, 2013  (RaspberryPi 32/32, Dec 29 2013)

    Und schließlich schicke mir auch das Ergebnis von

    Code
    ls -all icont
    ==> -rwxr-xr-x 1 pi pi 87124 Dez 29 20:58 icont

    Wenn bei Dir etwas andres steht als -rwx..... dann gib bitte ein

    Code
    chmod u=rwx icont
    chmod u=rwx iconx

    Mit diesem BEfehl erreichst Du, dass der Compiler icont von Dir als normaler User gelesen, geschrieben und ausgeführt werden kann
    Jetzt solltest Du ohne sudo ./icont compilieren können, also icont ...

    Ich habe jetzt schon etliche Male auf verschiedensten Betriebssystemen Icon installiert - inkl. Aufbau aus dem Quellcode heraus - Deine Probleme habe ich bis noch nicht erlebt.

    Daher hoffe ich, dass Du irgendwas nicht korrekt eingegeben hast.

    Ganz wichtig ist auch, dass Du die Pfade für PATH, IPATH und LPATH richtig gesetzt hast. Sonst funktioniert gar nichts.

    Und solange Du nicht aus einer IDE heraus arbeitest (WIE? s. Teil 2 meines Tutorials), musst Du Dich peinlich genau an alle Vorgaben halten. Und solange musst Du Dich in dem Verzeichnis befinden, in dem Dein Quellcode liegt - und auch icont & iconx.

    Ich freue mich auf Deine Rückmeldung!


    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.

  • erledigt

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (15. Februar 2017 um 21:30)

  • Hallo Jar,

    na klasse, da wurde der Link nicht korrekt übernommen. Haute Abend gegen 21:00 bin ich wieder zuhause und versuch's dann nochmal.


    Beste Grüße

    Andreas
    _______________________________
    14.04.2014: Den Schaltplan habe ich im #2 dieses Threads aktualisiert.

    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 (14. April 2014 um 08:11)


  • na klasse, da wurde der Link nicht korrekt übernommen.

    ja diese blöden Computer machen aber auch immer doofe Fehler :lol:


    Haute Abend gegen 21:00 bin ich wieder zuhause und versuch's dann nochmal.

    watt denn, keinen Onlinezugang nach daheim ? :s:D

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo Andreas,
    oh ja. Da scheint was nicht zu stimmen.
    pwd bringt nur --> /home/pi

    und...

    pi@raspberrypi ~ $ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

    pi@raspberrypi ~ $ icont -V
    -bash: icont: command not found

    pi@raspberrypi ~ $ ls -all icont
    ls: cannot access icont: No such file or directory

    Ich werde die Installation noch mal wiederholen.

    Was ich vielleicht noch nicht gesagt habe, ich habe ein 1,8 Zoll Display und 5 Tasten am Raspi. Display-Ansteuerung als Framebuffer-Device (von ThomasH)
    1.8 TFT Raspberry Pi Status Display
    (ganz tolles Projekt)
    Mein Ziel ist es, ein Menü per Tastendruck anzuzeigen, womit ich Programme gezielt starten kann. Zum Beispiel mein installierter qemu nebst Windows 95. (Ich weiß, Spielerei... ) Ich glaube ICON wäre ideal dafür...

    Mach mich gleich an die arbeit... :^^:

  • Hallo Holbin,

    Deine Fehlermeldungen zeigen mir, dass
    a) Du Dich nicht im Arbeitsverzeichnis /home/pi/icon9_51/bin befindest

    Code
    cd /home/pi/icon9_51/bin

    b) Wenn icont -V nicht funktioniert, dann hast Du den Pfad in /home/pi/.bashrc nicht gesetzt. Schau noch mal auf der Seite 6 in meinem Tutorial nach, Dort ist ein Beispiel für das Setzen von
    - PATH, dem Pfad zum Arbeitsverzeichnis /home/pi/icon9_51/bin
    - IPATH, dem Pfad zu den Libraries. Setze stattdessen folgendes ein

    Code
    IPATH="home/pi/icon9_51/lib

    - LPATH, dem Pfad zu den Include-Dateien

    Gehe alle Schritte des Downloads, des Extrahierens, des Kopierens und des Compilieren des Quellcode SCHRITT FÜR SCHRITT durch, lasse keinen noch so banalen Schritt aus. Dann sollte es auch bei Dir funktionieren.

    Beste Grüße

    Andreas

    Hallo Jar,

    hier ein erneuter Versuch, die Schaltung hochzuladen...

    Übrigens brauche ich keine Computer, um Fehler zu machen - das bekomme ich auch ganz ohne ganz gut hin. :bravo2:

    Tagsüber berate ich einen Kunden in der Medizintechnik. Ich glaube, dass der nicht so begeistert wäre, wenn ich vom Büro aus Zugriff auf meinen Raspberry Pi zuhause hätte - und dann aber so richtig interessanten Arbeiten nachgehe.

    Deswegen tagsüber als Berater Geld für's Hobby scheffeln. :thumbs1:

    Ich glaube, jetzt funktioniert der Upload...


    Beste Grüße

    Andreas

  • OK, jetzt sieht es gut aus. Habe Fehler gemacht mit der Makedefs Datei.
    In dieser Datei sollte ich ja nicht ändern.
    Jetzt habe ich auch "iconx" im bin - Ordner und ich kann das Testprogramm "Hallo" ausführen... Toll...

    Mit der Grafik Funktion muss ich noch passen. Per Fernsteuerung via Putty sehe ich kein Fenster. Auf meinem 1,8"Display sehe ich auch kein Fenster.
    Nur: "Hallo ihr da draußen", Probiere es nachher mal am Fernseher.
    Fein, jetzt kann ich mich näher damit beschäftigen... Danke.

    Holger

  • Hallo Holbin,

    das freut mich, dass es jetzt bei Dir läuft.

    Viel Spaß und wenn Du Fragen hast, dann öffne einfach einen neuen Thread - dieser war ursprünglich für die Programmierung eines Rest-Tasters gedacht :s

    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 Holbin,

    wahrscheinlich habe ich auch die Lösung, warum das Progarmm bei Dir nicht läuft, das die Einbindung von X11 testet, indem ein Fenster angezeigt wird.

    Der Befehl

    Code
    WOpen()

    ohne Größenangabe öffnet ein Fenster auf dem Monitor, dass auf eine voreingestellte Größe gesetzt wird.

    Offensichtlich ist die Voreinstellung größer als es die Auflösung Deines 1,8"-Displays erlaubt.

    Gib deswegen mal folgendes Programm ein:

    Code
    procedure main()
        w := WOpen("size=100,100","label=Klein") | stop("Kein Fenster")
        if w then
        {    WAttrib("height=" || WAttrib("displayheight"))
              WAttrib("width=" || WAttrib("displaywidth"))
              WAttrib("label=" || WAttrib("height") || " x " || WAttrib("width"))
              WDelay(5000)
              WClose(w)
        }
    end

    Dieses Programm versucht, ein Fenster der Größe 100 x 100 zu öffnen. Wenn dies nicht funktioniert, wird das Programm mit einer Fehlermeldung abgebrochen.

    Konnte das Fenster geöffnet werden, wird das Fenster auf maximale Größe ausgedehnt, das Fenster bekommt einen anderen Titel, nämlich die aktuelle Bildschirmauflösung. Danach wartet das Programm 5 Sekunden und schließt das Programm wieder.

    Wenn's funktioniert, dann bin ich echt gespannt, zu was Du Icon nutzen wirst :thumbs1:

    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 (10. April 2014 um 23:03)

  • Oh, schade. Da scheint eine Klammer zu fehlen? Zu mindestens sagt das der Compiler?

    File fenster.icn; Line 4 # ";": missing right parenthesis
    1 error

    Habe 2 Klammern eingefügt.

    procedure main()
    w := WOpen("size=100,100","label=Klein") | stop("Kein Fenster")
    if w then
    { WAttrib("height=" || WAttrib("displayheight"))
    WAttrib("width=" || WAttrib("displaywidth"))
    WAttrib("label=" || WAttrib("height") || " x " || WAttrib("width"))
    WDelay(5000)
    WClose(w)
    }
    end


    Jetzt geht es zu compilieren. Aber... cannot create fenster
    Doch falsch die 2 Klammern? ...("displayheight"))

  • Hallo Holbin,

    das kommt dabei heraus - wenn man von der Arbeit hektisch irgendwas an Programmen erdichtet, weit und breit kein Icon-Compiler vorhanden.

    Natürlich! Du hast Recht mit den beiden Klammern.

    Aber es fehlt noch eine Zeile ... mein Fehler!

    Die erste Zeile bewirkt, dass eine graphics-Library lädt, die alles mit Fenster und so "kann".

    Jetzt solltest Du auf Deinem Display ein kleines und blitzschnell danach ein Vollbildfenster erleben, oder?

    Gutes Gelingen und 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,
    die Gaphics lib funktioniert gut. Wobei vorher "startx" bzw. für das 1,8" Display, "FRAMEBUFFER=/dev/fb1 startx" gestartet werden muss.

    Leider funktionert "link GPIO" nicht.
    Dein Programm zum runterfahren per Tastendruck bringt beim Compiliern:
    "cannot resolve reference to file 'GPIO.u1' " , fehlt da bei mir was.

    Gibt es eine Befehlsliste für ICON. Damit man einen Überblick über alle Funktionen und Sysntax hat?

    Schön wäre es, wenn man mit Icon ein Programm schreiben könnte, dass so ähnlich wie das "Raspi-Config" Programm ist. (eine grafische Oberfläche aus der Befehlszeile...)

    Holger

  • Hallo Holger,

    na, da kommst Du ja immer einen Schritt weiter. :bravo2:

    Die Fehlermeldung mit der GPIO-Library muss kommen, da Du diese Datei nicht hast.


    Ich schicke sie Dir per PN. Ich schreibe Dir, wo Du sie am Besten hinkopierst.

    Zitat

    Gibt es eine Befehlsliste für ICON. Damit man einen Überblick über alle Funktionen und Sysntax hat?

    Ja, die gibt es.

    Du kannst Dir unter http://www.cs.arizona.edu/icon/books.htm die ersten beiden Bücher herunterladen.

    Aus diesen beiden habe ich Icon auch gelernt - ansonsten hilft nur viel Üben.

    Kennst Du meinen Icon-Kurs hier im Forum? Unter den Tutorials sind bislang 3 Teile von momentan 29 hochgeladen. Ich lade so ca. jeden 25. bis 50. Beitrag von mir einen weiteren Teil hoch. Das dauert momentan ca. 2 Wochen.

    Zitat

    Schön wäre es, wenn man mit Icon ein Programm schreiben könnte, dass so ähnlich wie das "Raspi-Config" Programm ist. (eine grafische Oberfläche aus der Befehlszeile...)

    Mit Icon kann man eigentlich fast alles programmieren - und mittels Linux sogar tief ins System absteigen.

    Icon-Programme kannst Du wie jedes andere auch starten durch
    - Aufruf aus dem Terminal
    - Aufruf aus dem Dateimanager
    - Durch Klick auf ein vorbereitetes Piktogramm (Icon wird hier leicht missverstanden)
    - Aus dem Anwendungsmenü
    - Aus der vorbereiteten Tool-Leiste
    - direkt bein Booten starten

    Die GPIO-Library geht heute noch raus... Diese befindet sich in regelmäßiger Änderung. Wenn Du irgendwelche Funktionalitäten vermisst, dann frage einfach nach - vielleicht ist es dann schon umgesetzt.

    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 Holger,

    die beiden Dateien der GPIO-Library befinden sich in #1 dieses Threads.


    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!