Bonjour à tous,
je me suis lancé récement sur le raspberry pi et je bute sur un problème surement très bête... Je voulais réalisé avec mon fils un projet de robot mais je n'arrive pas à coder la partie commande de celui-ci. Je souhaitais faire une commande clavier ( le mien étant sans fils) mais je n'arrive pas à trouver comment attribuer une touche à une fonction.
exemple si j'appuie sur z le robot avance.
def AVANT() :
print ("Marche Avant")
GPIO.output(Moteur_1_avant, GPIO.HIGH)
GPIO.output(Moteur_2_avant, GPIO.HIGH)
J'ai trouvé pas mal d'exemple pour une utilisation par wifi mais rien en commande clavier qui ne passe pas par des fenêtres, tkinter et pygame entre autres. Ou alors je ne l'ai pas compris...
merci pour les suggestions.
commandes au clavier
Modérateur : Francois
-
- Raspinaute
- Messages : 629
- Enregistré le : mar. 6 janv. 2015 19:44
- Localisation : finistere
Re: commandes au clavier
Bonjour , quel langage utilisez vous pour commander votre robot? (python ,scratch , c ,c++, lua.....)
En général pour faire de la commande par touche , on créé une boucle , au début on y place une fonction qui attend l'appui sur une touche et renvoie la valeur de celle ci puis en fonction de la valeur on exucute une commande , et on reboucle.
En général pour faire de la commande par touche , on créé une boucle , au début on y place une fonction qui attend l'appui sur une touche et renvoie la valeur de celle ci puis en fonction de la valeur on exucute une commande , et on reboucle.
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
Re: commandes au clavier
Bonjour, c'est vrai que j'oublie le principal dans mon message. Je code en python
Pouvez vous me donner un exemple de boucle?
Merci d'avance.
Pouvez vous me donner un exemple de boucle?
Merci d'avance.
Re: commandes au clavier
si tu le fais en python tu peux utiliser pygame pour regarder si les touches son appuyer ça pourrait donner quelque chose comme :
Code : Tout sélectionner
import pygame
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
channel = 11
GPIO.setup(channel, GPIO.OUT, initial=GPIO.LOW)
pygame.init()
while True:
events = pygame.event.get()
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_z:
GPIO.output(channel, GPIO.HIGH)
else :
GPIO.output(channel, GPIO.LOW)
Re: commandes au clavier
Bonsoir, j'ai réussi à faire ma commande clavier à partir de votre boucle. J'ai bloqué quelques temps mais j'ai finalement réussi après avoir créé une fenêtre.
Screen = pygame.display.set_mode((640, 480))
Je mettrai l'intégralité de ma boucle quand je l'aurai finalisé pour que ça puisse éventuellement servir de modèle à d'autres.
Merci de votre aide à tout les deux.
Screen = pygame.display.set_mode((640, 480))
Je mettrai l'intégralité de ma boucle quand je l'aurai finalisé pour que ça puisse éventuellement servir de modèle à d'autres.
Merci de votre aide à tout les deux.
Re: commandes au clavier
Code : Tout sélectionner
# 1)chargement des modules
import pygame
from pygame.locals import *
import RPi.GPIO as GPIO
import time
# 2)initialisation des E/S
# 2.1) choix du brochage GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
# 2.2) attribution des E/S
Moteur_1_avant = 11
Moteur_1_arriere = 12
Moteur_2_avant = 13
Moteur_2_arriere = 15
# 2.3) etat des E/S au demarrage
GPIO.setup(Moteur_1_avant, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(Moteur_1_arriere, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(Moteur_2_avant, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(Moteur_2_arriere, GPIO.OUT, initial=GPIO.LOW)
# 2.4)creation des fonctions
def avant() :
print ("marche avant")
GPIO.output(Moteur_1_arriere, GPIO.LOW)
GPIO.output(Moteur_2_arriere, GPIO.LOW)
GPIO.output(Moteur_1_avant, GPIO.HIGH)
GPIO.output(Moteur_2_avant, GPIO.HIGH)
def arriere() :
print ("marche arriere")
GPIO.output(Moteur_1_avant, GPIO.LOW)
GPIO.output(Moteur_2_avant, GPIO.LOW)
GPIO.output(Moteur_1_arriere, GPIO.HIGH)
GPIO.output(Moteur_2_arriere, GPIO.HIGH)
time.sleep(0.5)
def droite() :
print ("droite")
GPIO.output(Moteur_1_avant, GPIO.LOW)
GPIO.output(Moteur_2_arriere, GPIO.LOW)
GPIO.output(Moteur_1_arriere, GPIO.HIGH)
GPIO.output(Moteur_2_avant, GPIO.HIGH)
time.sleep(0.5)
def gauche() :
print ("gauche")
GPIO.output(Moteur_1_arriere, GPIO.LOW)
GPIO.output(Moteur_2_avant, GPIO.LOW)
GPIO.output(Moteur_1_avant, GPIO.HIGH)
GPIO.output(Moteur_2_arriere, GPIO.HIGH)
time.sleep(0.5)
def stop() :
GPIO.output(Moteur_1_avant, GPIO.LOW)
GPIO.output(Moteur_1_arriere, GPIO.LOW)
GPIO.output(Moteur_2_avant, GPIO.LOW)
GPIO.output(Moteur_2_arriere, GPIO.LOW)
# 3)commandes utilisateur
pygame.init()
# 3.1)creation d'une fenetre
screen = pygame.display.set_mode((640, 480))
# 3.2) lancement de la boucle
a=1
while a:
# partie de boucle controle clavier
for event in pygame.event.get():
if event.type==KEYDOWN:
if event.key==K_z:
avant()
if event.key==K_s:
arriere()
stop()
if event.key==K_q:
gauche()
stop()
if event.key==K_d:
print ("droite")
droite()
stop()
if event.key==K_x:
print ("stop")
stop()
if event.key==K_ESCAPE:
print ("bye bye")
GPIO.output(Moteur_1_avant, GPIO.LOW)
GPIO.output(Moteur_1_arriere, GPIO.LOW)
GPIO.output(Moteur_2_avant, GPIO.LOW)
GPIO.output(Moteur_2_arriere, GPIO.LOW)
a=0
#fin de boucle avec mise à zero des GPIO