Первый проект, Python 3 на пи, кажется, не может запустить его сразу при запуске - PullRequest
1 голос
/ 20 июня 2020

Мне нужно было сделать простую вещь, и это казалось хорошим стартовым проектом для изучения python. Я следовал этому руководству по GPIO musi c box (https://projects.raspberrypi.org/en/projects/gpio-music-box), и он отлично работает в MU, Thonny Python IDE, но когда я запускаю Geany, он открывается в терминале, запускается end, нет звука на кнопке пу sh. Мне нужно, чтобы этот скрипт запускался автоматически после загрузки raspbian и воспроизводил звуки при запуске. Я пробовал редактировать r c .local, bashr c и crontab для автоматического c запуска.

Итак, это работает на pi3, и сценарий выглядит примерно так:

import pygame from 

gpiozero import Button

pygame.init()

drum = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_tom_mid_hard.wav") 

cymbal = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_cymbal_hard.wav") 

snare = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_snare_hard.wav") 

bell = pygame.mixer.Sound("/home/pi/gpio-music-box/samples/drum_cowbell.wav")

btn_drum = Button(4)

btn_drum.when_pressed = drum.play

Это не работает, потому что, когда скрипт запускается в терминале, он не импортирует эту python библиотеку? Мой единственный другой опыт программирования - это простые проекты C# на устройствах Crestron.

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Программа, запущенная в терминале, завершится после выполнения всего кода. Если вам нужна программа, которая пассивно сидит и слушает вводимые пользователем данные, вам нужно добавить al oop, чтобы программа продолжала работать. Структура basi c выглядит так (взято из https://realpython.com/pygame-a-primer/#setting -up-the-game-l oop)

# Variable to keep the main loop running
running = True

# Main loop
while running:

    # Look at every event in the queue
    for event in pygame.event.get():
        # Did the user hit a key?
        if event.type == KEYDOWN:
            # Was it the Escape key? If so, stop the loop.
            if event.key == K_ESCAPE:
                running = False

        # Did the user click the window close button? If so, stop the loop.
        elif event.type == QUIT:
            running = False

Если эта структура вам не знакома , идея состоит в том, что пока переменная running = True, программа будет возвращаться к строке while каждый раз, когда достигнет конца. Если вы действительно хотите завершить программу, например, позволяя пользователю нажать клавишу выхода для выхода, вы добавляете прослушиватель событий, как показано, которое изменяет текущую переменную на false.

Если я понимаю вашу проблему правильно, поместите все свои инициализации и импорт в начало скрипта, а затем все ваши прослушиватели событий в l oop. Я также настоятельно рекомендую прочитать документацию по pygame.

0 голосов
/ 20 июня 2020

Все, что вы сделали, это загрузили звуки. Чтобы воспроизвести звук, вам нужно набрать, например,

drum.play ()

, чтобы воспроизвести звук ударных.

...