☛ analogReference() 函式

analogReference() 函式功用是設定類比輸入的參考電壓,只有一個參數 type 可以設定,type 參數有 DEFAULT、INTERNAL、INTERNAL1V1、INTERNAL2V56 及 EXTERNAL 等幾種選擇。 其中參數 DEFAULT 使用 5V ( 5V Arduino 板子 ) 或 3.3V ( 3.3v Arduino 板子 ) 的預設參考電壓。 參數 INTERNAL 使用內建 1.1V 參考電壓 ( ATmega168 或 ATmega328 ) 或內建 2.56V 參考電壓 ( ATmega8 )。 參數 EXTERNAL 使用外部電壓 AREF 接腳 0~5V 參考電壓。 另外只適用於 Arduino Mega 板的參數 INTERNAL1V1 使用內建 1.1V 參數電壓,INTERNAL2V56 使用內建 2.56V 參數電壓。

格式

analogReference(type)

範例

analogReference(DEFAULT);     //設定參考電壓為 5V

 

☛ analogRead() 函式

analogRead() 函式功用是將類比電壓輸入腳電壓 0~5V 轉換成數位值 0~1023,只有一個參數 pin 可以設定,在 UNO 板子 pin 值為 0~4,在 Mini 和 Nano 板子的 pin 值為 0~7,在 Mega 板子的 pin 值為 0~15。 analogRead() 函式的傳回值為整數 0~1023。

格式

analogRead(pin)

範例

int val;
val=analogRead(0);       //讀取 A0 腳類比輸入電壓並轉換成數位值

 

☛ analogWrite() 函式

對 pin 文寫入模擬的信號數值 ( pin 腳將輸出 PWM 波型 ),可以用在改變 LED 的亮度以及控制馬達的轉速,在呼叫 analogWrite() 之後,pin 腳將會產生一個指定 duty 的 PWM 方波,直到下一次再呼叫 analogWrite() ( 或者在同一個 pin 腳上呼叫 digitalRead() / digitalWrite() );在 86Duino 上 PWM 訊號的頻率是 1000Hz。

在 86Duino ZERO 上,這個函式會作用在 pin 3、5、6、9、10、11、13;在 86Duino EduCake 上,這個函式會作用在 pin 3、5、6、9、10、11、1 3、21;在 86Duino ONE 上,這個函式會作用在 pin 3、5、6、9、10、11、13、29、30、31、32;在 86Duino PLC 上 ,這個函式會作用在 pin 1、3、4、7。 呼叫 analogWrite() 之前不需要去呼叫 pinMode() 來設定 pin 腳為輸出。 analogWrite 或 analogRead 函式都不會對類比信號輸入做額外的動作。

參數 pin: 輸出 PWM 的 pin 腳。 value : PWM 的 duty 值 – 預設值介於 0 ( 常閉狀態 ) 到 255 ( 常開狀態 )。 可以呼叫 analogWriteResolution() 去設置更高的 PWM 數值。

格式

analogWrite(pin, value)

範例

int ledPin = 9;                    // LED 燈連接到數位 pin 9
int analogPin = 3;                 // 可變電阻連接到類比 pin 3
int val = 0;                       // 保存讀取到的電壓數值
 
void setup()
{
  pinMode(ledPin, OUTPUT);         // 設定 pin 9 腳為輸出
}
 
void loop()
{
  val = analogRead(analogPin);     // 讀取模擬輸入 pin 腳
  analogWrite(ledPin, val / 4);    // analogRead 數值從 0 到 1023 
                                   // analogWrite 數值從 0 到 255

 

☛ analogReadResolution() 函式

設定 analogRead() 所回傳的數值大小 ( 以 bit 為單位 ),它預設為 10bits ( 回傳值範圍在 0 到 1023 ) 以相容於 AVR 系列的 Arduino 板。 而 86Duino 開發板的類比轉數位硬體則擁有 11-bit 解析度,用此函式設定過後,就可以從 analogRead() 得到 0 到 2047 的數值。

參數 bits: 決定 analogRead() 函式回傳的解析度 ( 以 bit 為單位 ),可以設定它的範圍從 1 到 32;你可以把解析度設定的比 11 還高,但是 analogRead() 回傳的數值會變為近似值,詳細說明如下:

如果你將 analogReadResolution() 的數值設定的比板子上類比轉數位解析度還要高的時候,86Duino 只會回報最高的解析度,額外的位皆是 0。 舉個例子:在 86Duino 上呼叫 analogReadResolution(16) 會讓你得到一個 16-bits 的數位,它是實際被讀到的類比轉數位訊號數值的前面 11bits 之近似值,而之後五位將會是 0。

反之,如果你將 analogReadResolution() 的數值設定的比板子上類比轉數位解析度還要低的時候,從類比轉數位得到之多餘有效位將會被捨去。 設定 16 位元解析度 ( 或者比硬體實際解析度更高的任意值 ) 讓你可以在程式中自動去對應更高解析度的模擬轉數位硬體,當這些硬體規格在未來的板子被提高之後就不需要改寫代碼了。

格式

analogReadResolution(bits)

範例

void setup() {
    // 開啟串口
    Serial.begin(9600); 
}
 
void loop() {
  // 從 A0 讀入預設的解析度值 ( 10bits )
  // 並且從串口輸出
  analogReadResolution(10);
  Serial.print("ADC 10-bit (default) : ");
  Serial.print(analogRead(A0));
 
  // 改變讀取的解析度為 12bits 並從 A0 讀入
  analogReadResolution(12);
  Serial.print(", 12-bit : ");
  Serial.print(analogRead(A0));
 
  // 改變讀取的解析度為 16bits 並從 A0 讀入
  analogReadResolution(16);
  Serial.print(", 16-bit : ");
  Serial.print(analogRead(A0));
 
  // 改變讀取的解析度為 8bits 並從 A0 讀入
  analogReadResolution(8);
  Serial.print(", 8-bit : ");
  Serial.println(analogRead(A0));
 
  // 些微的延遲讓數值輸出不會佔滿螢幕
  delay(100);
}

 

☛ analogWriteResolution() 函式

analogWriteResolution() 可以設定 analogWrite() 函式的解析度,analogWrite() 的輸入值預設是 0 到 255 ( 8 bits ),相容於 AVR 系列的 Arduino板。 86Duino 的 CPU 有 12 個 32-bitPWM 計時器,每個 PWM 計時器的最小時間間隔為 10ns。 在 86Duino 上,analogWrite() 函式的 PWM 頻率為 1000Hz ,最高解析度是 13,使用 analogWriteResolution() 將解析度設定為 13 就可以讓 analogWrite() 的輸入數值範圍變成 0 到 8191。

參數 bits: 決定 analogWrite() 函式使用的解析度 ( 以 bit 為單位 ),可以設定的範圍從 1 到 32;你可以把解析度設定的比硬體解析度更高也可以更低,但使用的 analogWrite() 數值會因為數值太大或者太小而被截斷,詳細說明如下:

如果你將 analogWriteResolution() 的數值設定的比板子的硬體解析度還要高的時候,將會捨去額外的位;舉個例子:在 86Duino 上呼叫 analogWriteResolution(16) 之後,實際上 analogWrite() 使用的數值只有較低的 13 bits,而較高的 3 bits 會被捨去。

如果你將 analogWriteResolution() 的數值設定的比板子的硬體解析度還要低的時候,會補上 0 以達到所需的解析度;舉個例子:在 86Duino 上呼叫 analogWriteResolution(8) 之後,實際上 analogWrite() 會在輸入的 8-bit 數值中自動補上 5 個 0 以符合 13-bit 的解析度。

格式

analogWriteResolution(bits)

範例

void setup(){
  // 開啟串口
  Serial.begin(9600); 
  // 讓數位信號 pin 腳變成輸出
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}
 
void loop(){
  // 從A0讀入數值並傳給下列與LED相連的PWM pin腳
  int sensorVal = analogRead(A0);
  Serial.print("Analog Read) : ");
  Serial.print(sensorVal);
 
  // 預設的 PWM 解析度
  analogWriteResolution(8);
  analogWrite(11, map(sensorVal, 0, 1023, 0 ,255));
  Serial.print(" , 8-bit PWM value : ");
  Serial.print(map(sensorVal, 0, 1023, 0 ,255));
 
  // 將PWM解析度變成13bits
  // 在 86Duino 上使用 13 bits 的解析度
  analogWriteResolution(13);
  analogWrite(12, map(sensorVal, 0, 1023, 0, 8191));
  Serial.print(" , 13-bit PWM value : ");
  Serial.print(map(sensorVal, 0, 1023, 0, 8191));
 
  // 將 PWM 解析度變成4 bit
  analogWriteResolution(4);
  analogWrite(13, map(sensorVal, 0, 1023, 0, 127));
  Serial.print(", 4-bit PWM value : ");
  Serial.println(map(sensorVal, 0, 1023, 0, 127));
 
  delay(5);
}

 

☛ cpuTemperature() 函式

讀取 86Duino CPU 的溫度。 在 86Duino 編碼 102 版本以後才可以使用這個函式。 參數 mode: DEGREE_C,或DEGREE_F 代表讀取的溫度單位為攝氏 ( °C ) 或華氏 ( °F )。 預設是以攝氏為單位。 回傳 CPU 溫度值 ( double )。

格式

cpuTemperature(mode)
cpuTemperature()

範例

double val1 = 0.0;
double val2 = 0.0; 
 
void setup()
{
  Serial.begin(9600);
}
  
void loop()
{
  val1 = cpuTemperature();         // 溫度單位預設是攝氏
  val2 = cpuTemperature(DEGREE_F); // 改用華氏為單位
  Serial.print(val1);            
  Serial.print("   ");           
  Serial.println(val2);            
  delay(100);
}