PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
SGI
Major Member
 
SGI的大頭照
 

加入日期: Sep 2003
文章: 263
Arduino 基礎digitalWrite()求教~~

各位Arduino高手大大好~

小弟最近剛入門, 遇到digitalWrite的一些問題, 希望有高手大大可以分享經驗

節省時間其他無關的code不寫, 這邊就列出主要關鍵程式碼~

pinMode(13,OUTPUT);
randomSeed(analog(A0));
long result=random(1,6);
output(result);

函式output()定義如下:
void output(long result)
{
digitalWrite(13, result & B111);======>主要在這一列
}
假設 result=3 好了 換成二進位是011
然後 011 & B111 不是應該是 3(011) 嗎?
所以不是就變成 digitalWrite(13,3)?
我把digitalWrite(腳位,HIGH(LOW)) 的HIGH/LOW 換成1/0 是也可以正常跑
但來個"3"的數值有點....
是只要>=1 都被當作HIGH嗎?
翻了很多文件都照不到相關資料, 還是小弟我認知錯誤?
感謝~~
     
      
__________________
時機歹歹 隨人顧性命
舊 2015-11-06, 01:03 PM #1
回應時引用此文章
SGI離線中  
drance
Amateur Member
 

加入日期: Oct 2002
您的住址: 台北
文章: 37
抱歉你寫了半天看不太懂意思!

我猜你想做得應該是把一個類比信號讀進來,轉成數位的送出去?

digitalWrite數位輸出..不是高(1)就是低(0)?... 所以1以上的都是高


是想要用串流輸出?那就要呼叫串流的東西了?

還是你要用3隻接腳來表示?
digitalWrite(11, result & B001);
digitalWrite(12, result & B010);
digitalWrite(13, result & B100);
類似這樣的寫法,然後輸出接三隻腳?
 
__________________
有~!潛水員一號報到!
舊 2015-11-06, 04:58 PM #2
回應時引用此文章
drance離線中  
SGI
Major Member
 
SGI的大頭照
 

加入日期: Sep 2003
文章: 263
引用:
作者drance
抱歉你寫了半天看不太懂意思!

我猜你想做得應該是把一個類比信號讀進來,轉成數位的送出去?

digitalWrite數位輸出..不是高(1)就是低(0)?... 所以1以上的都是高


是想要用串流輸出?那就要呼叫串流的東西了?

還是你要用3隻接腳來表示?
digitalWrite(11, result & B001);
digitalWrite(12, result & B010);
digitalWrite(13, result & B100);
類似這樣的寫法,然後輸出接三隻腳?

大大果然有經驗
確實是類似這樣的寫法]
用三顆LED燈, 二進為算法來表示骰子點數
我省略了一堆程式碼 只列出我有問題的部分 抱歉
其實我的問題很簡單
digitalWrite(pinNumber, status)中
status 不是HIGH 就是 LOW
要說HIGH=1 LOW=0 我也接受
但是使用( result & B001) 出來的結果是一個大於等於1的數值
假設是4 這跟 HIGH是一樣的效果嗎?(因為>=1)
小弟比較龜毛 有時想法都會鑽牛角尖~~抱歉
__________________
時機歹歹 隨人顧性命
舊 2015-11-06, 05:41 PM #3
回應時引用此文章
SGI離線中  
NEAL
Golden Member
 
NEAL的大頭照
 

加入日期: Jun 2002
您的住址: Taiwan
文章: 2,668
引用:
作者SGI
大大果然有經驗
確實是類似這樣的寫法]
用三顆LED燈, 二進為算法來表示骰子點數
我省略了一堆程式碼 只列出我有問題的部分 抱歉
其實我的問題很簡單
digitalWrite(pinNumber, status)中
status 不是HIGH 就是 LOW
要說HIGH=1 LOW=0 我也接受
但是使用( result & B001) 出來的結果是一個大於等於1的數值
假設是4 這跟 HIGH是一樣的效果嗎?(因為>=1)
小弟比較龜毛 有時想法都會鑽牛角尖~~抱歉


DigitalWrite在API手冊的naming就是要你填HIGH或LOW,填以外的值都是不好的用法。

寫這樣Compile會過是因為Compiler的設計者想降低學習者的門檻,所以會盡可能去寫轉換規則滿足這種情況。

我猜設計者可能會在 digitalwrite 額外實作 true 、非0或大於0自動轉換成HIGH; 而0或false就自動轉換成LOW,你可以試試看。

但這不是好用法,哪天Arduino Sketcher更版決定拿掉這樣的自動轉換規則,你的code在新版一compile就壞了。
__________________
工作主力機:
AMD Ryzen7 8700G
ASRock Deskmini X600
Crucial DDR5-5600 SODIMM 8GBx2
Samsung 970 EVO Plus 1TB
Thermalright AXP-90 black
Acer XV272U KV
ASUS ROG Gladius II Origin
GANSS HS75T x Glorious Panda

LG 32LM6200 32吋液晶電視電源模組維修經驗分享
舊 2015-11-06, 08:07 PM #4
回應時引用此文章
NEAL離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是07:50 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。