C ++ ifstream do linux para o arduino
código original
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ofstream arduino_output("/dev/ttyACM0");
ifstream arduino_input("/dev/ttyACM0");
int value;
string txt;
while(cin >> value){
arduino_output << value << endl;
arduino_input >> txt;//I never recieve the "OK" (Which I should get)
cout << txt;
}
arduino_input.close();
arduino_output.close();
return(0);
}
Aqui está o problema:
cin >> value;
arduino_output << value << endl;
arduino_input >> txt;//I never recieve the "OK" (Which I should get)
cout << txt;
mas se eu fizer isso, funciona:
cin >> value;
arduino_output << value << endl;
for(int i=0;i<10000;++i)
for(int j=0;j<10000;++j){ //Waste a lot of time
++value;
--value;
}
arduino_input >> txt; //I always recieve the "OK"
cout << txt; //I can see the "OK"
Então, como faço para que meu computador rápido consiga ler a saída lenta do arduino? (Sem usar for-loops para perder tempo)
Aqui diz algumas coisas sobre retorno de chamadahttp://www.cplusplus.com/reference/ios/ios_base/register_callback/ mas eu nunca consegui fazê-lo funcionar. Ele diz que suporta 3 eventos e nenhum deles é: "Se o buffer de entrada não estiver vazio, chame esta função".
Como a solução definitiva seria uma função de retorno de chamada sempre que o buffer de entrada não estiver vazio.
Uma solução aceitável seria uma versão equivalente a c ++ da versão do arduino "Serial.available ()".
Outra solução aceitável seria qualquer coisa que me force a não confiar em dois argumentos. 3 for-loops não são aceitáveis se é isso que você está pensando.
EDIT1: mostrou o código original
EDIT2: Estou usando o linux (lubuntu)
EDIT3: Alguém ficou confuso onde o código foi escrito. Estranho.