2015-03-01 3 views
0

У меня есть небольшой проект, над которым я работаю, это довольно просто, поэтому я надеюсь, что кто-то может мне помочь.Выполнение бесконечного цикла в ожидании ввода

Я использую малиновый pi, чтобы свести к минимуму один светодиод с очень сырой PWM.

мой PWM код выглядит следующим образом:

import RPi.GPIO as GPIO 
import time 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(7, GPIO.OUT) 
frequency = 0.005 
dwell = 0.0001 
while True: 
    time.sleep(frequency) 
    GPIO.output(7, 1) 
    time.sleep(dwell) 
    GPIO.output(7, 0) 

В основном, для того, чтобы светодиод, чтобы гореть, при яркости, определяемой «обитать» Мне нужно, что немного кода, чтобы продолжить зацикливания.

То, что я хотел бы сделать, это использовать что-то вроде

dwell=raw_input('brightness:') 

так, что в то время как код ШИМ цикла, я могу упасть в новом значении для выдержки для регулировки яркости светодиода.

всех моих усилий до сих пор приводит к одному из следующих вариантов:

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

Может ли один из вас прекрасных людей предоставить мне пример кода, который объясняет, как я могу это достичь?

Для тех, кого это интересует, в конечном счете, то, что я хотел бы сделать, это установить значение пребывания через сокеты и использовать лучшую форму вывода ШИМ для управления светодиодными светильниками. Детские ступени :)

+0

Вы хотите, чтобы итерация до тех пор, пока на входе не будет определенного значения? – levi

+0

Я просто хочу, чтобы он продолжал навсегда использовать значение остатка. пользователь должен иметь возможность постоянно регулировать значение задержки. цикл должен просто продолжаться и просто проверять значение выдержки каждый раз, когда он итерации. –

ответ

0

Похоже, вам нужно multithreading!

# import the module 
import threading 

# define a function to be called in the other thread 
def get_input(): 
    while True: 
     dwell=raw_input() 

# create a Thread object 
input_thread=threading.Thread(target=get_input) 

# start the thread 
input_thread.start() 

# now enter the infinite loop 
while True: 
    time.sleep(frequency) 
    GPIO.output(7, 1) 
    time.sleep(dwell) 
    GPIO.output(7, 0) 

Там, наверное, кое-что о locks или semaphores или mutex...es (mutices?) здесь отсутствует, но я много о тех, кто не знает. Простые вещи вроде этого, похоже, работают на меня.

+0

Боюсь, что ваш пример не сработал для меня; он попросил ввести, установить яркость, но не разрешил дальнейший ввод –

+0

Я уверен, что это опубликует в беспорядке, я не знаю, как отформатировать ответ - возможно, кто-то может помочь ..... импорт резьб импорт RPi.GPIO, как GPIO времени импорта GPIO.setmode (GPIO.BCM) GPIO.setup (7, GPIO.OUT) частоты = 0,005 пребывань = 0.01 защиту get_input (задержка): = пребывань raw_input («Яркость:») input_thread = threading.Thread (target = get_input (live)) input_thread.start() в то время как True: time.sleep (частота) GPIO.output (7, 1) time.sleep (обитать) GPIO.output (7, 0) –

+0

@ByronHill Вы можете легко изменить 'get_input()' в продолжайте просить ввода. Я отредактирую свой пост.Кстати, вы можете окружать текст с помощью backquotes ('), чтобы отформатировать его как код в комментариях (или в вопросах/ответах). – KSFT

Смежные вопросы