Forum
>>
Principianti
>>
fermare robot al rilascio dei tasti direzionali
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da 19marinho |
2020-06-05 12:07:44 - fermare robot al rilascio dei tasti direzionali
|
Salve a tutti, ho necessità di comandare un robot con i tasti direzionali del computer, ho scritto il codice che allego ma avrei bisogno che al rilascio del tasto direzionale i motori si fermino.
Ringrazio anticipatamente chiunque riesca a darmi una mano. Grazie # import librerie curses e GPIO import curses import RPi.GPIO as GPIO import time # selezione dei 4 pin per controllare il bridge-motor GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(13,GPIO.OUT) GPIO.setup(19,GPIO.OUT) GPIO.setup(18,GPIO.OUT) GPIO.setup(12,GPIO.OUT) # definizione degli spostamenti (come da esempio precedente) def backward() : GPIO.output(13,GPIO.HIGH) GPIO.output(19,GPIO.LOW) GPIO.output(18,GPIO.HIGH) GPIO.output(12,GPIO.LOW) def forward() : GPIO.output(19,GPIO.HIGH) GPIO.output(13,GPIO.LOW) GPIO.output(18,GPIO.LOW) GPIO.output(12,GPIO.HIGH) def stop (): GPIO.output(13,GPIO.LOW) GPIO.output(19,GPIO.LOW) GPIO.output(18,GPIO.LOW) GPIO.output(12,GPIO.LOW) def left (): GPIO.output(19,GPIO.HIGH) GPIO.output(13,GPIO.LOW) GPIO.output(18,GPIO.HIGH) GPIO.output(12,GPIO.LOW) def right (): GPIO.output(19,GPIO.LOW) GPIO.output(13,GPIO.HIGH) GPIO.output(18,GPIO.LOW) GPIO.output(12,GPIO.HIGH) # cattura dei tasti premuti dall'utente screen = curses.initscr() curses.echo() curses.cbreak() screen.keypad(True) # cicla indefinitamente per catturare i comandi try: while True: char = screen.getch() print char # su = avanza if char == curses.KEY_UP: forward() # giu = retromarcia elif char == curses.KEY_DOWN: backward() # sinistra = left (gira a sinistra) elif char == curses.KEY_LEFT: left() # destra = right (gira a destra) elif char == curses.KEY_RIGHT: right() # p = ferma il robot if char == ord('p'): stop() # q = carattere di interruzione del programma if char == ord('q'): break # restituisce il controllo della tastiera finally: curses.nocbreak() screen.keypad(0) curses.echo() curses.endwin() # prima di uscire, pulizia del GPIO GPIO.cleanup() --- Ultima modifica di 19marinho in data 2020-06-05 12:51:34 --- |
|
Scritto da Niccolo Bartolacelli |
2020-06-07 15:11:47 - Re: fermare robot al rilascio dei tasti direzionali
|
Ciao,
Premetto che non utilizzo RPi da un bel po' di tempo, però penso che tu possa provare a fare un ciclo while nidificato per ogni input: while True: while char == curses.K_UP: forward()E così anche per gli altri. In alternativa potresti utilizzare l'event handling di pygame che, a mio avviso, è molto intuitivo (a discapito della lunghezza del codice che, a volte, può diventare molto carico). Infatti sviluppando un gioco in pygame, un po' di tempo fa, ho utilizzato una tecnica simile ed ha funzionato molto bene. Spero di esserti stato utile Niccolò (Potrei sbagliarmi perché non conosco molto bene la libreria curses, ma credo credo che esista un metodo per verificare se un evento è terminato, in questo caso la pressione di un tasto) --- Ultima modifica di Il Linuxino in data 2020-06-07 15:15:39 --- --- Ultima modifica di Il Linuxino in data 2020-06-07 15:40:53 --- |
Pagina: 1
Esegui il login per scrivere una risposta.