tag:blogger.com,1999:blog-3638154389625503178.post5319052549659837298..comments2024-02-28T11:56:46.898+08:00Comments on 葉難: Arduino練習:四合一的七段顯示器yehnanhttp://www.blogger.com/profile/13453592439537191882noreply@blogger.comBlogger111125tag:blogger.com,1999:blog-3638154389625503178.post-26529277503573333002022-12-05T12:26:14.220+08:002022-12-05T12:26:14.220+08:00請問一下我要如何把上面的程式加一個按鈕來控制請問一下我要如何把上面的程式加一個按鈕來控制Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-87914963655678339032021-03-26T14:50:53.183+08:002021-03-26T14:50:53.183+08:00請問如何把HC-SR04這個測距吐出來的資料~用4個7段顯示器顯示呢?請問如何把HC-SR04這個測距吐出來的資料~用4個7段顯示器顯示呢?ginsinghttps://www.blogger.com/profile/03949255595072426447noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-30742283255721719792021-03-26T14:50:24.048+08:002021-03-26T14:50:24.048+08:00請問如何把HC-SR04這個測距吐出來的資料~用4個7段顯示器顯示呢?
請問如何把HC-SR04這個測距吐出來的資料~用4個7段顯示器顯示呢?<br />ginsinghttps://www.blogger.com/profile/03949255595072426447noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-56971283130838041942021-03-26T14:50:23.113+08:002021-03-26T14:50:23.113+08:00請問如何把HC-SR04這個測距吐出來的資料~用4個7段顯示器顯示呢?
請問如何把HC-SR04這個測距吐出來的資料~用4個7段顯示器顯示呢?<br />ginsinghttps://www.blogger.com/profile/03949255595072426447noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-54926444873626170532020-04-12T16:38:35.259+08:002020-04-12T16:38:35.259+08:00要如何改成電子鐘(分跟小時)要如何改成電子鐘(分跟小時)ianhttps://www.blogger.com/profile/02449717653545989447noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-89687017220440535252017-11-13T18:48:42.303+08:002017-11-13T18:48:42.303+08:00你這樣問,我不知道怎麼回答。
把電路組起來,寫寫程式吧。
應該會用到 有限狀態機 的程式撰寫技巧。...你這樣問,我不知道怎麼回答。<br />把電路組起來,寫寫程式吧。<br /><br />應該會用到 有限狀態機 的程式撰寫技巧。yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-9940183583071282502017-11-13T17:10:13.746+08:002017-11-13T17:10:13.746+08:00不好意思,我想問要怎麼把四位數七段顯示器結合LED燈做成類似紅綠燈的裝置
指令如下
綠燈亮10秒、七...不好意思,我想問要怎麼把四位數七段顯示器結合LED燈做成類似紅綠燈的裝置<br />指令如下<br />綠燈亮10秒、七段顯示器顯示倒數0010、0009、0008...;<br />黃燈亮1秒、七段顯示器顯示倒數0001、0000;<br />紅燈亮10秒、七段顯示器顯示倒數0010、0009、0008...;<br />Anonymoushttps://www.blogger.com/profile/10904231258770945102noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-52016009068332970042017-08-16T08:23:06.351+08:002017-08-16T08:23:06.351+08:00> 賴柏瑋和亞諠是怎麼解決閃爍的問題的呢?
修改程式。
你的程式要改的話,可參考Dallas...> 賴柏瑋和亞諠是怎麼解決閃爍的問題的呢?<br />修改程式。<br /><br />你的程式要改的話,可參考DallasTemperature的範例,<br />https://github.com/milesburton/Arduino-Temperature-Control-Library/tree/master/examples<br />其中的WaitForConversion與WaitForConversion2,<br />在loop裡盡量少呼叫requestTemperatures與getTempCByIndex。<br /><br /><br />yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-66074629709733196442017-08-15T23:57:57.756+08:002017-08-15T23:57:57.756+08:00老師您好,我也是在結合DS18B20和七段顯示器上出現千位數字很亮 其他位數字有閃爍情形
以下附上c...老師您好,我也是在結合DS18B20和七段顯示器上出現千位數字很亮 其他位數字有閃爍情形<br />以下附上code 其他函式設定與 "ㄚ哭拿" 相同就僅附上相異之處<br />還請麻煩老師幫忙<br /><br />void setup() {<br /> Serial.begin(115200);<br /> for(int i = 0; i < POS_NUM; i++){<br /> pinMode(pos_pins[i], OUTPUT);<br /> digitalWrite(pos_pins[i], HIGH);<br /> }<br /> for(int i = 0; i < SEG_NUM; i++){<br /> pinMode(seg_pins[i], OUTPUT);<br /> digitalWrite(seg_pins[i], LOW);<br /> }<br />sensors.begin();<br />sensors.getAddress(tempDeviceAddress, 0);<br />sensors.setResolution(tempDeviceAddress, resolution); <br />\\參考DallasTemperature範本中 修改解晰度用以提升反應時間 範本建議 int resolution = 9;<br />sensors.setWaitForConversion(false);<br />}<br /><br />void loop() { <br />sensors.requestTemperatures();<br />setNumber(sensors.getTempCByIndex(0)*100);<br />}<br /><br />想請問老師 上面賴柏瑋和亞諠是怎麼解決閃爍的問題的呢?<br />感謝1https://www.blogger.com/profile/09582331688500962023noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-58926354942088595082017-08-15T17:06:59.962+08:002017-08-15T17:06:59.962+08:00把loop改成
void loop() {
// 要求匯流排上的所有感測器進行溫度轉換(不過...把loop改成<br />void loop() {<br /> // 要求匯流排上的所有感測器進行溫度轉換(不過我只有一個)<br /> sensors.requestTemperatures();<br /> // 取得溫度讀數(攝氏)並輸出,<br /> // 參數0代表匯流排上第0個1-Wire裝置<br /> float t = sensors.getTempCByIndex(0);<br /> Serial.println((int)(t*100));<br /><br /> number = ((int)(t*100));<br /><br /> // 不斷地寫入數字<br /> setNumber(number);<br />}<br /><br />試試吧,因為getTempCByIndex會花時間。<br /><br />如果還不行,就要多改一點了,不要常常去呼叫getTempCByIndex。yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-15933178348411188122017-08-15T15:54:30.949+08:002017-08-15T15:54:30.949+08:00我把兩個delay(100);都去掉了但顯示器還是一直閃(似乎四位都會閃,不過千位數字很亮,百十個位...我把兩個delay(100);都去掉了但顯示器還是一直閃(似乎四位都會閃,不過千位數字很亮,百十個位就相對暗很多),有再接六伏電源了,不過還是一樣。Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-44547137069091799962017-08-15T13:04:50.747+08:002017-08-15T13:04:50.747+08:00因為delay,想辦法去掉loop裡的delay。因為delay,想辦法去掉loop裡的delay。yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-52884768999068443402017-08-14T19:06:14.684+08:002017-08-14T19:06:14.684+08:00老師妳好 ,我有跟前面幾位有一樣的問題,數字顯示出來只有千位數字恆亮,其他位數都會一閃一閃的,請問這...老師妳好 ,我有跟前面幾位有一樣的問題,數字顯示出來只有千位數字恆亮,其他位數都會一閃一閃的,請問這樣該如何解決?<br />程式碼:<br />// 匯入程式庫標頭檔 <br />#include <br />#include <br /><br />// Arduino數位腳位10接到1-Wire裝置<br />#define ONE_WIRE_BUS 10<br /><br />// 運用程式庫建立物件<br />OneWire oneWire(ONE_WIRE_BUS);<br />DallasTemperature sensors(&oneWire);<br />// 定義腳位<br />#define PIN_0 A5<br />#define PIN_g A4<br />#define PIN_c A3<br />#define PIN_h A2<br />#define PIN_d A1<br />#define PIN_e A0<br />#define PIN_b 2<br />#define PIN_1 3<br />#define PIN_2 4<br />#define PIN_f 5<br />#define PIN_a 6<br />#define PIN_3 7<br /><br />// 共有4個七段顯示器,分別由針腳PIN_0、PIN_1、PIN_2、PIN_3控制<br />// 七段顯示器裡有8個LED(包含小數點)<br />#define POS_NUM 4<br />#define SEG_NUM 8<br />const byte pos_pins[POS_NUM] = {PIN_0, PIN_1, PIN_2, PIN_3};<br />const byte seg_pins[SEG_NUM] = {PIN_a, PIN_b, PIN_c, PIN_d, PIN_e, PIN_f, PIN_g, PIN_h};<br /><br />// 底下定義由七段顯示器顯示數字時所需要的資料<br />#define t true<br />#define f false<br />const boolean data[10][SEG_NUM] = {<br /> {t, t, t, t, t, t, f, f}, // 0<br /> {f, t, t, f, f, f, f, f}, // 1<br /> {t, t, f, t, t, f, t, f}, // 2<br /> {t, t, t, t, f, f, t, f}, // 3<br /> {f, t, t, f, f, t, t, f}, // 4<br /> {t, f, t, t, f, t, t, f}, // 5<br /> {t, f, t, t, t, t, t, f}, // 6<br /> {t, t, t, f, f, f, f, f}, // 7<br /> {t, t, t, t, t, t, t, f}, // 8<br /> {t, t, t, t, f, t, t, f}, // 9<br />};<br /><br />// 一支方便的函式,以格式字串輸出到序列埠<br />void pf(const char *fmt, ... ){<br /> char tmp[128]; // max is 128 chars<br /> va_list args;<br /> va_start (args, fmt );<br /> vsnprintf(tmp, 128, fmt, args);<br /> va_end (args);<br /> Serial.print(tmp);<br />}<br /><br />// 設定某個七段顯示器所顯示的數字,<br />// 參數pos為0~3,指出想要更新哪一個七段顯示器,<br />// 參數n為0~9,顯示數字<br />void setDigit(int pos, int n){<br /> if(pos < 0 || 3 < pos){<br /> pf("error pos=%d\n", pos);<br /> return;<br /> }<br /><br /> // 控制想要更新哪一個七段顯示器,將其腳位設為LOW<br /> // 其他腳位則設為HIGH,代表不更新。 <br /> for(int p = 0; p < POS_NUM; p++){<br /> if(p == pos)<br /> digitalWrite(pos_pins[p], LOW);<br /> else<br /> digitalWrite(pos_pins[p], HIGH);<br /> }<br /> <br /> // 寫入數字 <br /> if(0 <= n && n <= 9){<br /> for(int i = 0; i < SEG_NUM; i++){<br /> digitalWrite(seg_pins[i], data[n][i] == t ? HIGH : LOW);<br /> }<br /> }<br /> else{<br /> for(int i = 0; i < SEG_NUM; i++){<br /> digitalWrite(seg_pins[i], LOW);<br /> }<br /> digitalWrite(PIN_h, HIGH);<br /> pf("error pos=%d, n=%d\n", pos, n);<br /> }<br />}<br /><br />// 設定整個四合一型七段顯示器想要顯示的數字<br />// 參數number的範圍應是0~9999<br />void setNumber(int number)<br />{<br /> int n0, n1, n2, n3;<br /> n3 = number / 1000;<br /> number %= 1000;<br /> n2 = number / 100;<br /> number %= 100;<br /> n1 = number / 10;<br /> n0 = number % 10;<br /><br /> // 求出每個位數的值後,分別更新<br /> // 注意,此處以delay(5)隔開每個位數的更新 <br /> setDigit(0, n0); delay(5);<br /> setDigit(1, n1); delay(5);<br /> setDigit(2, n2); delay(5);<br /> setDigit(3, n3); delay(5);<br />}<br /><br />unsigned long time_previous;<br />void setup() {<br /> Serial.begin(9600);<br /> <br /> for(int i = 0; i < POS_NUM; i++){<br /> pinMode(pos_pins[i], OUTPUT);<br /> digitalWrite(pos_pins[i], HIGH);<br /> }<br /> for(int i = 0; i < SEG_NUM; i++){<br /> pinMode(seg_pins[i], OUTPUT);<br /> digitalWrite(seg_pins[i], LOW);<br /> }<br /> Serial.begin(9600);<br /> Serial.println("Temperature Sensor");<br /> // 初始化 <br /> sensors.begin();<br />}<br /><br />int number = 0;<br />void loop() {<br /> // 要求匯流排上的所有感測器進行溫度轉換(不過我只有一個) <br />sensors.requestTemperatures();<br /><br />// 取得溫度讀數(攝氏)並輸出,<br />// 參數0代表匯流排上第0個1-Wire裝置 <br />Serial.println((int)((sensors.getTempCByIndex(0))*100));<br />delay(100);<br />number = ((int)((sensors.getTempCByIndex(0))*100));<br />delay(100);<br /><br /><br /> // 不斷地寫入數字<br /> setNumber(number);<br />}<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-23656815328558827522017-08-14T18:37:31.704+08:002017-08-14T18:37:31.704+08:00This comment has been removed by the author.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-85786914993842042692017-04-26T20:42:27.960+08:002017-04-26T20:42:27.960+08:002N22222N2222yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-15059340452566922362017-04-26T15:33:21.628+08:002017-04-26T15:33:21.628+08:00請問老師,加電晶體,這個電晶體是要用什麼型號的呢?請問老師,加電晶體,這個電晶體是要用什麼型號的呢?JohnLinhttps://www.blogger.com/profile/18301388640744814855noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-24626663638026599042017-04-22T09:37:05.134+08:002017-04-22T09:37:05.134+08:00自己弄的話,可以加電晶體,類似這樣子
https://electronics.stackexchan...自己弄的話,可以加電晶體,類似這樣子<br />https://electronics.stackexchange.com/questions/93155/cheap-4-digit-7-segment-display-driver<br /><br />也可用TM1637,專門用來驅動7-seg display的晶片,<br />http://playground.arduino.cc/Main/TM1637<br /><br /><br />yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-53014639887839800462017-04-22T09:21:48.593+08:002017-04-22T09:21:48.593+08:00我是使用mega的版子,22~33為1號四合一,34~45為2號四合一,您上述教學的線路規畫我不知道...我是使用mega的版子,22~33為1號四合一,34~45為2號四合一,您上述教學的線路規畫我不知道該如何另外提供電源耶,是否可以指導小弟呢?謝謝老師JohnLinhttps://www.blogger.com/profile/18301388640744814855noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-39936977389507278802017-04-21T18:26:48.200+08:002017-04-21T18:26:48.200+08:00那就另外提供電源給四合一的七段顯示器。那就另外提供電源給四合一的七段顯示器。yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-64931777944023772812017-04-21T16:34:49.439+08:002017-04-21T16:34:49.439+08:00請問若一個Arduino 的板子接兩個四合一ok嗎?目前遇到一個狀況,當我接兩個的時候千位數的燈會比...請問若一個Arduino 的板子接兩個四合一ok嗎?目前遇到一個狀況,當我接兩個的時候千位數的燈會比較亮,其餘的都很暗<br />但若只接一個四合一則沒有這個問題JohnLinhttps://www.blogger.com/profile/18301388640744814855noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-6418949898045499872017-04-09T18:22:38.033+08:002017-04-09T18:22:38.033+08:00刪除的話,程式行為是錯的。
會讀到IDLE_TIME秒前的舊資料。嘛,也是可以啦。
不過那樣的話,就...刪除的話,程式行為是錯的。<br />會讀到IDLE_TIME秒前的舊資料。嘛,也是可以啦。<br />不過那樣的話,就不必寫得這麼複雜了。yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-40218493848368698572017-04-09T18:19:14.099+08:002017-04-09T18:19:14.099+08:00雖然我剛剛將 if(sensors.isConversionAvailable(addr)){]刪除...雖然我剛剛將 if(sensors.isConversionAvailable(addr)){]刪除就可以了<br />現在加回來也可以使用<br />非常感謝老師!!找到我心頭大患!亞瑄https://www.blogger.com/profile/10149208004615646459noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-56764973400414411462017-04-09T18:10:27.739+08:002017-04-09T18:10:27.739+08:00你的DallasTemperature版本跟我的不一樣。
改成
sensors.isConvers...你的DallasTemperature版本跟我的不一樣。<br /><br />改成<br />sensors.isConversionComplete();<br />試試<br />yehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-70489020012402688062017-04-09T18:04:11.043+08:002017-04-09T18:04:11.043+08:00你好 上面程式編譯不過ㄟ
'class DallasTemperature' h...你好 上面程式編譯不過ㄟ <br />'class DallasTemperature' has no member named 'isConversionAvailable'<br />出現這段亞瑄https://www.blogger.com/profile/10149208004615646459noreply@blogger.comtag:blogger.com,1999:blog-3638154389625503178.post-83120067117931178812017-04-09T17:20:25.243+08:002017-04-09T17:20:25.243+08:00你在loop()裡呼叫sensors.getTempCByIndex的次數太多了吧。
試試吧,只通...你在loop()裡呼叫sensors.getTempCByIndex的次數太多了吧。<br /><br />試試吧,只通過編譯。<br />https://pastebin.com/b4BVPqueyehnanhttps://www.blogger.com/profile/13453592439537191882noreply@blogger.com