Page 1 sur 1

commandes au clavier

Posté : ven. 24 juil. 2015 01:00
par kromagg
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.

Re: commandes au clavier

Posté : ven. 24 juil. 2015 07:09
par guillaume9344
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.

Re: commandes au clavier

Posté : ven. 24 juil. 2015 14:04
par kromagg
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.

Re: commandes au clavier

Posté : ven. 24 juil. 2015 15:59
par speedi57
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

Posté : dim. 26 juil. 2015 00:51
par kromagg
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.

Re: commandes au clavier

Posté : lun. 10 août 2015 17:14
par kromagg

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

voilà, ma boucle de commande à partir d'un clavier pour mon projet de robot. En grande partie inspirée de ce projet ci http://www.framboise314.fr/zumo-un-robo ... pberry-pi/ même si j'ai fais beaucoup plus simple pour commencer.