I can't believe I can't get this to work on my own but anyway, here goes!
I am trying to get two arduinos to communicate (a Mega and a Uno). I have jumpers between their ground pins and 5v to Vin etc.
The following code works fine to communicate directly to Arduino (Uno) via USB.
/*Serial_LED_02.ino Arduining 4 May 2015
Controlling the LED in pin 13 with the Serial Monitor.
--- Command list: ---
? -> Print this HELP
a -> LED On "activate"
d -> LED Off "deactivate"
s -> LED "status"
Example using the switch statement.
*/
#define LED 13 // Pin 13 is connected to the LED
char rxChar= 0; // RXcHAR holds the received command.
//=== function to print the command list: ===========================
void printHelp(void){
Serial.println("--- Command list: ---");
Serial.println("? -> Print this HELP");
Serial.println("a -> LED On \"activate\"");
Serial.println("d -> LED Off \"deactivate\"");
Serial.println("s -> LED \"status\"");
}
//---------------- setup ---------------------------------------------
void setup(){
Serial.begin(9600); // Open serial port (9600 bauds).
pinMode(LED, OUTPUT); // Sets pin 13 as OUTPUT.
Serial.flush(); // Clear receive buffer.
printHelp(); // Print the command list.
}
//--------------- loop -----------------------------------------------
void loop(){
if (Serial.available() >0){ // Check receive buffer.
rxChar = Serial.read(); // Save character received.
Serial.flush(); // Clear receive buffer.
switch (rxChar) {
case 'a':
case 'A': // If received 'a' or 'A':
if (digitalRead(LED) == LOW){ // If LED is Off:
digitalWrite(LED,HIGH); // Turn On the LED.
Serial.println("LED turned On");
}
else Serial.println("LED already On!");
break;
case 'd':
case 'D': // If received 'd' or 'D':
if (digitalRead(LED) == HIGH){ // If LED is On:
digitalWrite(LED,LOW); // Turn Off the LED.
Serial.println("LED turned Off");
}
else Serial.println("LED already Off!");
break;
case 's':
case 'S': // If received 's' or 'S':
if (digitalRead(LED) == HIGH) // Read LED status.
Serial.println("LED status: On");
else Serial.println("LED status: Off");
break;
case '?': // If received a ?:
printHelp(); // print the command list.
break;
default:
Serial.print("'");
Serial.print((char)rxChar);
Serial.println("' is not a command!");
}
}
}
// End of the Sketch.
When I connect USB to the Arduino Mega and upload this code:
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
if (Serial.available()) { // If anything comes in Serial (USB),
Serial1.write(Serial.read()); // read it and send it out Serial1 (pins 0 & 1)
}
if (Serial1.available()) { // If anything comes in Serial (USB),
Serial.write(Serial1.read()); // read it and send it out Serial1 (pins 0 & 1)
}
}
I can send serial data to the Mega on its own and receive it back if I have jumpers connected (Serial1Tx->SerialRx and Serial1Rx -> SerialTx) on the mega . However if I connect Serial1 tx on the Mega to the Arduino Uno Rx and Serial1rx to the Uno Tx (along with ground and vin) i get nothing back. If I connect the Mega SerialTx and RX to the Uno instead of Serial1 Tx and Rx I get gibberish on the console.
' imand!
' command⸮⸮a com
Console is set to baud 9600.
What am I doing wrong?