C ++ ifstream von Linux nach Arduino
original code
#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);
}
Hier ist das Problem:
cin >> value;
arduino_output << value << endl;
arduino_input >> txt;//I never recieve the "OK" (Which I should get)
cout << txt;
aber wenn ich das mache, funktioniert es:
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"
Wie kann ich meinen schnellen Computer in die Lage versetzen, die langsame Ausgabe des Arduino zu lesen? (Ohne for-Schleifen zu verwenden, um Zeit zu verschwenden)
Hier sagt es ein paar Dinge über Rückrufhttp: //www.cplusplus.com/reference/ios/ios_base/register_callback aber ich konnte es nie zum Laufen bringen. Es werden 3 Ereignisse unterstützt, und keines davon ist: "Wenn der Eingabepuffer nicht leer ist, rufen Sie diese Funktion auf."
Denn die ultimative Lösung wäre eine Rückruffunktion, wenn der Eingabepuffer nicht leer ist.
Eine akzeptable Lösung wäre eine C ++ - äquivalente Version der Arduino-Version "Serial.available ()".
Eine andere akzeptable Lösung wäre alles, was mich zwingt, mich nicht auf zwei for-Schleifen zu verlassen. 3 for-loops sind nicht akzeptabel, wenn Sie das denken.
EDIT1: Zeigt den Originalcode
EDIT2: Ich benutze Linux (Lubuntu)
EDIT3: Jemand wurde verwirrt, wo der Code geschrieben wurde. Seltsam