Robofun 機器人論壇

標題: 求助 2個Arduino的通訊 [打印本頁]

作者: ates1687    時間: 2017-5-1 23:27
標題: 求助 2個Arduino的通訊
我有一個程式龐大,如果只靠一個arduino執行會變得很慢

於是我想到一個變通的方法就是用2個arduino,其中一個做運算,把值變成類比輸出

另外一個arduino則是去讀類比值,讀類比值得已經寫好也可以正常運作

但是我怎麼都讀不到另外一個arduino的類比輸出值,是我的想法錯? 還是有人可以教我怎麼接

(註 TX RX 已經佔用去讀值 所以串列傳輸不行!!)
作者: 超新手    時間: 2017-5-2 06:39
本帖最後由 超新手 於 2017-5-2 08:03 編輯

1. 很好奇 你是怎麼把值變成類比值的?
很多arduino根本不支援 DAC
而且轉換過程會有雜訊,你確定可以接受這誤差?
另外, analogWrite 不等於 analogRead
analogWrite 是 PWM, analogRead 是 ADC

2.其實你可以用 SoftwareSerial

作者: ates1687    時間: 2017-5-2 14:31
超新手 發表於 2017-5-2 06:39
1. 很好奇 你是怎麼把值變成類比值的?
很多arduino根本不支援 DAC
而且轉換過程會有雜訊,你確定可以接受 ...

我的程式大到光讀一個類比值就很慢去顯示出來,我是不知ˋ到如果用IIC會不會比較快?!

當然我有想過不然就用DUE,但是怕體積太過於龐大!
作者: 超新手    時間: 2017-5-2 14:38
本帖最後由 超新手 於 2017-5-2 14:39 編輯

UART 比較快, IIC 還要START/STOP/位址/ACK

SoftwareSerial 用軟體方法模擬SERIAL,  下載後直接用即可
用法和 Serial 相同

作者: ates1687    時間: 2017-5-2 14:40
本帖最後由 ates1687 於 2017-5-2 14:44 編輯
超新手 發表於 2017-5-2 14:38
UART 比較快, IIC 還要START/STOP/位址/ACK

SoftwareSerial 用軟體方法模擬SERIAL,  下載後直接用即可


我測試過了,如果加 IIC去讀的話,我的TFT無法顯示,數值無法正常去顯示出來...TAT...

=.=我的數值就只有0~100之間,但是要怎麼傳到另外一個arduino身上還在想

因為我的TFT  讀值>畫圖>顯示 這樣循環,光是畫圖就跑很久....
作者: 超新手    時間: 2017-5-2 14:54
不就是用 SoftwareSerial
google 一下就有了
作者: ates1687    時間: 2017-5-2 15:38
超新手 發表於 2017-5-2 14:54
不就是用 SoftwareSerial
google 一下就有了

序列傳輸是一個字一個字進來

0~100的變動要怎麼弄?
作者: 超新手    時間: 2017-5-2 16:10
0~100 只需要一個 byte
接收
SoftwareSerial mSerial(10, 11);
mSerial.begin(9600);
.....
if(mSerial.available()) {
byte c = mSerial.Read();
}

傳送
SoftwareSerial mSerial(10, 11);
.....
mSerial.begin(9600);
.....
byte data = 88;
mSerial.write(data);

亂寫的, 有錯自行更正

作者: ates1687    時間: 2017-5-3 20:33
超新手 發表於 2017-5-2 16:10
0~100 只需要一個 byte
接收
SoftwareSerial mSerial(10, 11);

你好,剛剛試了兩個Arduino Nano 接TX RX 可以正常通訊

但是Arduino Nano 對 Arduino Uno 的通訊不正常,可以問一下問題在哪嗎@@

我在Nano寫了一個for迴圈,

for(i=0 ;i<100;i++)

delay(1000)

但是UNO的那一端顯示的數字不對,也沒有依照我的delay在跑(程式是正常執行後就直接複製過去!)

但是Nano 對 Nano可以正常顯示 ,能幫我解惑嗎?
作者: 超新手    時間: 2017-5-4 08:56
線路怎麼接的?
作者: ates1687    時間: 2017-5-4 21:20
本帖最後由 ates1687 於 2017-5-4 23:51 編輯
超新手 發表於 2017-5-4 08:56
線路怎麼接的?


接是對的 但是我知道串列傳輸一直有個問題就是是一個一個進來,

就變成這樣有奇怪的字混進來~



當然也有寫陣列,但是進去還是一樣

所以我猜大概是我的程式龐大到連接收都很慢.....


作者: 超新手    時間: 2017-5-5 12:42
接收端程式是怎麼寫的?
作者: ates1687    時間: 2017-5-5 22:55
超新手 發表於 2017-5-5 12:42
接收端程式是怎麼寫的?

#include <SoftwareSerial.h>
int i;
SoftwareSerial mySerial(0, 1); // RX, TX
void setup() {
  mySerial.begin(9600);
}

void loop() // run over and over
{
  if (mySerial.available())
    i = Serial.write(mySerial.read());
}
作者: 超新手    時間: 2017-5-6 06:53
你的硬體 serial和 SoftwareSerial
衝到了
硬體 serial 接腳是 0 和 1
SoftwareSerial 也設成 0 和 1
所以它就錯亂了


作者: ates1687    時間: 2017-5-6 19:11
本帖最後由 ates1687 於 2017-5-6 20:46 編輯
超新手 發表於 2017-5-6 06:53
你的硬體 serial和 SoftwareSerial
衝到了
硬體 serial 接腳是 0 和 1


超新手不好意思,我這邊已經改用紅外線發射接收去當作一個類似arduino跟arduino之間傳輸訊號的方式

那在這幾個回覆中算是感謝你、辛苦你幫我解惑!!


更新:(= =紅外線也不行)





歡迎光臨 Robofun 機器人論壇 (https://www.robofun.net/forum/) Powered by Discuz! X3.2