Невозможно передать данные текстового файла в Arduino с помощью программы python - PullRequest
1 голос
/ 16 июня 2020

Я новичок как в Arduino, так и в python, и мне не удалось найти рабочий ответ. В настоящее время мой проект требует, чтобы я отправлял данные на свой arduino uno из текстового файла. Я пытался использовать программу python для чтения значений из текстового файла и отправки их на свой Arduino. Затем arduino должен использовать эти значения для управления двигателем. Я пробовал более простые тесты, такие как отправка высокого и низкого сигнала на двигатель, но проблема, похоже, возникает при отправке целых чисел и чисел с плавающей запятой в качестве входных данных для analogWrite (). Я бы предпочел использовать числа с плавающей запятой для большей точности, но рабочая система важнее.

Изменить: исправлено путем изменения b'number 'на number.encode (). Мне все еще интересно решение проблемы с Serial.available ().

Arduino :

const int motorPin = 9;
float input = 0;

void setup() {
  pinMode(motorPin, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  if (Serial.available()) {
    Serial.println("data has been entered");
    float x = Serial.parseFloat();
    if (x > 0) {
      input = x;
      analogWrite(motorPin, input);
    }
  }
  Serial.print(input);
  Serial.println(" was used");
}

В качестве примечания: у меня также была проблема где Serial.available () всегда будет возвращать истину после чтения всех значений, и я бы прочитал одно дополнительное значение 0. Это аргумент в пользу второго оператора if. Если есть способ получше, дайте мне знать. Я хотел бы прочитать 0, если они есть в данных.

Python:

import serial
import time

#Set by deault to COM4 -- change as needed
arduino = serial.Serial('COM4', 9600)

#Allow connection between the ports to clear 
time.sleep(2)

#Start an infinite loop to send data from acceleration text file to Arduino
f = open("accel_vals-1.txt", "r")
while 1:
    #will need to check later on if file can write while loop is running
    for number in f:
        arduino.write(b'number')
        print(number + " entered")
        time.sleep(1)

#Close file after program ends
f.close()

Текстовый файл :

0
10
20
30
40
50
60
70
80
90
100
90
80
70
60
50
40
30
20
10
0
100
200
250
200
100
0
...