Estou querendo criar um mini protocolo de comunicação entre meu arduino e o C++ onde estou a desenvolver uma interface básica para testes, só que estou com algum problema na hora de ler valores 'string' para poder mandar pro arduino.
Eu vou ter uma interface que vai ter que ficar lendo a temperatura do arduino, MAS o arduino atuaria como um terminal, ele recebe um comando e devolve um valor, então eu mandaria pro arduino
"temp" e ele responderia o valor lido pelo sensor, ...
o problema é que ele esta lendo t,e,m,p ... até aí beleza dava pra criar um "buffer" de leitura, só que cada comando vai ter uma quatidade de caracteres, então eu não sei a largura do buffer, dai estou tentando implementar algo que funcione assim:
comando - palavra sem espaços "temp","led" ...
parametros - "numeros ou palavras separados por 1 espaço"
caracater final - caracter que define o fim do parametro ";"
um exemplo:
ligaled 13; (arduino não devolve nada, só vai ligar o led na porta 13)
desligaled 13; (arduino não devolve nada, só vai desligar o led na porta 13)
temperatura; (arduino envia o valor da temperatura);
Com este mini protocolo eu sei dos 2 lados qual o caracter que define o fim de um comando, e também fica mais fácil pra saber no C++ quando vem a temperatura, e talz...
eu fiz esta função para retornar uma string com o valor lido, mas ainda retorna quebrando linha por estar ...
String serialRead(){
char actualChar;
String finalString;
while (Serial.available() > 0) {
actualChar = Serial.read();
finalString.concat(actualChar);
}
return finalString;
}
Finalmente eu andei estudando um pouco esta lib: http://interactive-matter.eu/how-to/ajson-arduino-json-library/
Pra trabalhar com JSON, minha ideia era ter alguns comandos neste meu protocolo, que retornassem json pela serial, tipo
"read -general;"
iria retornar uma leitura dos sensores catalogados:
{"temperature":27.8,"trimpot":300}
Mas também não estou conseguindo mandar esta para serial a string final montada, como eu mostrei...
Só consegui fazer ao contrário, ao interpretar a string e separar os valores...