Wolfram Mathematica читает, но закрывает потоки из последовательного порта Arduino после нескольких наборов данных

Это проблема последовательной подачи Wolfram Mathematica/Arduino, но я пишу здесь только для того, чтобы получить предложения по улучшению кода Arduino или ноутбука Mathematica. Исходное сообщение находится здесь сообщение Mathematica Exchange и в здесь

Скетч Arduino контролирует датчик и возвращает набор из трех целочисленных чисел.

     #include <Wire.h>
#include "Adafruit_AS726x.h"

//создаем объект
Adafruit_AS726x ams;

//буфер для чтения необработанных значений
uint16_t sensorValues[AS726x_NUM_CHANNELS];

//буфер для сохранения калиброванных значений (в этом коде не используется)
//плавающие калиброванные значения[AS726x_NUM_CHANNELS];

void setup() {
  Serial.begin(9600);
  while(!Serial);
  
  // инициализирует цифровой вывод LED_BUILTIN как выход.
  pinMode(LED_BUILTIN, OUTPUT);
  
  //запускаем и разрешаем связь с датчиком
  if(!ams.begin()){
    Serial.println("could not connect to sensor! Please check your wiring.");
    while(1);
  }
}

void loop() {

  //считываем температуру датчика
  uint8_t temp = ams.readTemperature();
  
  //ams.drvOn(); // раскомментируйте это, если вы хотите использовать датчик для выполнения измерений
  ams.startMeasurement(); //начинаем измерение
  
  //позволяет датчику читать данные, если они доступны
  bool rdy = false;
  while(!rdy){
    //задержка(1000);
    rdy = ams.dataReady();
  }
  //ams.drvOff(); //раскомментируйте, если хотите использовать датчик для измерений

  //читаем значения!
  ams.readRawValues(sensorValues);
  //ams.readCalibratedValues(калиброванные значения);

   //Serial.print("{");
  //Serial.print("Темп: ");
  //Serial.print(temp);
  //Serial.print(",");
  //Serial.print(" Фиолетовый: ");
  //Serial.print(sensorValues[AS726x_VIOLET]);
   //Serial.print(",");
  //Serial.print(" Синий: ");
  Serial.print(sensorValues[AS726x_BLUE]);
   Serial.print(",");
  //Serial.print(" Зеленый: ");
  //Serial.print(sensorValues[AS726x_GREEN]);
   //Serial.print(",");
  //Serial.print(" Желтый: ");
   Serial.print(sensorValues[AS726x_YELLOW]);
    Serial.print(",");
  //Serial.print(" Оранжевый: ");
  //Serial.print(sensorValues[AS726x_ORANGE]);
   //Serial.print(",");
  //Serial.print(" Красный: ");
  Serial.print(sensorValues[AS726x_RED]);
  //Serial.print("}");
   
  Serial.println();
  //Serial.println();
  delay(400);

Тетради Mathematica

dev = DeviceOpen["Serial", "COM3"]

parseData[{val1__, 44, val2__, 44, val3__}] := 
 ToExpression@FromCharacterCode@# & /@ {{val1}, {val2}, {val3}}
parseData[___] := Sequence[]
rawReadings = {}
task = SessionSubmit[
  ScheduledTask[
   AppendTo[rawReadings, 
    DeviceReadBuffer[dev, "ReadTerminator" -> 10]], {1, 100}, 
   "AutoRemove" -> True]]
test1 = parseData /@ rawReadings
ListLinePlot[Transpose[parseData /@ rawReadings], 
  PlotLegends -> Automatic] // Dynamic
DeviceClose[dev]

Но ноутбуки не возвращают динамический поток данных от Arduino. Он закрывается и не может определить причину. Предполагается, что поток будет осуществляться непрерывно.

, 👍-1

Обсуждение

Я думаю, что закомментированный код следует удалить., @Peter Mortensen

Существует целый класс [этих проблем с подключением при переполнении стека](https://stackoverflow.com/questions/tagged/processing+arduino). [Пример 1](https://stackoverflow.com/questions/65216620/processing-missing-serial-data-from-arduino-using-readstringuntil). [Пример 2](https://stackoverflow.com/questions/74707859/how-do-i-control-servos-using-processing-code-and-an-arduino-uno-board). Здесь тоже?, @Peter Mortensen

Эта тема не имеет никакого отношения к Processing, LabView или Matlab. Это относится к дескриптору последовательного порта Arduino в Wolfram Mathematica. Можете ли вы объяснить, как это способствует моей проблеме?, @Jose Enrique Calderon


1 ответ


0

Хосе! Как я уже упоминал в Mathematica SE, вам необходимо удалить операторы задержки из вашего кода и дополнительно отправлять данные в последовательный порт только в том случае, если поступили новые данные.

,

Спасибо за ваш отзыв! Я опубликовал обновление в Mathematica Exchange с исправленным кодом и вашими предложениями. Но пока не получается поддерживать постоянный динамический поток., @Jose Enrique Calderon