С кодом на стороне Ардуины всё в порядке, вот он:
Код:
boolean dataReady = 0;
char incomingChar;
char typeMessage;
String input = "";
int defaultValueC4900ControlVoltage = 1; //[0:255]
int FromPCValueC4900ControlVoltage = defaultValueC4900ControlVoltage;
void setup()
{
Serial.begin(9600);
}
void loop()
{
while (Serial.available())
{
incomingChar = (char)Serial.read();
if (incomingChar == 'F' /*|| incomingChar == 'C'*/)
{
dataReady = 0;
typeMessage = incomingChar;
input = "";
continue;
}
//Serial.print("typeMessage:");
//Serial.println(typeMessage);
if (incomingChar != '!' && (typeMessage == 'F' /*|| typeMessage == 'C'*/))
{
input += incomingChar;
}
else
{
dataReady = 1;
}
}
if (dataReady == 1 && typeMessage == 'F')
{
FromPCValueC4900ControlVoltage = input.toInt();
Serial.print("FromPCValueC4900ControlVoltage:");
Serial.println(FromPCValueC4900ControlVoltage);
dataReady = 0;
typeMessage = NULL;
}
/*if (dataReady == 1 && typeMessage == 'C')
{
int Vol = input.toInt();
Serial.print("VolC:");
Serial.println(Vol);
dataReady = 0;
typeMessage = NULL;
}*/
analogWrite(9, FromPCValueC4900ControlVoltage); // Необходимо подбирать коэффициэнт [0:255]
int sensorRealValueC4900ControlVoltage = analogRead(A0); // [0:1023]
//float realC4900ControlVoltage = sensorValueC4900ControlVoltage * (5.0 / 1023.0);
Serial.print("C");
Serial.print(sensorRealValueC4900ControlVoltage);
Serial.println("!");
int sensorSupplyOutputVoltage = analogRead(A1); // [0:1023]
Serial.print("O");
Serial.print(sensorSupplyOutputVoltage);
Serial.println("!");
int sensorPhotomultiplierOutputVoltage = analogRead(A2); // [0:1023]
Serial.print("P");
Serial.print(sensorPhotomultiplierOutputVoltage);
Serial.println("!");
}
Ардуина считывает только команды F1234! и отдаёт C1234! O1234! P1234! Всё идеально работает. Теперь следующий вопрос - а как мне из MATLAB в режиме реального времени и считывать данные из COM порта и посылать туда данные?