經過了一年快兩年
高中畢業了 升上大學
沒繼續比專題比賽
但是進到了機器人實驗室
而我們這組比的是「遙控組」
且使用無線遙控的方式操作
所以我又繼續玩nRF24L01了
不過這次因為之前已經有玩過一整年了
相較於之前 十分熟悉它的特性了
所以在除錯上面時間花的非常少
更甚至我發現了不會讓資料產生「位移」的寫法
由於Arduino 是利用C++的架構寫的
所以我可以利用 struct 來進行資料的「打包」
像是這樣:
這樣我就可以一次傳送多筆資料
在接收端那裡收導資料之後
再進行資料調用
這樣子在從機的序列埠中
就會顯示從主機傳來的A、B、C的值
而且不會有資料錯亂的問題發生
雖然說 在我發現這種寫法之前
實驗室的學長有跟我說了一個非常陰間的除錯方法
就是將傳送的值
用非常誇張的範圍隔開
再從從機去做 if 修正
但是這樣能傳送的值就會少很多
而且你的從機的程式也會不好維護
像是這樣:
(另一個值最大就255)
可讀性極低
非常不好維護
但是在資料少的時候
不得不說 真的有效
想要看元件的 可以到這邊
雖然那也不是在教學
不過如果真的想看我的教學
可以說一下 我應該會整理整理
從接線、Uno板、Mega板 到我遇到的所有問題
但是我只會些許的提到
因為對我來說
能使用就行
所以我沒有深入去了解過Arduino的開發板跟nRF24L01這顆晶片
高中畢業了 升上大學
沒繼續比專題比賽
但是進到了機器人實驗室
而我們這組比的是「遙控組」
且使用無線遙控的方式操作
所以我又繼續玩nRF24L01了
不過這次因為之前已經有玩過一整年了
相較於之前 十分熟悉它的特性了
所以在除錯上面時間花的非常少
更甚至我發現了不會讓資料產生「位移」的寫法
由於Arduino 是利用C++的架構寫的
所以我可以利用 struct 來進行資料的「打包」
像是這樣:
struct SomeData { byte A; byte B; int C; }; SomeData data; //中間省略 void loop() { radio(data); } void radio(SomeData &data) { rf24.write(&data, sizeof(SomeData)); } |
這樣我就可以一次傳送多筆資料
在接收端那裡收導資料之後
再進行資料調用
struct SomeData { byte A; byte B; int C; }; SomeData data; //中間省略 void loop() { if (rf24.available(&pipe)) { rf24.read(&data, sizeof(data)); } Serial.print(data.A); Serial.print(data.B); Serial.println(data.C); } |
這樣子在從機的序列埠中
就會顯示從主機傳來的A、B、C的值
而且不會有資料錯亂的問題發生
雖然說 在我發現這種寫法之前
實驗室的學長有跟我說了一個非常陰間的除錯方法
就是將傳送的值
用非常誇張的範圍隔開
再從從機去做 if 修正
但是這樣能傳送的值就會少很多
而且你的從機的程式也會不好維護
像是這樣:
if (A == 9000 && B != 9000) { //假如A是功能判斷 //就把A的值放到功能判斷 //B放到另外一個地方 } else if (A != 9000 && B == 9000) { //假如A是功能判斷 //就把B的值放到功能判斷 //A放到另外一個地方 } |
(另一個值最大就255)
可讀性極低
非常不好維護
但是在資料少的時候
不得不說 真的有效
想要看元件的 可以到這邊
雖然那也不是在教學
不過如果真的想看我的教學
可以說一下 我應該會整理整理
從接線、Uno板、Mega板 到我遇到的所有問題
但是我只會些許的提到
因為對我來說
能使用就行
所以我沒有深入去了解過Arduino的開發板跟nRF24L01這顆晶片