in reply to Win32 Serial Read input from device

Hi PilotinControl,

I have the facilities to test this (I believe), but before I dig deep into your code, it would help if you could advise what the device is at the other end, so I can grasp what it may return.

At minimum, please post what the return is, verbatim, if the device is far from standard (still handy to say what it is however).

  • Comment on Re: Win32 Serial Read input from device

Replies are listed 'Best First'.
Re^2: Win32 Serial Read input from device
by PilotinControl (Pilgrim) on Mar 26, 2018 at 22:27 UTC
    The device at the other end is an Arduino Mega connected via USB and a pushbutton connected to the arduino. On the computer side is the Perl Program....I can send a command 1 or 2 and it will change LEDS on the arduino....if the button connected to the arduino is pressed it should post: Button Pressed on the serial terminal window on the computer end. It does not...it does however if the enter button is pressed it displays Button Pressed.

      Now we're talking.

      How long is the Arduino sketch? If you can narrow it down to a reasonable size, post it here. There are people familiar with that platform who can help.

      By looking at your sketch, it should be trivial enough for someone to throw together a complete hardware test platform to simulate what you're doing, and help you figure out the problem.

        Below is the simple arduino sketch thanks for looking into this.
        #define relay1a 3 #define relay1b 2 #define button 4 #define SIG_R_1 5 #define SIG_G_1 6 #define SIG_R_2 7 #define SIG_G_2 8 #define SIG_MG_1 9 #define SIG_MY_1 10 int buttonState; int lastButtonState = LOW; int flag = 0; unsigned long lastDebounceTime = 0; //last time the pin was toggled, +used to keep track of time unsigned long debounceDelay = 100; //the debounce time which user s +ets prior to run void setup() { Serial.begin(9600); pinMode(relay1a, OUTPUT); pinMode(relay1b, OUTPUT); pinMode(SIG_R_1, OUTPUT); pinMode(SIG_G_1, OUTPUT); pinMode(SIG_R_2, OUTPUT); pinMode(SIG_G_2, OUTPUT); pinMode(SIG_MG_1, OUTPUT); pinMode(SIG_MY_1, OUTPUT); pinMode(button, INPUT); // SET RELAYS digitalWrite(relay1a, LOW); digitalWrite(relay1b, HIGH); digitalWrite(SIG_R_1, LOW); digitalWrite(SIG_G_1, HIGH); digitalWrite(SIG_R_2, HIGH); digitalWrite(SIG_G_2, LOW); digitalWrite(SIG_MG_1, HIGH); digitalWrite(SIG_MY_1, LOW); delay(500); digitalWrite(relay1a, HIGH); digitalWrite(relay1b, LOW); digitalWrite(SIG_R_1, HIGH); digitalWrite(SIG_G_1, LOW); digitalWrite(SIG_R_2, LOW); digitalWrite(SIG_G_2, HIGH); digitalWrite(SIG_MG_1, LOW); digitalWrite(SIG_MY_1, HIGH); delay(500); digitalWrite(relay1a, LOW); digitalWrite(relay1b, HIGH); digitalWrite(SIG_R_1, LOW); digitalWrite(SIG_G_1, HIGH); digitalWrite(SIG_R_2, HIGH); digitalWrite(SIG_G_2, LOW); digitalWrite(SIG_MG_1, HIGH); digitalWrite(SIG_MY_1, LOW); delay(500); digitalWrite(relay1a, HIGH); digitalWrite(relay1b, LOW); digitalWrite(SIG_R_1, HIGH); digitalWrite(SIG_G_1, LOW); digitalWrite(SIG_R_2, LOW); digitalWrite(SIG_G_2, HIGH); digitalWrite(SIG_MG_1, LOW); digitalWrite(SIG_MY_1, HIGH); delay(500); digitalWrite(relay1a, HIGH); digitalWrite(relay1b, HIGH); digitalWrite(SIG_R_1, LOW); // RED MAIN OFF digitalWrite(SIG_G_1, HIGH); // GREEN MAIN ON digitalWrite(SIG_R_2, HIGH); // RED SIDING ON digitalWrite(SIG_G_2, LOW); // GREEN SIDING OFF digitalWrite(SIG_MG_1, HIGH); // GREEN MAIN ON digitalWrite(SIG_MY_1, LOW); // YELLOW MAIN OFF } // END SETUP void loop() { int reading = digitalRead(button); if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis()-lastDebounceTime) > debounceDelay) { if (reading != buttonState) { buttonState = reading; if (buttonState == HIGH) { if (flag == 0) { digitalWrite(SIG_R_1, HIGH); digitalWrite(SIG_G_1, LOW); digitalWrite(SIG_R_2, LOW); digitalWrite(SIG_G_2, HIGH); digitalWrite(SIG_MG_1, LOW); digitalWrite(SIG_MY_1, HIGH); digitalWrite(relay1a, LOW); // ON delay(50); digitalWrite(relay1a, HIGH); // OFF flag = 1; Serial.println("BONE\r"); //ledState = !ledState; } // IF FLAG 0 else if (flag == 1){ digitalWrite(SIG_R_1, LOW); digitalWrite(SIG_G_1, HIGH); digitalWrite(SIG_R_2, HIGH); digitalWrite(SIG_G_2, LOW); digitalWrite(SIG_MG_1, HIGH); digitalWrite(SIG_MY_1, LOW); digitalWrite(relay1b, LOW); // ON delay(50); digitalWrite(relay1b, HIGH); // OFF flag = 0; Serial.println("BTWO"); } // IF FLAG TWO } // IF BUTTON STATE } // IF READING } // IF MILLIS lastButtonState = reading; // TEST SERIAL if(Serial.available() > 0) { int in = Serial.read(); // PERL TEST switch(in) { case '1': digitalWrite(SIG_R_1, HIGH); digitalWrite(SIG_G_1, LOW); digitalWrite(SIG_R_2, LOW); digitalWrite(SIG_G_2, HIGH); digitalWrite(SIG_MG_1, LOW); digitalWrite(SIG_MY_1, HIGH); digitalWrite(relay1a, LOW); // ON delay(50); digitalWrite(relay1a, HIGH); // OFF break; case '2': digitalWrite(SIG_R_1, LOW); digitalWrite(SIG_G_1, HIGH); digitalWrite(SIG_R_2, HIGH); digitalWrite(SIG_G_2, LOW); digitalWrite(SIG_MG_1, HIGH); digitalWrite(SIG_MY_1, LOW); digitalWrite(relay1b, LOW); // ON delay(50); digitalWrite(relay1b, HIGH); // OFF break; } // END SWITCH } // END SERIAL // END TEST SERIAL } // END LOOP