More Related Content Similar to Arduino workshop in Macau (20) Arduino workshop in Macau32. What is Arduino?
Arduino is an open-source
electronics platform based on
easy-to-use hardware and
software. It's intended for anyone
making interactive projects.
66. ATmega328 ( Single Chip Microcomputer )
Flash Memory : 32KB
儲存⾃自定程式碼及開機程式
!
SRAM : 2KB
暫存程式執⾏行中所需要的資料
EEPROM : 1KB
儲存程式永久資料
Clock Speed : 16 MHz
Analog Input x 6 pins
Digital I/O Pins : 14
68. PWM x 14 pins
Digital I/O x 14 pins
Analog Input x 6 pins
ATMEGA328P
Type-B USB
DC Jack
Input / Output
85. Digital Output
int led = 13;
!
void setup() {
pinMode(led, OUTPUT);
}
!
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
86. Digital Output
int LEDs[] = {9,11,13};
int total = sizeof(LEDs);
int index = 0;
!
void setup() {
for(int i=0; i<total; i++) {
pinMode(LEDs[i], OUTPUT);
}
}
!
void loop() {
for(int i=0; i<total; i++) {
digitalWrite(LEDs[i], LOW);
}
digitalWrite(LEDs[index], HIGH);
index++;
if(index == total) index=0;
delay(200);
}
88. Digital Output
int LEDs[] = {2,3};
int total = sizeof(LEDs);
int index = 0;
!
void setup() {
for(int i=0; i<total; i++) {
pinMode(LEDs[i], OUTPUT);
}
}
!
void loop() {
for(int i=0; i<total; i++) {
digitalWrite(LEDs[i], LOW);
}
}
共正極
90. Digital Output
int dataPin = 9;
int gatePin = 11;
int clockPin = 12;
!
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(gatePin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
!
void loop() {
digitalWrite(gatePin, LOW);
shiftOut(dataPin, clockPin,
LSBFIRST, B00000011);
digitalWrite(gatePin, HIGH);
}
12
8
3456 7B00000011
LSBFIRST
18
93. Digital Input
int led = 13;
int send = 11;
int receive = 9;
!
void setup() {
pinMode(led, OUTPUT);
pinMode(send, OUTPUT);
pinMode(receive, INPUT);
}
!
void loop() {
digitalWrite(send, HIGH);
boolean val = digitalRead(receive);
if(val) digitalWrite(led, HIGH);
else digitalWrite(led, LOW);
}
96. Digital Input
int led = 13;
int send = 11;
int receive = 9;
boolean oldState = LOW;
boolean nowState = LOW;
!
void setup() {
pinMode(led, OUTPUT);
pinMode(send, OUTPUT);
pinMode(receive, INPUT);
oldState = digitalRead(receive);
}
!
void loop() {
digitalWrite(send, HIGH);
boolean r1 = digitalRead(receive);
97. Digital Input
if(r1 != oldState) {
delay(20);
boolean r2 =
digitalRead(receive);
if(r1 == r2) {
oldState = r1;
nowState = !nowState;
digitalWrite(led, nowState);
}
}
}
99. Digital Input
#include <IRremote.h>
int RECV_PIN = 13;
IRrecv irrecv(RECV_PIN);
decode_results results;
!
void setup() {
irrecv.enableIRIn();
pinMode(9, OUTPUT);
}
!
void loop() {
if (irrecv.decode(&results)) {
if(results.value == 16593103)
digitalWrite(9, HIGH);
else digitalWrite(9, LOW);
}
}
對準IR接收器
按下遙控器電源鍵
100. Digital Input
int irRece = 10;
int led = 13;
!
void setup() {
pinMode(led, OUTPUT);
pinMode(irRece, INPUT);
digitalWrite(led, LOW);
}
!
void loop() {
boolean val = digitalRead(irRece);
if (val) digitalWrite(led, HIGH);
else digitalWrite(led, LOW);
}
IR接收
IR發射
104. int pot = 0;
int led = 13;
!
void setup() {
pinMode(led, OUTPUT);
pinMode(pot, INPUT);
Serial.begin(9600);
}
!
void loop() {
boolean val = analogRead(pot);
Serial.println(val);
digitalWrite(led, HIGH);
delay(val);
digitalWrite(led, LOW);
delay(val);
}
Analog Input
按下IDE右上⽅方 圖⽰示
將數據顯⽰示在Serial Monitor
105. Analog Input
int pot = 0;
int led = 13;
!
void setup() {
pinMode(led, OUTPUT);
pinMode(pot, INPUT);
Serial.begin(9600);
}
!
void loop() {
boolean val = analogRead(pot);
Serial.println(val);
digitalWrite(led, HIGH);
delay(val);
digitalWrite(led, LOW);
delay(val);
}
將可以換成蜂鳴⽚片
觀察在Monitor的數值變化
(中間接正,外圈接負)
107. Analog Output
int analogOutPin = 11;
!
void setup() {
pinMode(analogOutPin, OUTPUT);
}
!
void loop() {
analogWrite(analogOutPin, 0);
delay(500);
analogWrite(analogOutPin, 64);
delay(500);
analogWrite(analogOutPin, 128);
delay(500);
analogWrite(analogOutPin, 255);
delay(500);
analogWrite(analogOutPin, 128);
delay(500);
analogWrite(analogOutPin, 64);
delay(500);
}
最亮
108. Analog Output
#include <Servo.h>
Servo myservo;
int pot = 0;
int val;
!
void setup() {
myservo.attach(9);
}
!
void loop() {
val = analogRead(pot);
val = map(val, 0, 1023, 0, 179);
myservo.write(val);
delay(15);
}
讀⼊入類⽐比訊號數值介於0~1023,透過map⽅方法
將數值依照⽐比例轉換為0~179數值
110. Serial Communication
int led = 11;
!
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
digitalWrite(led, LOW);
}
!
!
void loop() {
if(Serial.available()>0) {
int val = Serial.read();
Serial.println(val);
if(val==97) {
digitalWrite(led, HIGH);
}
}
}
代表有收到資料
傳送過來的數值會轉換為
ascii碼,因此97代表⼩小寫‘a’