許多人都遇到找不到切換 Windows 10 中私人/公用網路的設定, 其實很簡單, 只是現在沒有直接的選項, 而是必須以切換『讓此電腦可供探索』的方式來變更, 開啟『讓此電腦可供探索』就是私人網路, 關閉該選項就是公用網路。詳細設定過程就是先進『控制台』:
選取『網路與網際網路』:
我要改的是無線網路設定, 所以選『Wi-Fi』:
再按一下出現的無線網路名稱:
根據要切換成私人或是公用網路, 開啟或關閉『讓此電腦可供探索』選項即可。
highlight.js
星期四, 5月 11, 2017
星期三, 5月 03, 2017
使用 SSD1306 晶片控制的 OLED 顯示模組
由於 OLED 顯示實在很有科技感, 所以我測試了這一款從淘寶買到的模組, 賣家其實有提供一堆資料,包含 Arduino 可用的函式庫, 我自己測試時是採用 Adafruit 的 Adafruit_SSD1306 函式庫, 不過在使用這一個函式庫時有幾個注意事項:
- 它需要使用到 Adafruit 的另一個函式庫 Adafruit GFX graphics core library 才能運作, 這個函式庫是 Adafruit 所有繪圖類函式庫的核心。
- 我所買到的模組是使用 I2C 傳輸介面, 但是它的 I2C 位址和 Adafruit 自己賣的不一樣,經檢測後發現我的模組是 0x3C,如果你購買時買家沒有提供相關資訊,也可以接上 Arduino 後, 用 i2c_scanner 程式幫你搜尋。並修改範例中 display.begin(SSD1306_SWITCHCAPVCC, 0x3D);的 0x3D 為你模組的 I2C 位址。
- 必須修改函式庫中的 Adafruit_SSD1306.h 檔, 根據你模組的解析度調整取消對應的註解:
#define SSD1306_128_64 // #define SSD1306_128_32 // #define SSD1306_96_16
星期四, 4月 13, 2017
使用 Raspberry 硬體加速播放影片當影片展示機
在 Raspberry Pi 中播放影片檔可能會發現有嚴重的卡頓, 這是因為你所使用的播放程式並沒有使用硬體解碼的功能, 要解決這個問題, 最簡單的方式就是使用 omxplayer 程式, 因為這個程式本來就是專為 Raspberry Pi 設計。不過 omxplayer 並沒有播放清單的設計, 如果你想重複連續播放多個檔案, 就無法完成。還好, 網路上已經有善心人士提供了簡易的 shell script, 可以幫你將指定的資料夾當成播放清單, 自動重複一一播放資料夾中影音檔案的工作。
像是我就將所有的影音檔放在 /home/pi/share/pv 下, 然後在 /home/pi 下建立一個 play.sh 檔:
再使用以下的指令將 play.sh 變更為可執行檔:
就可以執行 /home/pi/play.sh 來重複一一播放 /home/pi/share/pv 下的所有影音檔了。如果你想要讓 Raspberry Pi 在開機後自動執行上述的 play.sh 檔, 可以修改 /home/pi/.config/lxsession/LXDE-pi/autostart 檔, 在最後加上一行執行 /home/pi/play.sh 的指令即可:
上述方法只對開機後會登入圖形化介面的設定有效, 如果你是設定成開機後進入文字介面, 就要使用別的方式, 這裡不再多做介紹。
像是我就將所有的影音檔放在 /home/pi/share/pv 下, 然後在 /home/pi 下建立一個 play.sh 檔:
#!/bin/sh # get rid of the cursor so we don't see it when videos are running setterm -cursor off # set here the path to the directory containing your videos VIDEOPATH="/home/pi/share/pv" # you can normally leave this alone SERVICE="omxplayer" # now for our infinite loop! while true; do if ps ax | grep -v grep | grep $SERVICE > /dev/null then sleep 1; else for entry in $VIDEOPATH/* do clear # -r for stretched over the entire screen omxplayer -r $entry > /dev/null done fi done
再使用以下的指令將 play.sh 變更為可執行檔:
sudo chmod +x videoloop.sh
就可以執行 /home/pi/play.sh 來重複一一播放 /home/pi/share/pv 下的所有影音檔了。如果你想要讓 Raspberry Pi 在開機後自動執行上述的 play.sh 檔, 可以修改 /home/pi/.config/lxsession/LXDE-pi/autostart 檔, 在最後加上一行執行 /home/pi/play.sh 的指令即可:
@lxpanel --profile LXDE-pi @pcmanfm --desktop --profile LXDE-pi @xscreensaver -no-splash @point-rpi @/home/pi/play.sh
上述方法只對開機後會登入圖形化介面的設定有效, 如果你是設定成開機後進入文字介面, 就要使用別的方式, 這裡不再多做介紹。
星期四, 2月 23, 2017
HC-SR04 超音波測距模組讀到 0 值後當住的解法
我在使用 Arduino 讀取 HC-SR04 超音波測距模組時, 常會遇到若 pulseIn() 傳回 0 (表示前方無任何障礙物, 所以 timeout) 後, 會有一段無法預期的時間 pulseIn() 都只會傳回 0, 像是 HC-SR04 的 echo 腳位完全沒有作用一樣。有的時候這段時間還超級長, 根本像是整個模組當掉了一樣。
經過搜尋網路上別人的經驗後, 發現這一篇討論串也提到相同的問題, 解決方法就是將 Arduino 原本用來讀取 HC-SR04 的 echo 訊號的腳位先故意設為輸出模式, 並且輸出低電位後一小段時間, 再重新設定回輸入模式, 就可以喚醒 HC-SR04, 或者說是 echo 的功能。
我自己把上述作法寫成以下的程式, 只要 pulseIn() 傳回 0, 我就採取前述對策:
另外, HC-SR04 似乎對供電非常敏感, 我使用的有些 Arduino UNO 板如果只靠 USB 供電, 即使套用上述作法, 仍然無效, 必須外加電源供電, 才會正常, 也提供給大家參考。
經過搜尋網路上別人的經驗後, 發現這一篇討論串也提到相同的問題, 解決方法就是將 Arduino 原本用來讀取 HC-SR04 的 echo 訊號的腳位先故意設為輸出模式, 並且輸出低電位後一小段時間, 再重新設定回輸入模式, 就可以喚醒 HC-SR04, 或者說是 echo 的功能。
我自己把上述作法寫成以下的程式, 只要 pulseIn() 傳回 0, 我就採取前述對策:
const int echoPin = 11;
const int triggerPin = 12;
unsigned long ping1() {
unsigned long pulse;
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pulse = pulseIn(echoPin, HIGH, 50000);
if(pulse == 0) {
pinMode(echoPin, OUTPUT);
digitalWrite(echoPin, LOW);
delay(100);
pinMode(echoPin, INPUT);
}
return pulse;
}
另外, HC-SR04 似乎對供電非常敏感, 我使用的有些 Arduino UNO 板如果只靠 USB 供電, 即使套用上述作法, 仍然無效, 必須外加電源供電, 才會正常, 也提供給大家參考。
星期四, 2月 09, 2017
Raspberry Pi 設定系統音量
星期四, 9月 29, 2016
Arduino 1.6.10 編譯中文資料夾下的程式問題
從 Arduino 1.6.10 版開始, 如果你的專案儲存在有中文名稱的路徑下, 而你的程式中又包含有函式的定義在呼叫函式處之後的狀況, 例如以下的範例:
其中 foo() 定義在程式最尾端, 但是在程式一開始的 setup() 中就呼叫了 foo()。這時編譯會出現 "'foo' was not declared in this scope" 錯誤訊息。只要把程式移到沒有中文名稱的路徑下就可以正常編譯。推測可能是 Arduino 1.6.10 之後, 在編譯的細節中有所變動, 導致編譯前段蒐集所有定義項目的資訊無法存回存到位在中文名稱路徑下的專案資料夾, 因而在後段編譯時認不得這些定義在引用處之後的名稱。
附註:在『文件』以及『桌面』下並不會有問題, 因為實際上『文件』與『桌面』的真實資料夾名稱是 Document 與 Desktop, 並不含中文。
星期三, 9月 28, 2016
在 Visual Studio Code 為新語言增加語法標示 (Syntax Highlighting)
Visual Studio Code 寫程式很好用, 但如果遇到特殊或是很新的語言, 就不見得有前人製作好的套件可以幫程式碼標示語法, 這時候就只好自己動手做了。這得自行設計好對應該語言的語法規則套件, 相關說明可參考 Visual Studio Code 的文件。大致步驟如下:
附註:TextMate 的語法規則檔不只 Visual Studio Code 使用,鼎鼎大名的 Sublime Text 以及 Atom 也都是使用同一格式來描述語法的規則, 儼然成為文字編輯器界的標準了。
- 撰寫該語言的語法規則檔
- 以語法規則檔為基礎建立該語言的擴充功能 (extension)
- 將建立好的擴充功能加入 Visual Studio Code 後重新啟動 Visual Studio Code
- 開啟該語言的檔案或手動選用該語言擴充功能, 就可以看到語法標示發揮效用
附註:TextMate 的語法規則檔不只 Visual Studio Code 使用,鼎鼎大名的 Sublime Text 以及 Atom 也都是使用同一格式來描述語法的規則, 儼然成為文字編輯器界的標準了。
訂閱:
文章 (Atom)







