pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Cherche à créer Shell utilisant GPIO (compteur)

Thu Mar 07, 2013 6:03 pm

Bonjour,
je suis nul voir carrément debutant dans les shell et c'est pour ca que je viens vous demander de l'aide :)

Voilà j'aimerai créer un compteur commandé par les broches GPIO, ( une broche utilisée pour l'incrementation et une broche pour la decrementation ).
Je précise que j'ai installer WiringPi pour controler les entrées/sorties depuis la console.

Voilà en français ce que j'aimerai faire:

Déclare une Variable Compteur

Lit l’état du gpio1
  • Si l’état du gpio1 = 1
    Alors incrémenter Compteur de +1
Lit l’état du gpio7
  • Si l’état du gpio7 = 1
    Alors décrémenter Compteur de -1

et voilà le début de mon Shell :

Code: Select all

#!/bin/bash

$compteur=0

gpio mode 7 in
gpio mode 0 in

if [ gpio -g read 7=1 ]
then
	$compteur+1

if [ gpio -g read 0=1 ]
then 
	$compteur-1
Je doute très fortement que cela marche, si vous pouviez m'aider à améliorez cela,
PS: je ne suis pas sur que le shell soit la meilleure solution pour faire ce que je veux faire si vous n connaissez une autre meilleur je suis preneur

Merci d'avance pour vos réponses :D

jelopo
Posts: 1619
Joined: Wed Oct 17, 2012 7:53 pm

Re: Cherche à créer Shell utilisant GPIO (compteur)

Thu Mar 07, 2013 11:36 pm

Bonjour,

Il y a plusieurs erreurs dans ton script :
- pour définir une variable, on ne met pas de $
- il manque les "fi" en fin de bloc de condition "if"
- $compteur+1 ne fonctionne pas en bash, il faut faire par exemple
let compteur=compteur+1
- pour comparer une valeur numérique, il faut le signe double égal "=="
- pour comparer le résultat de la commande à une valeur, il faut coder ta condition comme suit :
if [[ `gpio -g read 7` == 1 ]]

- Pour continuer le debug de ton programme, je te conseille de mettre en première ligne
#!/bin/bash -xv, cela permet de visualiser chaque commande passée et son résultat.
Quand ton script est ok, tu peux enlever le "-xv"

N.B. : Avec ces petits conseils, ton script devrait presque fonctionner, toutefois, attention, il n'y a pas de boucle d'attente de changement de statut des GPIO. Donc actuellement il faut que tu appuie sur un bouton et que tu lance le script simultanément pour faire 1 changement sur le compteur.

Je dirais donc essaie encore...
Bon courage.

A+

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Cherche à créer Shell utilisant GPIO (compteur)

Fri Mar 08, 2013 9:39 am

Tout d'abord Merci de tous ces conseils :D

Code: Select all

#!/bin/bash

compteur=0

gpio mode 7 in
gpio mode 0 in

if [[ `gpio -g read 7` == 1 ]]
then
	let compteur=compteur+1

fi
	

if [[ `gpio -g read 0` == 1 ]]
then 
	let compteur=compteur+1

fi
En revanche, je ne vois pas ce que vous voulez dire par
attention, il n'y a pas de boucle d'attente de changement de statut des GPIO
?? que faudrait il faire ??

Ce que je cherche à faire moi c'est que le script tourne en continu et incremente/decremente la variable compteur dès qu'un des deux GPIO passe à 1.

jelopo
Posts: 1619
Joined: Wed Oct 17, 2012 7:53 pm

Re: Cherche à créer Shell utilisant GPIO (compteur)

Fri Mar 08, 2013 10:40 pm

Bonjour,

Ton script fonctionne-t-il maintenant ?

Pour ce que j'appelle la boucle d'attente, il faut que tu ajoutes une fonction "while, do, done" infinie.
ça se code comme ça :
[code]
#!/bin/bash

compteur=0

gpio mode 7 in
gpio mode 0 in

while true
do
if [[ `gpio -g read 7` == 1 ]]
then let compteur=compteur+1
echo "compteur = $compteur"
fi

if [[ `gpio -g read 0` == 1 ]]
then let compteur=compteur-1
echo "compteur = $compteur"
fi
sleep 1
done

[/code]

Commentaires :
- "true" est toujours vrai, donc la boucle est infinie. Pour arrêter le script il faut faire Ctrl+C.
- "sleep 1", attend 1 seconde
- les commandes echo permettent de visualiser les changements de statut du compteur.

Bons test.

A+

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Cherche à créer Shell utilisant GPIO (compteur)

Sun Mar 10, 2013 2:45 pm

Re bonjour,

en fait le script doit surement fonctionner mais je n'ai même pas réussi à le lancer... Comme je le disais c'est mon premier shell donc peux être que je m'y prend mal, j'ai essayé de deux methodes différentes aucune des deux n'a fonctionnée:

1) avec l'interface graphique,
le fichier en question est test.sh
quand je double clique dessus: http://hpics.li/338e7f8
je clique alors sur executer et: http://hpics.li/5fcf315
je précise que lorsque je clique sur "Execute in Terminal" rien ne se passe

2) depuis LXterminal de l'interface graphique

Je me place dans le répertoire qui contient le fichier test.sh, puis je le lance de cette manière et voila:
http://hpics.li/4e1001f


Alors qu'est-ce qui ne marche pas?? , je ne comprend plus rien

jelopo
Posts: 1619
Joined: Wed Oct 17, 2012 7:53 pm

Re: Cherche à créer Shell utilisant GPIO (compteur)

Mon Mar 11, 2013 9:41 pm

Bonjour,

Pour lancer un script, passe par la ligne de commande (ton second choix). Si il y a des messages d'erreur tu les verras sur le terminal.
La commande que tu as passé est bonne. Toutefois le script, n'est peut être pas exécutable. Pour cela il faut que cette commande pour le rendre executable.

Code: Select all

chmod +x test.sh
Ensuite tu relance ton script avec ./test.sh.

A+

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Cherche à créer Shell utilisant GPIO (compteur)

Mon Mar 18, 2013 7:28 pm

Bonjour,

je vous remercie grandement de m'avoir aider à réaliser mon shell de compteur qui à présent marche très bien !!

Vu que vous semblez vous y connaitre en shell, j'aurai encore une petite quesion à vous poser concernant ce même shell compteur, comment faire pour que dès que la variable compteur change de valeur, elle soit sauvegardée dans un fichier à part (.txt par exemple).

(Cela à pour but d'après pouvoir venir la récupérer dans ce fichier par une page PHP)

Merci d'avance de votre réponse

jelopo
Posts: 1619
Joined: Wed Oct 17, 2012 7:53 pm

Re: Cherche à créer Shell utilisant GPIO (compteur)

Mon Mar 18, 2013 9:04 pm

Bonjour,

Je suis très content d'apprendre que le shell fonctionne.
Pour écrire dans un fichier en shell, on peut aussi utiliser la commande "echo", par exemple pour envoyer le contenu de la variable $compteur dans le fichier compteur.txt

Code: Select all

echo $compteur > compteur.txt
A+

Return to “Français”