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 ответ
Хосе! Как я уже упоминал в Mathematica SE, вам необходимо удалить операторы задержки из вашего кода и дополнительно отправлять данные в последовательный порт только в том случае, если поступили новые данные.
Спасибо за ваш отзыв! Я опубликовал обновление в Mathematica Exchange с исправленным кодом и вашими предложениями. Но пока не получается поддерживать постоянный динамический поток., @Jose Enrique Calderon
- Serial.availableForWrite против Serial.flush
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
Я думаю, что закомментированный код следует удалить., @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