Итак, мне нужно подсоединить мою Arduino UNO к Mathematica и считывать 3 аналоговых значения с пинов A0, A1, A2, к которым подключено по фотодиоду.
Насколько я понимаю, есть 2 способа, как я могу общаться с Arduino Uno через Mathematica:
Первый: у меня есть правильно работающий Arduino IDE скетч, который может быть загружен в девайс через Mathematica. Примерно также, как это описано здесь:
community.wolfram.com/groups/-/m/t/936358
Тем не менее, у меня не получается в правильном формате вставить codestr, Mathematica выдает ошибку компиляции постоянно.
Вот мой скетч, который компилируется и работает правильно:
int raw1 = 0, raw2 = 0, raw3 = 0;
int x = 0, y1 = 0, y2 = 0, y3 = 0;
void setup()
{
Serial.begin(9600);
pinMode( A0, INPUT );
pinMode( A1, INPUT );
pinMode( A2, INPUT );
analogReference(INTERNAL);
}
void loop()
{
while (x<=6000)
{
raw1 = analogRead( A0 );
y1=raw1;
raw2 = analogRead( A1 );
y2=raw2;
raw3 = analogRead( A2 );
y3=raw3;
x++;
Serial.print( y1 );
Serial.print("\t");
Serial.print( y2 );
Serial.print("\t");
Serial.print( y3 );
Serial.println();
delay(400);
}
}
Второй: в Mathematica 11 (версия, которой я пользуюсь) существует ряд команд, которые позволяют общаться с девайсом без помощи языка Arduino IDE. Насколько я понимаю, в случае если я хочу считывать 3 значения каждые 0.01 секунды на протяжении секунды, мой код должен выглядеть следующим образом:
Uno = DeviceOpen["Arduino", "COM3"];
DeviceConfigure[Uno, <|"A0" -> "AnalogInput", "A1" -> "AnalogInput", "A2" -> "AnalogInput"|>];
DeviceReadTimeSeries[Uno, {1, 0.01}, {"A0", "ReadMode" -> "Analog"}]
DeviceReadTimeSeries[Uno, {1, 0.01}, {"A1", "ReadMode" -> "Analog"}]
DeviceReadTimeSeries[Uno, {1, 0.01}, {"A2", "ReadMode" -> "Analog"}]
DeviceClose[Uno]
Но Mathematica отказывается компилировать и пишет следующую ошибку:
CCompilerDriver`CreateObjectFile::cmperr: Compile error: avr-g++: error:C:\Users\Username\AppData\Local\Temp\arduinocompile1420c72c8f614b19b9df9d5891fcf275\SketchTemplate.cpp.c: No such file or directory
Кто-нибудь мог бы помочь с этим вопросом?
Буду благодарен любому отклику.