Arduino week3

Download Report

Transcript Arduino week3

語法:結構
實作:Analog in (VR、光敏+七段顯示電壓)
簡報:廖崇義

for() {}
當條件成立或為1時
執行大括弧內程式
1.
2.
3.
4.
while(val<1000)
{
digitalWrite(13,HIGH);
}
1.
2.
3.
4.
5.
6.
7.
8.
Int val=2000;
digitalWrite(13,LOW);
do
{
digitalWrite(13,HIGH);
}
while (val<1000);
digitalWrite(13,LOW);
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
break 離開for,while,do wile 迴圈
for (x = 0; x < 255; x ++)
{
val =analogRead(6);
if ( val< x)
{ //當val小於x時pin13輸出LOW且離開for迴圈
digitalWrite(13,LOW);
break;
}
digitalWrite(13,HIGH);
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
for (x = 0; x < 255; x ++)
{
val =analogRead(6);
if ( val< x)
{ //當val小於x時pin13輸出LOW且繼續for迴圈
下一個測試值
digitalWrite(13,LOW);
continue;
}
digitalWrite(13,HIGH);
}
switch (var)
2. {
3. case label:
4. // statements break;
5. case label:
6. // statements break;
7. default:
8. // statements
9. }
 Label可以為int整數或char字元(ex.case ‘A’:)
1.

analogRead(pin)
• pin值為0~5對應ANALOG IN A0~A5
• 回傳值為0~1023,對應輸入電壓0~5V比例
• 取樣轉換時間為100 microseconds (0.1ms),每秒最高可
取樣10000次
• 回傳值可用int變數存取
• Ex. int val;
val = analogRead(1);







頻率490 Hz
analogWrite(pin, value)
pin 使用數位Port上有“ ~ ”標註的腳位
須事先使用pinMode將該腳為設為OUTPUT
value為設定方波HIGH的百分比(value/255)
value 值可設定範圍0-255
Ex.
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4); //val=0~1023
將VR中間腳接到A3,另兩端一端接地一端接5V
1.
int ledPin = 9;
// LED 一端接pin 9另一端接電阻再
接地
1.
int analogPin = 3; // pin A3 類比輸入
2.
int val = 0;
// 設val儲存類比取樣值
3.
void setup()
4.
{
5.
pinMode(ledPin, OUTPUT); // 設pin9為output
6.
}
7.
void loop()
8.
{
9.
val = analogRead(analogPin); // 類比取樣
10.
analogWrite(ledPin, val / 4); //使用pwm控制LED燈
11. }
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
int ledPin = 9;
// LED connected to digital pin 9
int analogPin = 3; // pin A3 類比輸入
int val = 0;
// 設val儲存類比取樣值
void setup()
{
pinMode(ledPin, OUTPUT); // 設pin9為output
}
void loop()
{
val = analogRead(analogPin); // 類比取樣
if(val<200)
val=200;//LED最小啟動功率
if(val<20)
val=0;//避免VR零點雜訊
analogWrite(ledPin, val / 4); //使用pwm控制LED燈
}
亮度
視覺曲線
LED OUT
修正曲線
PWM OUT

電路圖
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
byte seven_disp[10][7] = { { 1,1,1,1,1,1,0 }, // = 0
{ 0,1,1,0,0,0,0 }, // = 1
{ 1,1,0,1,1,0,1 }, // = 2
{ 1,1,1,1,0,0,1 }, // = 3
{ 0,1,1,0,0,1,1 }, // = 4
{ 1,0,1,1,0,1,1 }, // = 5
{ 1,0,1,1,1,1,1 }, // = 6
{ 1,1,1,0,0,0,0 }, // = 7
{ 1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,0,0,1,1 } }; // = 9
int i=0,val=0;
void setup()
{
for(int x=2 ; x<9 ; x++)
pinMode( x, OUTPUT );
}
void loop()
{
val = analogRead(3);
i=val/200; //可以改成i = map(val, 0, 1023, 0, 5);
for( int x=0 ; x<7 ; x++ )
digitalWrite( x+2 , seven_disp[i][x] ) ;
delay(100);
}
map()映射轉換一段數值,等比放大或縮小
 Ex.
int val =(analogRead(3),0,1023,0,100)
將analogRead(3)取樣的值轉換成百分比
常用範例如:
1. 旋鈕控制伺服馬達角度int deg=(analogRead(3),0,1023,0,180)
2. 超音波測距雷達int longth=(analogRead(3),0,1023,0,280)
