Raspberry pi controlled (танк)
привет , ребята , я создаю управляемый танк Raspberry pi, и для этого мне нужен код, который выглядит следующим образом:
(Привод на 4 колеса , управляемый через драйвер двигателя L298N)
(это должно контролироваться с помощью компьютера)
при нажатии следующих клавиш должно произойти следующее
*нажмите стрелку вверх - танк идет вперед(все 4 колеса идут вперед)
*нажмите стрелку вниз - танк идет назад (все 4 колеса идут назад)
*нажмите левую стрелку - танк идет влево (левые 2 колеса идут назад, правые 2 колеса идут вперед)
*нажмите стрелку вправо - танк идет вправо(правые 2 колеса идут назад, левые 2 колеса идут вперед)
и дополнительные:
мышь должна быть abbled для управления двумя сервоприводами ,для системы башни.(как fpv игры)
Что я уже пробовал:
Ответ на решение №1 от OriginalGriff:
ну ладно, спасибо за это. ответьте, во всяком случае, я не думал об этом так быстро.
ладно по крайней мере ты можешь это исправить :
//начало
# import curses and GPIO import curses import RPi.GPIO as GPIO GPIO.setwarnings(False) #set GPIO numbering mode and define output pins GPIO.setmode(GPIO.BOARD) motor1a = 7 motor1b = 11 motor1e = 22 motor2a = 13 motor2b = 16 motor2e = 15 GPIO.setup(motor1a,GPIO.OUT) GPIO.setup(motor1b,GPIO.OUT) GPIO.setup(motor1e,GPIO.OUT) GPIO.setup(motor2a,GPIO.OUT) GPIO.setup(motor2b,GPIO.OUT) GPIO.setup(motor2e,GPIO.OUT) # Get the curses window, turn off echoing of keyboard to screen, turn on # instant (no waiting) key response, and use special values for cursor keys screen = curses.initscr() curses.noecho() curses.cbreak() curses.halfdelay(3) screen.keypad(True) try: while True: char = screen.getch() if char == ord('q'): break elif char == curses.KEY_UP: GPIO.output(motor1a,GPIO.HIGH) GPIO.output(motor1b,GPIO.LOW) GPIO.output(motor1e,GPIO.HIGH) GPIO.output(motor2a,GPIO.HIGH) GPIO.output(motor2b,GPIO.LOW) GPIO.output(motor2e,GPIO.HIGH) elif char == curses.KEY_DOWN: GPIO.output(motor1a,GPIO.LOW) GPIO.output(motor1b,GPIO.HIGH) GPIO.output(motor1e,GPIO.HIGH) GPIO.output(motor2a,GPIO.LOW) GPIO.output(motor2b,GPIO.HIGH) GPIO.output(motor2e,GPIO.HIGH) elif char == curses.KEY_RIGHT: GPIO.output(motor1a,GPIO.HIGH) GPIO.output(motor1b,GPIO.LOW) GPIO.output(motor1e,GPIO.HIGH) GPIO.output(motor2a,GPIO.LOW) GPIO.output(motor2b,GPIO.HIGH) GPIO.output(motor2e,GPIO.HIGH) elif char == curses.KEY_LEFT: GPIO.output(motor1a,GPIO.LOW) GPIO.output(motor1b,GPIO.HIGH) GPIO.output(motor1e,GPIO.HIGH) GPIO.output(motor2a,GPIO.HIGH) GPIO.output(motor2b,GPIO.LOW) GPIO.output(motor2e,GPIO.HIGH) elif char == 10: GPIO.output(motor1a,GPIO.LOW) GPIO.output(motor1b,GPIO.LOW) GPIO.output(motor1e,GPIO.LOW) GPIO.output(motor2a,GPIO.LOW) GPIO.output(motor2b,GPIO.LOW) GPIO.output(motor2e,GPIO.LOW) finally: #Close down curses properly, inc turn echo back on! curses.nocbreak(); screen.keypad(0); curses.echo() curses.endwin() GPIO.cleanup()
// конец
в приведенном выше коде двигатель продолжает работать до тех пор , пока не будет нажата следующая клавиша , поэтому как заставить его работать так: "Нажмите клавишу , чтобы запустить, и остановитесь, когда клавиша будет повторно нажата"