Ich verwende einen esp 8266, um einen Epson Projektor über seine serielle Leitung zu steuern. Ich benutze einen Computer und OSC, um Funktionen auf dem ESP aufzurufen, die Epson serielle Befehle ausführen. Der Befehl, den ich nicht implementieren kann, ist Zoom. Der Epson Serial-Befehl, um die Linse in 1 „Klick“ zu vergrößern istSerielle Steuerung und Warten auf eine Antwort
ZOOM INC\r
Sobald der Projektor den Code ausführt, es gibt entweder ein :
oder :ERR
. In meiner Funktion wird angenommen, dass der Befehl mehrere Male ausgeführt wird, abhängig davon, was der Benutzer eingibt. In meiner Funktion möchte ich warten, bis der Projektor reagiert, bevor ich den Befehl erneut ausführe, und das ist es, was ich versucht habe.
void zoom_inc(OSCMessage &msg){
OSCMessage qLab_msg("/cue/p0/name");
Serial.print("Zoom ");
lock = 1;
char cmd[10] = "ZOOM INC\r";
if(msg.getInt(0) < 0){
cmd[5] = 'D';
cmd[6] = 'E';
}
int high = (abs(msg.getInt(0)) > 50)? 50 : abs(msg.getInt(0));
Serial.print(cmd);
Serial.print(" ");
Serial.print(high);
Serial.println(" times");
unsigned long startTime;
unsigned long currentTime;
unsigned long diff;
boolean response = false;
String readString; //create response string
for(int i = 0; i < high; i++){
projSerial.write(cmd);
startTime = millis();
while(!response){
while (projSerial.available() > 0) { //look for projector response
Serial.write(projSerial.read());
delay(3);
char c = projSerial.read();
readString += c;
}
readString.trim(); //clean projector response
if(readString.length() == 1){
Serial.println("Read Data");
Serial.println(readString.length());
Serial.println(readString);
Serial.println("------------------------------------");
response = true;
}
currentTime = millis();
diff = currentTime - startTime;
if(diff >= 5000 || diff < 0){
Serial.println("Timeout");
response = true;
}
}
delay(200);
}
qLab_msg.add("Zoom Incremental");
Udp.beginPacket(qLabIP, qLabPort);
qLab_msg.send(Udp);
Udp.endPacket();
qLab_msg.empty();
}
Dies funktioniert nicht, weil es nur etwa die Hälfte dessen, was es zu tun ist. Zum Beispiel, wenn der Benutzer 30 sendet es funktioniert nur 14