Então, desisti de usar PHP pra pegar os dados da porta serial e agora tô usando C.
O sistema consiste num programa em C que envia um caracter pra porta serial, e quando o Arduino detecta esse caracter, ele envia as leituras analógicas.
Código do Arduino:
#define ANALOG_PIN_0 0
#define ANALOG_PIN_1 1
#define ANALOG_PIN_2 2
#define ANALOG_PIN_3 3
#define ANALOG_PIN_4 4
#define ANALOG_PIN_5 5
#define ANALOG_PIN_6 6
#define ANALOG_PIN_7 7
#define ANALOG_PIN_8 8
#define ANALOG_PIN_9 9
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop()
{
if (Serial.available() > 0) {
if (Serial.read() == '1') {
int n;
float temp_circ = 0, temp_agua = 0;
for (n = 0; n < 8; n++) {
temp_circ = temp_circ + analogRead(ANALOG_PIN_0);
temp_agua = temp_agua + analogRead(ANALOG_PIN_1);
}
temp_circ = temp_circ / 8;
temp_agua = temp_agua / 8;
int tensao_motor_1 = analogRead(ANALOG_PIN_2);
int tensao_motor_2 = analogRead(ANALOG_PIN_3);
int tensao_motor_3 = analogRead(ANALOG_PIN_4);
int tensao_bateria = analogRead(ANALOG_PIN_5);
int corr_motor_1 = analogRead(ANALOG_PIN_6);
int corr_motor_2 = analogRead(ANALOG_PIN_7);
int corr_motor_3 = analogRead(ANALOG_PIN_8);
int umidade = analogRead(ANALOG_PIN_9);
int inundacao = digitalRead(2);
Serial.print(temp_circ);
Serial.print(" ");
Serial.print(temp_agua);
Serial.print(" ");
Serial.print(tensao_motor_1);
Serial.print(" ");
Serial.print(tensao_motor_2);
Serial.print(" ");
Serial.print(tensao_motor_3);
Serial.print(" ");
Serial.print(tensao_bateria);
Serial.print(" ");
Serial.print(corr_motor_1);
Serial.print(" ");
Serial.print(corr_motor_2);
Serial.print(" ");
Serial.print(corr_motor_3);
Serial.print(" ");
Serial.print(umidade);
Serial.print(" ");
Serial.print(inundacao);
Serial.println(" ");
}
}
}
Código do C:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
const int tamanho = 70;
int main()
{
int n;
int valor;
for (n=1;;n++)
{
FILE *porta = fopen("/dev/ttyUSB0", "w+");
char caracter[1] = "1";
fwrite(&caracter, sizeof(caracter), 1, porta);
usleep(1000000);
char valores[tamanho];
fgets(valores, tamanho, porta);
fclose(porta);
printf("%s", valores);
FILE *sensores = fopen("sensores.log", "w");
fputs(valores, sensores);
fclose(sensores);
}
}
O problema é que às vezes, quando o programa C recebe os dados, alguns caracteres do início somem, eu quera saber o que causa isso.