I know UART and serial communication model and data frame. But I want to ask about something else, when I searched in internet just found examples of one Arduino as (receiver) and another Arduino as (transmitter). So my question is how can I implement two Arduino and both of arduinos can communicate each other when after transferring data from one to another (example A->B). If the interpretation of the received data has to be forwarded to the first sender again(B->A).

  • UART is full duplex. It has 2 lines, one for sending, 1 for receiving. So this is automatically implemented – chrisl Aug 14 '19 at 21:53
  • So can you give me an code sample, in one Arduino acting differently in transmitting or receiving moments? – Türker Berke Yıldırım Aug 14 '19 at 21:57
  • 1
    If you know how to make A talk to B then you already know how to make B talk to A - it's exactly the same. – Majenko Aug 14 '19 at 22:09
  • But how should call transmit and receive function in main function? Just separate with delay? Or after transmit data should switch my position as receiver until the data come in? – Türker Berke Yıldırım Aug 14 '19 at 22:12

You sure now Serial.write() and Serial.read(). That's already what you want. A hint to make it clear to you: When using the common Serial.print() function only the RxD line is in charge an thus only "half" of the serial interface is used. If you connect TxD of arduino A to RxD of another arduino B and RxD to TxD respectively you have full-duplex communication which is what you're asking.

  • Oh gotcha. So I just should use write and read functions for full duplex. Print is for half duplex. You saved my day man. Thank you – Türker Berke Yıldırım Aug 14 '19 at 22:15
  • I recommend looking for a simple example to see how the reading actually has to be implemented. This tutorial might help you: robotic-controls.com/learn/arduino/… – Sim Son Aug 14 '19 at 22:18
  • No, print is not only for half duplex. The whole connection is always duplex, and you can send and receive at any time. print and write are doing nothing else but putting the data into the buffer. The transmitting is done in the background by the Serial library and the hardware. And all read commands are just reading data, that was already received, from the buffer. If you want one arduino to react to the other, just read the data from the first Arduino on the second, and let it send corresponding data back directly (you don't need a delay there) – chrisl Aug 14 '19 at 22:31
  • @chrisl hmm, was your comment meant to be a reply to the OP's comment in the question? Otherwise, what exactly of what I wrote is incorrect? You can Serial.print() without RxD connected. I'm aware of the routine executed in hardware, but I think that info doesn't help the OP very much at this point. – Sim Son Aug 15 '19 at 2:44
  • Your answer isn't wrong. I wanted to answer to ghe OPs comme t above, since it seemed to me, that he thinks, he cannot use print if he wants to communicate in both directions. I wanted to prevent a misunderstanding. And it is always good to know, what the called functions really do. That helps in understanding. If this is too complex for a comment, I can also write an answer, to explain it better, than in my comment – chrisl Aug 15 '19 at 7:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.