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)