Отправка значений с помощью pyserial не работает, если на Arduino Due также есть распознавание.

Я использую Arduino Due, чтобы создать цикл обратной связи с использованием Python, но, похоже, это не работает. Код Python, который я использую, следующий:

from serial import Serial
board = Serial('COM11',9600)
board.write('100'.encode()) # 100 взят в качестве примера

На самом деле, если я просто использую Arduino для измерения напряжения датчика, все получится. То же самое, если напряжение подается без измерения датчиком. Но, как только я поставил оба одновременно, датчик в порядке, но Ардуино ничего не читает. Однако если я отправлю напряжение не с помощью Python, а с помощью Arduino IDE, все будет в порядке.

Кажется, что Arduino не может выполнять две операции одновременно, но это странно. Вот мой код Arduino:

int const controller = DAC0; // Устанавливаем выходной контакт контроллера
int const sensor = A1; // Устанавливаем контакт датчика
double MeanNumber = 500;

void setup() {
  Serial.begin(9600);
  pinMode(controller, OUTPUT);
  analogReadResolution(12);
}

double get_voltage(int Measure)
{
  double voltage;
  voltage = Measure * 3.3 / 4095.0; 
  return voltage;
}

void loop() {
  double Measure = 0;

  double voltage;
  for (int i = 0; i < int(MeanNumber); i++) // Реализуем среднее значение каждого значения MeanNumber
  {
    Measure = Measure + analogRead(sensor) / MeanNumber;
    delay(1);
  }

  // Отправляем усредненную меру в Python
  voltage = get_voltage(Measure);
  Serial.println(voltage,4);
  
  // Получаем обратную связь от Python
  if (Serial.available() > 0)
  {// Проверьте, доступны ли данные
    String receivedData = Serial.readString(); // Считаем значение напряжения из байтов в строку
    float value = receivedData.toFloat(); // Преобразуем напряжение в число с плавающей запятой
    analogWrite(controller,value); // Отправляем сигнал через Arduino
  }

}

У вас есть представление о том, что не так с моей работой?

, 👍1

Обсуждение

Всякий раз, когда Python открывает порт, Arduino сбрасывается. Обычно помогает сразу после открытия порта в Python заснуть на пару секунд (time.sleep(3))., @Fahad


1 ответ


2

Открытие последовательного соединения приведет к сбросу Arduino. Код Python может делать это при создании порта. Добавьте строку Serial.print("Starting") в функцию настройки, чтобы проверить, происходит ли это.

,