Hi there,
I try to interface with my Optoma HD33 projector in order to control it with an Arduino Uno with serial RS232 commands.
For my Proof of Concept I try to send the command "~0012 5" to my projector to switch to VGA INPUT.
So far I got a MAX3232 TTLtoRS232 adapter and can send RS232 commands from my Arduino Uno with it; however unfortunately I am not able to control my projector and after days of tinkering I could not find a solution, hopefully someone can help ![]()
I confirmed that the command "~0012 5" works by connecting a Serial2USB cable to the Projector and my MacBookPro and send the command with the app "Serial" and also with the terminal "screen /dev/cu.usbserial-A703TM76 9600" to the projector. This works without any issues and the projector returns "P" for PASS and switches to VGA INPUT.
However if I send the command "~0012 5" with my Arduino to the projector it reports back "F" for FAIL. So the Arduino has successfully send (something) to the projector and the projector responded with "F". I see that response in the Arduino Serial Monitor. So communication in general seems to work as I send something and receive a response from the projector.
I thought maybe the Arduino for whatever reason sends the wrong characters or a prefix and tried to debug it by letting the Arduino talk to my Mac via the same SerialtoUSB cable:
Arduino sends "~0012 5" over MAX3232 adaptor to Serial2USB cable back to MacBookPro -> "screen" in terminal shows me "~0012 5".
So it seems the Arduino outputs the correct serial command.
My test code is below, I tried to send the command as string and with hex codes, both times the projector returns "F".
As I can receive responses from the projector and also see the requests on my MacBook I am quite confident that the cable connections are ok.
Can anyone help?
This is the MAX3232 adapter I am using:
https://de.aliexpress.com/item/RS232-to-TTL-Female-Serial-TTL-Module-MAX3232-Chip-Brush-Board/2022185993.html
Optoma HD33 RS232 Documentation:
boolean intrap = false;
SoftwareSerial mySerial(10, 11, false); // RX, TX
void setup() {
 Serial.begin(9600);
 while (!Serial) {
  ; // wait for serial port to connect. Needed for native USB port only
 }
 mySerial.begin(9600);
  while (!mySerial) {
  ; // wait for serial port to connect. Needed for native USB port only
 }
}
void loop() {
 if (mySerial.available()) {
  Serial.write(mySerial.read());
 }
 if( millis() > 2000 && intrap==false) {
  intrap = true;
  //TEST 1 - String Only
  mySerial.write("~0012 5\r");
  //TEST 2 - Hex and String
  //mySerial.write( 0x0D ); //CR to reset
  //mySerial.write("0012 5");
  //mySerial.write( 0x0D ); //CR
  //TEST 3 - Hex Only
  //mySerial.write( 0x0D ); //CR to reset
  //mySerial.write( 0x7e );
  //mySerial.write( 0x30 );
  //mySerial.write( 0x30 );
  //mySerial.write( 0x31 );
  //mySerial.write( 0x32 );
  //mySerial.write( 0x20 );
  //mySerial.write( 0x35 );
  //mySerial.write( 0x0D ); //CR
Â
 }
}



