commandes au clavier

Vous souhaitez piloter votre framboise à partir d'une page web ? Ou mieux encore à partir d'un smartphone ou d'une tablette Android ? Venez donc visiter cette rubrique...

Modérateur : Francois

Répondre
kromagg
Messages : 13
Enregistré le : ven. 24 juil. 2015 00:41

commandes au clavier

Message par kromagg » ven. 24 juil. 2015 01:00

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.

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: commandes au clavier

Message par guillaume9344 » ven. 24 juil. 2015 07:09

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.
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

kromagg
Messages : 13
Enregistré le : ven. 24 juil. 2015 00:41

Re: commandes au clavier

Message par kromagg » ven. 24 juil. 2015 14:04

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.

speedi57
Messages : 18
Enregistré le : jeu. 9 avr. 2015 12:13
Contact :

Re: commandes au clavier

Message par speedi57 » ven. 24 juil. 2015 15:59

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)

kromagg
Messages : 13
Enregistré le : ven. 24 juil. 2015 00:41

Re: commandes au clavier

Message par kromagg » dim. 26 juil. 2015 00:51

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.

kromagg
Messages : 13
Enregistré le : ven. 24 juil. 2015 00:41

Re: commandes au clavier

Message par kromagg » lun. 10 août 2015 17:14

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.

Répondre

Retourner vers « Des interfaces pour le Raspberry Pi »