Projekt_Rasenmäherroboter mit Raspberry/Arduino und C-Sprache

  • Hallo alle zusammen,


    ich arbeite an meinem Abschlussprojekt.

    Ich möchte einen Rasenmäherroboter bauen mit Raspberry und C-Sprache, dafür benutze ich die IDE Geany und die Bibliothek pigpio.


    Ich habe grade pigpio installiert und wollte ich folgende Testprogramm mittels Geany ausführen:


    als auf einmal wurde auf die konsole folgendes gezeigt:

    Code
    |Sorry, you don't have permission to run this program.    |
    |Try running as root, e.g. precede the command with sudo. 

    kann mir einer sagen wie ich das Problem löse? ich würde gerne das Program mit Geany ausführen und nicht über den LX-Terminal.


    Das kompilieren war kein Problem.

    Der Linker (Build) bei Geany sieht so aus:

    Code
    gcc -Wall -o "%e" "%f" -lpigpio -lrt

    Danke!


    Grüße aus Berlin,


    Golpe


    P.S. Ich wäre auch dankbar, wenn ihr mir sagt Threads, wo ich hilfreiche Information für das Projekt rausholen kann (falls ihr welche kennt)

    Grüße aus Berlin,


    Golpe





  • ich würde gerne das Program mit Geany ausführen und nicht über den LX-Terminal.

    Du willst das Programm (für das evtl. root-Rechte erforderlich sind) via Geany testen?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Servus,

    nun ... der Zugriff auf die GPIO-Register erfordert root-Rechte.

    Bei Geany weiss ich das jetzt nicht, wo man den Programm-Aufruf konfigurieren kann.

    Da müsstest Du halt noch ein sudo reinbauen.

    Dürfte irgendwo bei "build options" unter "run" oder "execute" sein ...


    cu,

    -ds-

  • Erstmal danke für die Antwort.


    Ja, das ist meine Idee , wenn es überhaupt geht. Mit der Bibliothek bcm2835 ging´s und ich dachte mit pippio auch.


    Mit root Rechte usw. kenne ich mich nicht so aus.

    Bin ziemlich Neuling mit Raspberry...

    Grüße aus Berlin,


    Golpe





  • Warum nicht?

    pigpio nutzt u.a. /dev/mem ... und da brauchts halt root-Rechte.

    Ja, warum nicht? Du hast mich falsch verstanden, weil ich habe aus meiner Sichtweise, für den TE seine Frage präzisiert.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Dürfte irgendwo bei "build options" unter "run" oder "execute" sein ...

    Kann man Geany nicht so konfigurieren, dass es in so einem Fall (... bei der Ausführung des binary sind root-Rechte erforderlich), nach dem Passwort fragt?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Das weiss ich nicht, sorry ...

    Geany habe ich nur mal so nebenbei kurz angeschaut ...

    Meine IDE heisst vi und mein build-Environment "Makefile" ;)

    Du kannst natürlich über die sudoers für den Nutzer pi ein Passwort vorschreiben.


    //EDIT: ist halt der Natur der Sache geschuldet ... je näher man an die Hardware kommt, um so häufiger braucht man root-Rechte.


    bye,

    -ds-

  • Ich google grade nach.


    Mein Problem wäre in dem Fall u.a., dass ich den Password von Root nicht mehr weiß...

    Es ist Jahre her, das ich dieses Password geändert habe..

    Ich Trottel....


    Ich vermute, dass ich hier etwas ändern soll (

    Grüße aus Berlin,


    Golpe





  • Ich vermute, dass ich hier etwas ändern soll (

    Genau ... bei execute ein sudo und ein Leerzeichen an den Anfang.

    Zum Thema Root-Passwort ... nun, "normalerweise" sollte pi ohne Passwort-Abfrage root-Rechte bekommen.

    Einfach mal ausprobieren mit z.B. sudo bash ... wenn das klappt (der Prompt wird zu einem Hash) kannst Du direkt auch das Passwort für root mit passwd ändern.


    Sollte es nicht ausreichen, den ausführenden User in die Gruppe gpio zu packen?

    Leider nicht ... da ist er i.d.R. eh schon drin.

    Hier geht's um /dev/mem ... und da darf (gottseidank) nur root dran ;)


    cu,

    -ds-

  • dreamshader

    nach dem ich es so geändert habe


    sieht die Konsole so aus:

    Code
    2018-07-30 18:55:22 initInitialise: Can't lock /var/run/pigpio.pid
    pigpio initialisation failed
    
    
    ------------------
    (program exited with code: 0)
    Press return to continue

    Grüße aus Berlin,


    Golpe





  • Passt imho ... warum der lock nicht erzeugt werden kann, weiss ich jetzt auch nicht.

    Evtl. das Programm noch mal ausführen, nachschauen ob die Datei /var/run/pigpio.pid existiert und ggf. löschen, ...


    Ich teste derzeit auch ein Programm mit sudo und pigpio aus:



    Das tut anstandslos ...

    Dein OS ist schon einigermassen aktuell?


    cu,

    -ds-

  • so ich danke euch alle für eure schnelle Antworte.

    Das erste Problem ist erledigt


    Code
    pigpio initialised okay
    
    
    ------------------
    (program exited with code: 0)
    Press return to continue

    die Execute Einstellung war richtig


    Damit das Program läuft, sollte ich das in der Konsole eingeben:

    Code
    sudo killall pigpiod

    ich habe es hier gelernt:

    https://raspberrypi.stackexcha…t-lock-var-run-pigpio-pid


    Danke und bis zum nächsten Problem!!!


    Mein OS ist aufm neue Zustand.

    Grüße aus Berlin,


    Golpe





  • ...

    Damit das Program läuft, sollte ich das in der Konsole eingeben:

    Code
    sudo killall pigpiod

    ich habe es hier gelernt:

    https://raspberrypi.stackexcha…t-lock-var-run-pigpio-pid

    Ok, damit Du den killall nicht nach jedem Neustart des Pi machen musst, kannst Du über raspi-config -> Interfacing Options den Punkt "Remote-GPIO" ausschalten.


    Na dann weiterhin viel Spass,

    -ds-

  • Guten Abend euch alle!


    Da bin ich mal wieder.

    Für mein Rasenmäherprojekt übe ich in der Wohnung mit meinem alten Saugroboter.

    Letzte Woche hatte ich ein Programm mit geany und die Bibliothek bcm2835 geschrieben und es der Roboter läuft wie erstmal gewünscht.


    Ich habe mich aber gestern für die Bibliothek pigpio entschieden, nach langes Belesen und Ratschläge Einholen.


    Nach eure Hilfe gestern habe ich weiter gemacht und den Code von letzte Woche für pigpio angepasst (scheinbar nicht richtig) und deswegen bräuchte ich eure Hilfe. Ich finde den Fehler nicht.


    Beschreibung

    Ich steuere die 2 unbhängige Motoren des Roboters mit raspberry 3 und ic l293d.

    Für Funktionstesten habe ich ein Tastermodul mit 2 Tastern. Mit einem aktiviere ich beide enable pins des ICs und mit dem anderen simuliere ich die Erkennung eines Hindernisses.


    Mit dem Programm für die Bibliothek bcm2835 Fährt der Roboter vorwärts beim Drücken des ersten Tasters, beim drücken des zweitens hält, fährt ein bisschen zurück, dreht sich und dannach fährt weiter bis man der 2te Taster wieder drückt ( dann dreht er wieder) oder bis man ihm mit dem ersten Taster ausschaltet ( enable)


    Nach dem ich den Code für pigpio angepasst habe funktioniert es nicht.

    Wenn ich den raspi Neustarte und das Programm ausführe kommt das auf die Konsole:




    Und dann passiert nichts. Egal ob ich die Tastern drücke oder nicht.


    Wenn ich die Taster gedrückt habe, die Konsole zumache und das Programm neu ausführe, dann kommt auf die Konsole die ganze Zeit mein Printf "turned " danach ein paar mal " pigpio muss initialisiert werden" danach mein Printf Motors disabled danach pigpio muss initialisiert werden und die ganze Zeit so.

    Wenn ich den raspi neustarte und das Programm ausführe kommt wieder das vom Screenshot.


    Das ist der Code für pigpio

    Und das ist der funktionierenden Code für die lib bcm2835

    Ich hoffe dass ihr mir bei Gelegenheit helfen könnt.


    Auf Code Inhalt, Form, struktur usw. Verbesserungstipps würde ich mich sehr freuen.

    Grüße aus Berlin,


    Golpe





  • Übrigens. Mit dem pigpio Code reagieren die Motoren gar nicht, obwohl in die Schleife reingesprungen wird, wo sie sich drehen sollten (meiner Meinung nach, denn "Turned" wir doch in der Konsole gezeigt)

    Grüße aus Berlin,


    Golpe





  • Servus,

    das wundert mich jetzt nicht, dass das Programm, das Du für pigpio umgeschrieben hast, nicht funktioniert.


    Wenn Du Dir mal den Sourcecode anschaust wirst Du feststellen, dass Du innerhalb der Schleife gar keine Abfragen der Pin Stati mehr machst. Da kannst Du drücken, so viel Du willst ... das Programm bekommt das nicht mit.


    Der Unterschied liegt hier:

    #define value_b bcm2835_gpio_lev(button)

    #define value_in_en bcm2835_gpio_lev(pin_in_en)

    #define value_out_en bcm2835_gpio_lev(pin_out_en)


    ValEnIn=gpioRead(EnIn);

    ValEnOut=gpioRead(EnOut);

    ValBtn=gpioRead(Btn);


    In Deinem bcm-Programm hast Du die relevanten Daten nicht als Variablen sondern als Makro definiert.


    Eine Sache noch:

    Dein Code ist sehr schlecht lesbar ... u.a. fällt das mit den Makros statt der Zuweisung nicht sofort auf, weil Du Makros so benennst wie normale Variablen.

    Ich halte das zwar auch oft nicht 100% ein, aber bei manchen Sachen solltest Du Dich zumindest an C-Coding-Standards annähern, sonst verstehst Du ziemlich schnell Deinen eigenen Code nicht mehr.


    Also ... checken, ändern, ausprobieren ;)


    cu,

    -ds-

  • Vielen dank!


    Ich probiere mal morgen.

    Dein Link muss ich mir auch durchlesen.

    Ich will solche Fehler und Gewohnheiten seit Anfang an korrigieren...


    Super!

    Grüße aus Berlin,


    Golpe