Arduino
講師:國立暨南國際大學戴榮賦教授
電源供電: 9V1A
接續:
sensor
motor
relay (輪替開關)
模式:
單兵作戰
pc的哨兵
物聯網
電腦送字元至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);
}