編輯:關於Android編程
現在我們開始嘗試用代碼控制一個真正的直觀的硬件設備。
第一個例子:讓Arduino開發板上的一個LED小燈周期性的打開、關閉。
第二個例子:讓LED燈亮度逐漸的變亮變暗。
Arduino開發板上,都會有兩個LED指示燈。不同的開發板,LED指示燈的位置、顏色略有不同。
電源指示燈。當開發板連接上電源(或者通過USB線供電)後,用來指示電源是否接通。這個LED燈旁邊肯定有一個“On”標記;
測試用指示燈。這是一個用來做內部測試的指示燈,也正是本示例要使用到的指示燈。在這個LED燈旁看到個‘L’標記;
前面的章節中,我們介紹了Arduino開發板提供了3類引腳。其中數字引腳D13就控制著這個測試用指示燈。因此我們只需要在代碼中控制好這個引腳就好了。
沒有可外接的LED模塊時,就用D13引腳來做測試。
通過菜單欄創建一個叫做LEDTest.ino的文件,啟動這個示例。
任何引腳在使用之前,都要在setup()中對它進行初始化,告知這個引腳用來輸出-OUTPUT,還是用來輸入-INPUT。這裡是要初始化D13引腳,讓它作為輸出。
//定義引腳的編號,這裡使用的是數字引腳13。 int pin = 13; void setup() { //設置該引腳類型為輸出 pinMode(pin, OUTPUT); }
通過digitalWrite()函數,讓指示燈變亮一秒,然後變暗一秒,如此往復,
void loop() { //將該引腳設置成高電平,也就是通電,打開指示燈 digitalWrite(pin, HIGH); //延時1秒,在這1秒鐘,LED燈狀態不變,即點亮狀態 delay(1000); //將該引腳設置成低電平,也就是斷電,關閉指示燈 digitalWrite(pin, LOW); //延時1秒,在這1秒鐘,LED燈狀態不變,即熄滅狀態 delay(1000); }
loop()執行之後,會被循環再次執行,我們設計的效果就是LED燈一秒亮、一秒暗的不停的循環。
digitalWrite()函數專門用來為數字引腳設置高低電平,
//將該引腳設置成高電平 digitalWrite(pin, HIGH); //將該引腳設置成低電平 digitalWrite(pin, LOW);
將工程編譯部署到開發板上,就能看到D13連接到LED指示燈,一秒亮、一秒暗的不停閃爍。
數字引腳只能輸出高電平HIGH或低電平LOW兩種,但是通過脈沖寬度調制(Pulse Width Modulation簡稱PWM)就能讓數字端口模擬輸出多級的電壓(通常是0級~255級,0級代表沒有,255級代表最高電壓)。
數字引腳上的電壓,可以看成是一個個脈沖方波,當引腳一直處於高電平的時候,輸出為V,
當引腳電壓的脈沖方波周期中,有50%的時間中處於高電平的時候,平均輸出就為V/2;
當引腳電壓的脈沖方波周期中,有33.3%的時間中處於高電平的時候,平均輸出就為V/3;
以此類推。
*更官方的表述請參考官網。
Arduino開發板提供的數字引腳中,有的引腳就具備了PWM的能力:能夠設置這些數字引腳的電壓輸出級數。
int pin = 13; pinMode(pin, OUTPUT); ...... //設置成輸出10級電壓,電壓強度從0~255 analogWrite(pin, 10);
通過官網給出的規格,可以看出Arduino MEGA開發板的D13引腳,是具備PWM功能的。所以我們可以讓測試指示燈漸變明暗。
不過Arduino UNO開發板上的D13引腳並不具備PWM功能,因此要在它上面進行燈光強弱調整的實驗,必須要在其他的引腳上,外接一個LED燈硬件。這部分內容,我們將在後面介紹。
改造前面的LEDTest.ino文件。
在setup()中對它進行初始化,告知這個引腳用來輸出-OUTPUT,或者用來輸入-INPUT。這裡是要初始化D13引腳,讓它作為輸出。
//定義引腳的編號,這裡使用的是數字引腳13 int pin = 13; void setup() { //設置該引腳為輸出 pinMode(pin, OUTPUT); }
通過analogWrite()函數,讓指示燈逐級變亮,然後逐級變暗,如此往復,
void loop() { //將該引腳從0級逐步設置到255級,指示燈逐漸變亮 for(int level = 0; level < 256; level++) { analogWrite(pin, level); //延時100毫秒,LED燈狀態不變 delay(10); } //將該引腳從255級逐步設置到0級,指示燈逐漸變暗 for(int level = 255; level >= 0; level--) { analogWrite(pin, level); //延時100毫秒,LED燈狀態不變 delay(10); } }
loop()執行之後,會被循環再次執行,我們設計的效果就是LED燈逐漸變亮,再逐漸變暗。
這裡使用了analogWrite()函數向數字引腳設置電壓0級~255級中的任何一級,
//將該PWM引腳設置成0~255級中的任何一級 analogWrite(pin, level);
可見analogWrite()函數並不像它的名字那樣只是模擬引腳的專利,它對支持PWM的引腳同樣適用。
將工程編譯部署到開發板上,就能看到D13連接到LED指示燈,一會兒亮一會兒暗的逐漸變化。
除了使用Arduino MEGA開發板的D13引腳,我們也可以使用任何其他帶PWM功能的數字引腳。例如Arduino MEGA開發板的D2~D13 D44 D46;Arduino UNO開發板的3 5 6 9 10 11。將LED燈接到這些引腳上面,就能同樣的實現對LED燈的控制。
你的LED模塊可能是單色的:只能發出一種顏色的光,這種模塊有3個引腳,標注字符S的是控制燈光強度的引腳、VCC或者+是電源引腳、GND或者G是接地引腳,例如安豆的雜貨鋪中提供的單色LED燈模塊,
LED燈也可能支持3種基礎顏色-紅綠藍,這種模塊有4個引腳,例如安豆的雜貨鋪中提供的三色LED燈模塊,
標注字符R的是控制紅色燈光強度的引腳; 字符G的是控制綠色燈光強度的引腳; 字符B的是控制藍色燈光強度的引腳; GND是接地引腳,這裡我們先用單色的LED燈模塊舉例。
MEGA開發板,2-13引腳都支持PWM,隨便選一個都可以。
UNO開發板,3,5,6,9,10,11引腳支持PWM,可以在開發板上看到引腳數字邊上有個’~’。
這裡我們選擇D9引腳來連接LED燈。
LED燈的S引腳連接到MEGA D9引腳;VCC接到MEGA 5V引腳;GND接到MEGA GND引腳。
早期的開發板,為了防止電壓不穩定擊穿電子器件,需要連接個電阻。
現在的開發板,只在接馬達時才需要增加電阻,慣常的做法是增加一塊擴展板。
在實際的硬件連接當中,我們通常用擴展板來連接LED模塊和開發板。
這裡我們使用傳感器擴展板,
可以看到擴展板上已經印制出了每個引腳的含義,
對於數字引腳擴展槽來說,
GND或者G:接地引腳
VCC或者V:供電引腳
D或者S:被擴展出的引腳,其下方的數字代表該引腳的編號
對於模擬引腳擴展槽來說,
GND或者G:接地引腳
V或者+:供電引腳,
S:被擴展出的引腳,其下方的數字代表該引腳的編號
所以,對於這裡的情況,我們選擇標注了9的數字引腳擴展插槽。
因為這次我們使用了D9引腳,所以需要修改前面使用的D13引腳為D9,
//定義引腳的編號,這裡使用的是數字引腳9 int pin = 9; void setup() { //設置該引腳為輸出 pinMode(pin, OUTPUT); } void loop() { //將該引腳從0級逐步設置到255級,指示燈逐漸變亮 for(int level = 0; level < 256; level++) { analogWrite(pin, level); //延時100毫秒,LED燈狀態不變 delay(10); } //將該引腳從255級逐步設置到0級,指示燈逐漸變暗 for(int level = 255; level >= 0; level--) { analogWrite(pin, level); //延時100毫秒,LED燈狀態不變 delay(10); } }
將工程編譯部署到開發板上,就能看到D9連接到LED指示燈,一會兒亮一會兒暗的逐漸變化。
使用三色的LED燈模塊,與使用單色的LED燈模塊一樣。在硬件連接時,要同時把紅R、綠G、藍B三種顏色對應的引腳連接到PWM接口上。例如使用數字引腳D9、D10、D11,分別對應紅、綠、藍三種顏色,就要多使用幾個擴展板的插槽,將對應的R G B引腳插在標注了9 10 11編號的數字擴展口上,
在代碼中要初始化三個PWM接口。
//定義引腳的編號,這裡使用的是數字引腳D9、D10、D11, //分別對應紅、綠、藍三種顏色 int RED_LED_PIN = 9; int GREEN_LED_PIN = 10; int BLUE_LED_PIN = 11; void setup() { //設置該引腳為輸出 pinMode(RED_LED_PIN, OUTPUT); pinMode(GREEN_LED_PIN, OUTPUT); pinMode(BLUE_LED_PIN, OUTPUT); } void loop() { //將該引腳從0級逐步設置到255級,指示燈逐漸變亮 for(int level = 0; level < 256; level++) { analogWrite(RED_LED_PIN, level); analogWrite(GREEN_LED_PIN, level); analogWrite(BLUE_LED_PIN, level); //延時100毫秒,LED燈狀態不變 delay(10); } //將該引腳從255級逐步設置到0級,指示燈逐漸變暗 for(int level = 255; level >= 0; level--) { analogWrite(RED_LED_PIN, level); analogWrite(GREEN_LED_PIN, level); analogWrite(BLUE_LED_PIN, level); //延時100毫秒,LED燈狀態不變 delay(10); } }
今天給大家帶來一點干貨,就是橫向循環滾動的廣告條。有點類似淘寶的banner廣告位,可以手勢滑動,也會依據固定時間間隔自動滾動,滑到盡頭時會一直循環。過渡非常
在使用App的時候,首次登錄都需要用戶輸入密碼的,有些朋友為了安全起見密碼設置的比較長,導致很多次密碼都輸入錯誤,嚴重影響了用戶體驗效果。這一點移動開發者做好了准備工作,
環境說明: Android Studio 2.0 V7包版本:com.android.support:appcompat-v7:23.4.0 compileSdkV
本文主要實現在自定義的ListView布局中加入CheckBox控件,通過判斷用戶是否選中CheckBox來對ListView的選中項進行相應的操作。通過一個Demo來展