Arduino

講師:國立暨南國際大學戴榮賦教授

電源供電: 9V1A

接續:

模式:

電腦送字元至Arduino程式:

void setup() {

  // put your setup code here, to run once:

Serial.begin(9600);

}

void loop() {

  // put your main code here, to run repeatedly:

  Serial.write("Hello! ");

  delay(1000);  //1000代表1秒

}

數位訊號輸出:高於2.5v為1 ,低於2.5v為0

類比(僅可讀):1023=5V 2.5V=512 0V=0

脈寬調變:3 5 6 9 10 11 腳可模擬類比輸出。

https://www.arduino.cc/en/Reference/AnalogWrite

類比程式

https://www.arduino.cc/en/Reference/analogRead

//變數開始

int analogPin = 3;     // potentiometer wiper (middle terminal) connected to analog pin 3 (UNO板子右下角pin編號A3)

                      // outside leads to ground and +5V

int val = 0;           // variable to store the value read

void setup() //廣域設定

{

 Serial.begin(9600);          //  setup serial 設定序列埠

}

void loop() //重複執行設定

{

 val = analogRead(analogPin);    // read the input pin 讀取

 Serial.println(val);             // debug value 輸出值

}

數位輸出:

https://www.arduino.cc/en/Reference/PinMode

int ledPin = 13;                 // LED connected to digital pin 13

void setup()

{

 pinMode(ledPin, OUTPUT);      // sets the digital pin as output

}

void loop()

{

 digitalWrite(ledPin, HIGH);   // sets the LED on

 delay(1000);                  // waits for a second

 digitalWrite(ledPin, LOW);    // sets the LED off

 delay(1000);                  // waits for a second

}

數位訊號

pinMode()

digitalRead()

digitalWrite()

網站資源

http://arduino.cc/en/Reference/PinMode

http://arduino.cc/en/Reference/DigitalRead

http://arduino.cc/en/Reference/DigitalWrite

測開關訊號:

int pinInput = 7;

void setup()

{

  Serial.begin(9600);

  pinMode(pinInput,INPUT);

}

int val;

void loop()

{

  val=digitalRead(pinInput);

  Serial.println(val);

  delay(250);

}

類比信號輸出(光敏電阻、可調電阻):

int val = 0;

void setup()

{

  Serial.begin(9600);

}

void loop()

{

  val=analogRead(A0);

  Serial.println(val);

  delay(50);

}

電阻有引電流加速通過的功用。

數位模擬類比輸出:脈寬調變 (Pulse Width Modulation-PWM)

類比(僅可讀):1023=5V 2.5V=512 0V=0

脈寬調變:3 5 6 9 10 11 腳可模擬類比輸出。

https://www.arduino.cc/en/Reference/AnalogWrite

int ledPin = 9; // LED connected to digital pin 9

void setup()

{

pinMode(ledPin, OUTPUT); // sets the pin as output

}

void loop()

{

analogWrite(ledPin, 255); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 (255最亮、127半亮,63四分之一亮。)

}

馬達:

#include <Servo.h>

Servo myservo; //setup servo

void setup() 

  myservo.attach(9); //將指令線接到數位9埠

void loop() 

{

  //角度=0~180度

  myservo.write(0); //轉到0度

  delay(1000);

  myservo.write(30); //

  delay(1000);  

  myservo.write(60); //

  delay(1000);

  myservo.write(90); //

  delay(1000);

  myservo.write(120); //

  delay(1000);

    myservo.write(150); //

  delay(1000);

    myservo.write(180); //

  delay(1000);

}

感測元件:DHT22 (測溫溼度)

https://learn.adafruit.com/dht

硬體接線

https://learn.adafruit.com/dht/connecting-to-a-dhtxx-sensor

函示庫

https://github.com/markruys/arduino-DHT

#include "DHT.h"

DHT dht;

void setup()

{

  Serial.begin(9600);

  Serial.println();

  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");

  dht.setup(2); // data pin 2

}

void loop()

{

  delay(dht.getMinimumSamplingPeriod());

  float humidity = dht.getHumidity();

  float temperature = dht.getTemperature();

  Serial.print(dht.getStatusString());

  Serial.print("\t");

  Serial.print(humidity, 1);

  Serial.print("\t\t");

  Serial.print(temperature, 1);

  Serial.print("\t\t");

  Serial.println(dht.toFahrenheit(temperature), 1);

}