Python не считывает правильные значения из последовательного выхода arduino - программирование
Подтвердить что ты не робот

Python не считывает правильные значения из последовательного выхода arduino

Я пытаюсь прочитать значения потенциометра от arduino, используя python. Но мои порядковые значения чтения странны.

Код Python:

import serial

ser = serial.Serial('COM12')

print ( "connected to: " + ser.portstr )
count = 1                    

while True:
    for line in ser.read():
        print( str(count) + str( ': ' ) + str( line ) )
        count = count + 1


ser.close()

Код Arduino:

int potpin = 0;  // analog pin used to connect the potentiometer
int val = 0;       // variable to store the value coming from the sensor
int oldVal = 0;   // used for updating the serial print

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

void loop() 
{ 
  val = analogRead(potpin);             
  val = map(val, 0, 1023, 0, 179);     

  if( val != oldVal )
  {
    Serial.print(val);         // print the value from the potentiometer
    oldVal = val;
  }

  delay(100);
}

Некоторые выходные данные на Python: Этот результат исходил из прямого, медленного увеличения потенциометра, я ни разу не отклонил его.

1: 56
2: 57
3: 49
4: 48
5: 49
6: 49
7: 49
8: 50
9: 49
10: 51

Когда я запускаю серийный терминал arduino, я получаю значения, которые варьируются от 0-179. Почему Python не получает правильные значения из последовательного порта?

Спасибо

EDIT:

Решил проблему. 48-55 - значения ascii для 1-9, поэтому вопрос изменения кода на питоне для печати символа не является значением. Однако это вызывает еще одну проблему: печатает отдельные цифры. например, число "10" входит в число "1" и "0". Это просто решается с помощью Serial.write вместо Serial.print в эскизе arduino. Это также означает, что вы будете получать байт, который является вашим номером, а не значением ascii для номера, поэтому вам не нужно преобразовывать считанные строки из значения в ascii.

Надеюсь, что это поможет.

4b9b3361

Ответ 1

Позвольте мне попытаться предложить несколько комментариев, которые могут быть полезны другим людям с аналогичными проблемами (хотя эта проблема была решена). Сначала попробуйте несколько раз запустить эскиз Arduino с помощью Serial Monitor. Серийный монитор можно найти в меню "Инструменты" в меню IDE. Вы также можете ввести Ctrl-Shift-M для вызова Serial Monitor.

Посмотрите, что появляется. Это будет часто полезно, если ваш эскиз пытается отправить данные через Serial.print(). Несколько заметок. Убедитесь, что скорость передачи в Serial Monitor точно соответствует скорости передачи в вашем эскизе (9600 - хороший выбор практически во всех случаях).

Второе примечание имеет решающее значение. Приведение Serial Monitor заставляет a reset на плате Arduino. Ваш эскиз начинается (всегда). Это хорошо, потому что это дает вам свежий ход каждый раз. Обратите внимание, что вы можете принудительно установить reset, установив скорость передачи до 9600 (даже если она уже равна 9600). Это позволяет запускать много тестов внутри последовательного монитора без необходимости перезапуска последовательного монитора каждый раз.

Что касается исходной проблемы, вероятно, у вас должны быть какие-то разделители данных. Например, вы можете отправить значения типа < 53 > . В Python вы сканируете '<' а затем продолжайте читать цифры, пока не получите " > ". Это позволит отправлять несколько цифр как одно числовое значение.