2016-09-13 2 views
0

Я пытаюсь прочитать последовательные данные ардуино, который был несколько успешным. Значения, которые будут считаться от arduino, являются напряжением и током. Я сейчас пытаюсь отличить разные переменные, но я понятия не имею. Ардуино отправляет значения в следующем порядке с задержкой в ​​1 секунду. Напряжение, AMP, напряжение, AMP. Как я могу отличить эти значения от разных переменных? Вот мой текущий код, который вообще не отличает переменные.Serialdata import python «любая другая точка данных»

import time 
import serial 
values = [] 
serialVoltage = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=1) 
voltage = serialVoltage.readline() 
time.sleep(1) 
while True:print(voltage) 



void setup() { 
     Serial.begin(9600); 
     } 

    void loop() { 
     float voltageRead = analogRead(A0); 
     float ampsRead = analogRead(A1); 
     float calculatedVoltage = voltageRead/103; 
     float calculatedCurrent = ampsRead/1; 
     Serial.println(calculatedVoltage); 
     delay(1000); 
     Serial.println(calculatedCurrent); 

     delay(1000); 
    } 
+0

Можете ли вы предоставить часть вывода? Значения напряжения явно отличаются от значений amp? Я думаю, вы захотите попробовать и разделить их на стороне малины. – mitoRibo

+0

Если я использую код, предоставленный holdenweb, я получаю следующий вывод: ('v', '4.03 \ r \ n', 'A', '403.00 \ r \ n ') Они, очевидно, разные, 403 не является правильным значением, хотя, поскольку я еще не подключил датчик к току. Я думаю, максимальные усилители будут составлять около 10/13 ампер в этом состоянии. – JHCJ

ответ

0

Прежде всего, вы не должны нуждаться в sleep секунды на Raspberry Pi - readline будет блокировать, пока выход не приходит.

Вы должны структурировать свой код для чтения напряжения и тока отдельно:

while True: 
    voltage = serialVoltage.readline() 
    current = serialVoltage.readline() 
    print("V:", voltage, "A:", current) 

Заметим также, что если вы хотите работать со значениями строк, возвращаемых readline вы должны сначала явно преобразовать их в числовой форме.

Помните, что readline возвращает строку, которая включает в себя завершение строки - это символы '\r\n', которые вы упомянули в своем комментарии. Я не вижу, как создаются «плохие значения», которые вы упомянули, но, вероятно, было бы полезно, если бы выход Arduino позволял различать значения напряжения и тока.

Мое предложение состоит в том, что вы фактически распечатываете оба значения в одной строке от Arduino в формате, который может быть легко декодирован вашей программой Python. Поскольку кажется, что Arduino уже работает, когда вы запускаете программу Python на Pi, вы можете просто игнорировать первую (возможно, частично) строку, которую вы читаете, что гарантирует, что все последующие строки будут целыми.

«Нечетные значения», которые вы видите, потому что я предположил, что вы использовали форму print(voltage), что вы использовали Python 3! Так как вы по всей видимости, с помощью Python 2 ваше print заявление, наверное, следует читать что-то вроде

print "V:", voltage, "A:", current 

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

+0

Большое спасибо за ответ! Кажется, это трюк, выход немного странный, хотя ('v', '4.03 \ r \ n', 'A', '403.00 \ r \ n') - это то, что он должен быть? Если я набираю float (напряжение), я получаю ошибку, иногда говоря мне, что значение неверно (4.03.404.00). Это, конечно, плохое значение. Время начала сценария, по-видимому, имеет значение, чтобы избежать ошибки. Что я могу сделать, чтобы избежать этой ошибки? – JHCJ

+0

Я обновил ответ, который, я надеюсь, рассмотрит дополнительные вопросы в вашем комментарии. – holdenweb

+0

Это утверждение печати работает немного лучше. Когда я удаляю float (переменную), я вообще не получаю никаких кодов ошибок. Первые два выхода кажутся неправильными, но после этого все сортирует сам и становится правильным. Существуют ли какие-либо минусы при печати значений в виде строки по сравнению с поплавком или целым числом? – JHCJ