Member 13994533 Ответов: 2

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()


// конец
в приведенном выше коде двигатель продолжает работать до тех пор , пока не будет нажата следующая клавиша , поэтому как заставить его работать так: "Нажмите клавишу , чтобы запустить, и остановитесь, когда клавиша будет повторно нажата"

2 Ответов

Рейтинг:
2

Member 13994533

да, хорошо, спасибо за это. ответьте, во всяком случае, я не думал об этом так быстро.
ладно по крайней мере ты можешь это исправить :

//начало

# 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()


// конец
в приведенном выше коде двигатель продолжает работать до тех пор , пока не будет нажата следующая клавиша , поэтому как заставить его работать так: "Нажмите клавишу , чтобы запустить, и остановитесь, когда клавиша будет повторно нажата"


Nelek

Пожалуйста, не используйте решения, чтобы говорить, как это было бы в чате. Они не останутся хронологически, поэтому после "разговора" будет беспорядок. Вместо этого вы можете использовать виджет "улучшить вопрос", чтобы добавить туда соответствующую информацию, а затем использовать "есть вопрос или комментарий?" (как я делаю сейчас с вами), чтобы сообщить, что вы разместили новую информацию тому, кто ее запрашивает.

Я перемещаю этот код на вопрос и говорю OriginalGriff, чтобы посмотреть, как вы должны это делать в будущем.

Рейтинг:
0

OriginalGriff

Цитата:
для этого мне нужен код, который выглядит следующим образом:

Это не совсем так работает.
Мы не делаем вашу работу за вас.
Если вы хотите, чтобы кто - то написал ваш код, вы должны заплатить- я предлагаю вам пойти в Freelancer.com и спросите там.

Но знайте: вы получаете то, за что платите. Плати копейки, получай обезьян.

Идея "развития" заключается в следующем: "систематическое использование научно - технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".
Так что либо заплатите кому-нибудь за это, либо научитесь писать сами. Мы здесь не для того, чтобы делать это за вас.


Nelek

Эй, ОГ... ОП только что опубликовал не решение, чтобы дать больше информации и показать свой код. Я поднял его повыше. Пожалуйста, взгляните