Go Down

Topic: Send/Recive between 2 arduinos (Read 929 times) previous topic - next topic

MrMr

Hi

I am trying to send and recive serial communication with the help from 2 max485 and 2 arduinos.

There seems to be something wrong with the code (suprice?  ;)), it doenst get every bit that i am sending. I am sending a "1" .. wait... then sending "0" and so on.

The LED on the reciving board turns on, and off. But doenst do anything for 2-3-4 pulses and then keeps on going like before - totaly random.

they are both powered on by USB from the same PC.

Arduino 1 - Sending unit

Code: [Select]
void setup(){
  Serial.begin(9600); //opens serial port, sets data rate to 9600 bps
  pinMode(2, OUTPUT);
}

void loop()
{
  digitalWrite(2, HIGH); // Set pin2 HIGH
  Serial.write(1); // send a byte with the value 1
 
  delay(2000);  // Wait 2sec
  Serial.write(0); // send a byte with the value 0
  delay(2000); // Wait 2sec
}


Arduino 2 - Reciving unit

Code: [Select]
int incomingByte = 0;   // for incoming serial data

void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
        pinMode(13, OUTPUT);
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();
        }
                // turn on/off LED
         if (incomingByte > 0) {
                 digitalWrite(13, HIGH);
                }
                else
                {
                  digitalWrite(13, LOW);
                }                 
        }


Any suggestions i have done wrong? Seems pretty basic, but cant find the mistake.

HazardsMind

Why not try to debug it with the serial monitor? You should see what you are getting, and adjust your code from there.
Created Libraries:
TFT_Extension, OneWireKeypad, SerialServo, (UPD)WiiClassicController, VWID

MrMr

#2
Mar 11, 2013, 02:46 pm Last Edit: Mar 11, 2013, 02:59 pm by MrMr Reason: 1
Thanks for the quick answer.

I am getting some thing like "110101001" so somehow it doenst recive every time i send a 1 or 0.

The LED changes when it is 1 and 0. So no problem there. But the information recived is not correct with the information send.

**Update**

this is the exact serial monitor "010101001010110101001010010101" - The time between i get each number is difrent. Sometimes i get 0101 as i should. Other times there are a bigger delay.

CrossRoads

On the receive side:

I think you might have data type mismatches, so that you think you sending
0x00 or B00000000 but are actually sending '0' which is 0x30, B00110000
and 0x01 or B00000001  vs '1', 0x31 B00110001

See asciitable.com

If so, this might solve it:

if (incomingByte == '0') {

and

if (incomingByte == '1') {

or perhaps


switch(incomingByte){
case '0':
//code
break;
case '1':
// code
break;
} // end switch

Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

PeterH

The code looks reasonable so I would suspect there's a problem with the serial communication mechanism.

You say you're using a pair of max485 transceivers. How have you connected them to each other and to the Arduinos? Did you remember to connect the grounds?
I only provide help via the forum - please do not contact me for private consultancy.

Go Up