2016-09-09 5 views
0

Я пытаюсь запустить бесконечный цикл, в котором контролируется расширение и перемещение линейного привода. Объем расширения контролируется пользовательским входом со значением от 0 до 9, то есть, если я нахожу 9 и вхожу, привод будет расширяться до максимального расширения, и если я нажму 5 и войду, привод вернется к 50% -ному расширению.Python версия Arduino's Serial.available

Я использую PINE A64 + с MCP3008, подключенным к шине Pi-2, и просто пытаюсь заменить установку, с которой я работал с приводом Arduino +, с автономной встроенной установкой Linux.

Я не уверен, как идти о постоянном мониторинге программы raw_input при запуске бесконечного цикла в фоновом режиме. Я был в состоянии сделать это в моем Arduino код следующим:

if (Serial.available() > 0) { 
    userInput = Serial.read()-48; 
    Serial.println(userInput); 
} 

Как бы я идти о делать что-то подобное в Python? Я попытался использовать команду PySerial inWaiting, но это не дает мне того же результата. По сути, я хочу, чтобы программа делать либо одно из двух possibilites:

  1. Используйте, если заявление в петле только присвоить новое значение переменное, используемые при наличии пользовательского ввода, или
  2. Для мониторинга для входа постоянно, а когда есть вход, чтобы разбить цикл, назначьте новое значение переменной, используемой циклом, и снова введите петлю.

Это будет выглядеть примерно так:

# begin loop w/ while True statement 

# using if statement to enter only if there is user input, otherwise pass over 
if Whatever: 
    Terminal[0] = user input 

getVal = analogRead(0, PI2CLK, PI2MOSI, PI2MISO, PI2CS) 

if (positionArray[Terminal[0]] - 10) < getVal < (positionArray[Terminal[0]] + 10): 
    PWM0A.stop() 
    PWM0B.stop() 
elif getVal > positionArray[Terminal[0]]: 
    PWM0A.start(100) 
    PWM0B.stop() 
elif getVal < positionArray[Terminal[0]]: 
    PWM0A.stop() 
    PWM0B.start(100) 

# end loop 

Какой самый лучший способ идти об этом? Заранее спасибо :)

+0

Не могли бы вы предоставить дополнительную информацию об установке оборудования/программного обеспечения? Как вы используете Python на arduino resp. как вы взаимодействуете с ардуином? – albert

+0

@albert Я использую PINE A64 + с MCP3008, подключенным к шине Pi-2. Там нет Ардуино. Я просто заменяю настройки, которые у меня были с Arduino, с автономной встроенной системой Linux. – LUX

ответ

0

От the documentation:

in_waiting 
    Getter: Get the number of bytes in the input buffer 
    Type: int 

    Return the number of bytes in the receive buffer. 
0

Отвечая на мой собственный вопрос - я заметил облажался на логику в моей голове немного. Я пытался использовать один и тот же внутренний последовательный порт (тот, который использовал сценарий python для ввода информации). Очевидно, это не сработает. Вот почему моя функция inWaiting давала странные результаты.

По существу, я открыл новый COM-порт с использованием serial.Serial (ttyS0), создал новое окно терминала для отправки данных в ttyS0, затем использовал команду serial.inWaiting для повторного запуска оператора if каждый раз, когда новое значение было вошел. На этот раз он работал правильно. В основном то же самое, что и в моем коде Arduino. Doh :)