Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4582|回復: 14

求助 2個Arduino的通訊

[複製鏈接]
發表於 2017-5-1 23:27:24 | 顯示全部樓層 |閱讀模式
我有一個程式龐大,如果只靠一個arduino執行會變得很慢

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

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

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

(註 TX RX 已經佔用去讀值 所以串列傳輸不行!!)
發表於 2017-5-2 06:39:20 來自手機 | 顯示全部樓層
本帖最後由 超新手 於 2017-5-2 08:03 編輯

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

2.其實你可以用 SoftwareSerial
 樓主| 發表於 2017-5-2 14:31:58 | 顯示全部樓層
超新手 發表於 2017-5-2 06:39
1. 很好奇 你是怎麼把值變成類比值的?
很多arduino根本不支援 DAC
而且轉換過程會有雜訊,你確定可以接受 ...

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

當然我有想過不然就用DUE,但是怕體積太過於龐大!
發表於 2017-5-2 14:38:11 | 顯示全部樓層
本帖最後由 超新手 於 2017-5-2 14:39 編輯

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

SoftwareSerial 用軟體方法模擬SERIAL,  下載後直接用即可
用法和 Serial 相同
 樓主| 發表於 2017-5-2 14:40:59 | 顯示全部樓層
本帖最後由 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:28 | 顯示全部樓層
不就是用 SoftwareSerial
google 一下就有了
 樓主| 發表於 2017-5-2 15:38:42 | 顯示全部樓層
超新手 發表於 2017-5-2 14:54
不就是用 SoftwareSerial
google 一下就有了

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

0~100的變動要怎麼弄?
發表於 2017-5-2 16:10:58 | 顯示全部樓層
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);

亂寫的, 有錯自行更正
 樓主| 發表於 2017-5-3 20:33:55 | 顯示全部樓層
超新手 發表於 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:13 | 顯示全部樓層
線路怎麼接的?
 樓主| 發表於 2017-5-4 21:20:46 | 顯示全部樓層
本帖最後由 ates1687 於 2017-5-4 23:51 編輯


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

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

1223.jpg

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

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

發表於 2017-5-5 12:42:22 | 顯示全部樓層
接收端程式是怎麼寫的?
 樓主| 發表於 2017-5-5 22:55:27 | 顯示全部樓層
超新手 發表於 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:13 | 顯示全部樓層
你的硬體 serial和 SoftwareSerial
衝到了
硬體 serial 接腳是 0 和 1
SoftwareSerial 也設成 0 和 1
所以它就錯亂了

 樓主| 發表於 2017-5-6 19:11:42 | 顯示全部樓層
本帖最後由 ates1687 於 2017-5-6 20:46 編輯
超新手 發表於 2017-5-6 06:53
你的硬體 serial和 SoftwareSerial
衝到了
硬體 serial 接腳是 0 和 1


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

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


更新:(= =紅外線也不行)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-3-29 06:36 , Processed in 0.232624 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表