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– chrislCommented Aug 14, 2019 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ımCommented Aug 14, 2019 at 21:57
-
1If 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.– MajenkoCommented Aug 14, 2019 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ımCommented Aug 14, 2019 at 22:12
Add a comment
|
1 Answer
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 Commented Aug 14, 2019 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 SonCommented Aug 14, 2019 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)– chrislCommented Aug 14, 2019 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 SonCommented Aug 15, 2019 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– chrislCommented Aug 15, 2019 at 7:28