// 控制燈泡閃爍(單色)
// Sample code
// LED 燈泡閃爍
void setup()
{
pinMode(13,OUTPUT); // 設定pin13為輸出腳位
}
void loop()
{
digitalWrite(13,HIGH); // 設定pin13高電位(5V)
delay(1000); // 延遲1000毫秒
digitalWrite(13,LOW); // 設定pin13低電位(0V)
delay(1000); // 延遲1000毫秒
}
// TRY IT !
// 呼吸燈
void setup()
{
pinMode(3,OUTPUT); // 設定pin3為輸出腳位
}
void loop()
{
for (int i=0; i<=255; i++){ // 讓亮度從最暗到最亮
analogWrite(3,i); // 在pin3寫入類比訊號
delay(10); // 延遲10毫秒
}
for (int i=255; i>=0; i--){ // 讓亮度從最亮到最暗
analogWrite(3,i); // 在pin3寫入類比訊號
delay(10); // 延遲10毫秒
}
}
// TRY IT !
// RGB LED 燈泡閃爍
void setup()
{
pinMode(3,OUTPUT); // 設定pin3為輸出腳位
pinMode(5,OUTPUT); // 設定pin5為輸出腳位
pinMode(6,OUTPUT); // 設定pin6為輸出腳位
}
void loop()
{
digitalWrite(3,HIGH); // 在pin3寫入高電位
digitalWrite(5,HIGH); // 在pin5寫入高電位
digitalWrite(6,LOW); // 在pin6寫入低電位
delay(1000); // 延遲1000毫秒
digitalWrite(3,HIGH); // 在pin3寫入高電位
digitalWrite(5,LOW); // 在pin5寫入低電位
digitalWrite(6,HIGH); // 在pin6寫入高電位
delay(1000); // 延遲1000毫秒
digitalWrite(3,LOW); // 在pin3寫入低電位
digitalWrite(5,HIGH); // 在pin5寫入高電位
digitalWrite(6,HIGH); // 在pin6寫入高電位
delay(1000); //延遲1000毫秒
}
// TRY IT !
// RGB LED 燈泡閃爍
// define
#define Red 3 // 定義Red為3
#define Green 5 // 定義Green為5
#define Blue 6 // 定義Blue為6
void setup()
{
pinMode(Red,OUTPUT); // 設定Red為輸出腳位
pinMode(Green,OUTPUT); // 設定Green為輸出腳位
pinMode(Blue,OUTPUT); // 設定Blue為輸出腳位
}
void loop()
{
digitalWrite(Red,HIGH); // 在Red寫入高電位
digitalWrite(Green,HIGH); // 在Green寫入高電位
digitalWrite(Blue,LOW); // 在Blue寫入低電位
delay(1000); // 延遲1000毫秒
digitalWrite(Red,HIGH); // 在Red寫入高電位
digitalWrite(Green,LOW); // 在Green寫入低電位
digitalWrite(Blue,HIGH); // 在Blue寫入高電位
delay(1000); // 延遲1000毫秒
digitalWrite(Red,LOW); // 在Red寫入低電位
digitalWrite(Green,HIGH); // 在Green寫入高電位
digitalWrite(Blue,HIGH); // 在Blue寫入高電位
delay(1000); // 延遲1000毫秒
}
// ADD
// 控制燈泡閃爍(單色)
bool var; // 宣告一變數為var,型態為bool
void setup()
{
pinMode(3,OUTPUT); // 設定pin3為輸出腳位
var = true; // 令var等於true
}
void loop()
{
if (var == true){ // 判斷式:var = true
digitalWrite(3,HIGH); // 在pin3寫入高電位
var = false; // 令var等於false
}
else{
digitalWrite(3,LOW); // input low potential
var = true; // 令var等於true
}
delay(500); // 延遲500毫秒
}
// ADD
// 隨機顏色
int randomnumber; // 宣告一變數randomnumber
void setup()
{
Serial.begin(9600); // 設定傳輸速度
pinMode(3,OUTPUT); // 設定pin3為輸出腳位
pinMode(5,OUTPUT); // 設定pin5為輸出腳位
pinMode(6,OUTPUT); // 設定pin6為輸出腳位
analogWrite(3,0); // 在pin3寫入類比訊號0
analogWrite(5,0); // 在pin5寫入類比訊號0
analogWrite(6,0); // 在pin6寫入類比訊號0
randomSeed(analogRead(A0)); // 以analogRead(A0)取亂數種子
}
void loop()
{
Serial.print("random = "); // 印出文字"random = ",不換行
randomnumber = random(255); // 令變數randomnumber等於一隨機數(最高255)
Serial.println(randomnumber); // 印出變數randomnumber,換行
analogWrite(3,randomnumber); // 在pin3寫入類比訊號
randomnumber = random(255); // 令變數randomnumber等於一隨機數(最高255)
Serial.println(randomnumber); // 印出變數randomnumber,換行
analogWrite(5,randomnumber); // 在pin5寫入類比訊號
randomnumber = random(255); // 令變數randomnumber等於一隨機數(最高255)
Serial.println(randomnumber); // 印出變數randomnumber,換行
analogWrite(6,randomnumber); // 在pin6寫入類比訊號
delay(1000); // 延遲1000毫秒
}
// ADD
// 霓虹燈
int r,g,b;
#define Red 9 // 定義Red為9
#define Green 10 // 定義Green為10
#define Blue 11 // 定義blue為11
#define FADESPEED 10 // 定義延遲時間為10毫秒
void setup()
{
pinMode(Red,OUTPUT); // 設定Red腳位為輸出腳位
pinMode(Green,OUTPUT); // 設定Green腳位為輸出腳位
pinMode(Blue,OUTPUT); // 設定Blue腳位為輸出腳位
}
void fadein(int sign, int pin) // 讓燈逐漸變亮
{
for(sign=0; sign<256; sign++){
analogWrite(pin,sign);
delay(FADESPEED);
}
}
void fadeout(int sign, int pin) // 讓燈逐漸變暗
{
for(sign=255; sign>=0; sign--){
analogWrite(pin,sign);
delay(FADESPEED);
}
}
void loop()
{
fadein(r,Red);
fadein(b,Blue);
fadein(g,Green);
fadeout(r,Red);
fadeout(b,Blue);
fadeout(g,Green);
}
// LAB
// 利用蜂鳴器依序發出特定頻率
#define pin 2 // 取代‘pin’為‘2’
int frequency[7] = {262,294,330,369,415,466,523}; // Do-Si的頻率
void setup()
{
pinMode(pin,OUTPUT); // 設定pin腳位為輸出模式
}
void loop()
{
for(int i=0; i<7; i++)
{
tone(pin, frequency[i]); // 播放特定頻率
delay(500); // 延遲
noTone(pin); // 不播放任何頻率
}
}
// ADD
// 倒轉
#define pin 2 // 取代‘pin’為‘2’
int frequency[7] = {262,294,330,369,415,466,523}; // Do-Si 頻率
void setup()
{
pinMode(pin,OUTPUT); // 設定pin腳位為輸出模式
}
void loop()
{
for(int i=0; i<7; i++){
tone(pin, frequency[i]); // 播放特定頻率
delay(500); // 延遲
noTone(pin); // 不播放任何頻率
}
for(int i=5; i>0; i--){
tone(pin, frequency[i]); // 播放特定頻率
delay(500); // 延遲
noTone(pin); // 不播放任何頻率
}
}
// ADD
// 換行顯示
void setup()
{
Serial.begin(9600); // 序列通訊速度為9600位元
}
void loop()
{
Serial.println(analogRead(A0)); // 換行(ln)
// analogRead(A0) 讀取腳位A0的數值
delay(500); // 每0.5秒讀一次
}
// ADD
// 不換行顯示
void setup()
{
Serial.begin(9600); // 序列通訊速度為9600位元
}
void loop()
{
Serial.print(analogRead(A0)); // 讀取腳位A0的數值
delay(500); // 每0.5秒讀一次
}
// lab
// LAB
// 改變環境的亮度 → 讓光敏電阻讀值並印出結果
int ini,cur; // 宣告變數ini,fin,分別用來存取最初數值與現在數值
void setup()
{
pinMode(A0,INPUT); // 設定A0腳位為讀取模式
ini = analogRead(A0); // 將最初讀取的值給ini存取
Serial.begin(9600); // 設定傳輸速度為9600baud
Serial.println("Ready!!"); // 印出文字
}
void loop()
{
cur = analogRead(A0); // 讀取現在數值
if(cur - ini > 30){ // 如果現在比最初的數值大30以上 (代表有一定亮度差)
Serial.println("getting lighter"); // 印出文字
}
else if(ini - cur > 30){ // 如果最初的數值比現在的大30以上 (代表有一定亮度差)
Serial.println("getting darker"); // 印出文字
}
delay(500); // 每0.5秒取值一次
}
// TRY IT !
// 光敏電阻改變環境亮度變化 → 控制 LED 燈泡亮暗
#define pin 2 // 取代‘pin’為‘2’
int now; // 宣告變數now
void setup()
{
//pinMode(A0,INPUT); 設定A0為讀取模式
pinMode(pin,OUTPUT); // 設定pin腳位為輸出模式
digitalWrite(pin,LOW); // 一開始不要亮
Serial.begin(9600); // 設定傳輸速度為9600baud
}
void loop()
{
now = analogRead(A0); // 將A0腳位讀到的數值設給變數now
Serial.print("Right now value is : "); // 印出文字
Serial.println(now); //印出now
if( now < 100 ){ // 如果now小於100
digitalWrite(pin,HIGH); // LED燈亮
}
else{ // 如果now大於100
digitalWrite(pin,LOW); // LED燈暗
}
}
// LAB
// 讓伺服馬達轉動
#include <Servo.h> // 需要匯入函式庫 Servo
#define pin 9 // 選擇信號腳位為9
Servo servo_9; // 建立SERVO物件
void setup()
{
servo_9.attach(pin); // 將信號接至腳位9
}
void loop()
{
servo_9.write(0); // 旋轉到0度
delay(1000); //
servo_9.write(90); // 旋轉到90度
delay(1000);
servo_9.write(180); // 旋轉到180度
delay(1000);
}
// LAB
// 在有效範圍內測量距離
// 需要匯入函式庫
#include <NewPing.h> //需匯入 NewPing 函式庫
#define TRIGpin 12 // TRIGpin 接到12腳位
#define ECHOpin 11 // ECHOpin 接到11腳位
#define Max_D 200 // 設定有效範圍為200cm
NewPing m(TRIGpin, ECHOpin, Max_D); // 宣吿一個物件'm','m'為新的超音波感測器
void setup()
{
Serial.begin(9600); // 傳輸速度為9600baud
}
void loop()
{
int us = m.ping(); // 取得波行進的秒數
if (us>0){
Serial.print(m.convert_cm(us)); // 將時間轉換成距離
Serial.println("cm"); // 印出單位
}
delay(100); // 每0.1s讀一次
}
// ADD
// 不須匯入函式庫
#define trigPin 12 // Trig Pin(發出觸發訊號)
#define echoPin 11 // Echo Pin
long duration, cm, inches; // 宣告變數名稱
void setup()
{
Serial.begin (9600); // 設定傳輸速度(輸出速度與輸入速度需要一致)
pinMode(trigPin, OUTPUT); // 定義此腳位為輸出
pinMode(echoPin, INPUT); // 定義此腳位為輸入
}
void loop()
{
digitalWrite(trigPin, LOW); // 給 Trig 低電位,持續 5 微秒
delayMicroseconds(5);
digitalWrite(trigPin, HIGH); // 給 Trig 高電位,持續 10 微秒
delayMicroseconds(10);
digitalWrite(trigPin, LOW); // 給 Trig 低電位
pinMode(echoPin, INPUT); // 讀取 echo 的電位
duration = pulseIn(echoPin, HIGH); // 收到高電位時的時間
cm = (duration/2) / 29.1; // 將時間換算成距離 cm
inches = (duration/2) / 74; // 將時間換算成距離 inch
Serial.print("Distance : "); // 印出字串: Distance :
Serial.print(inches); // 印出inches的數值
Serial.print("in, "); // 印出字串: in,
Serial.print(cm); // 印出cm的數值
Serial.print("cm"); // 印出字串: cm
Serial.println(); // 換行
delay(250); // 延遲250毫秒
}
補充
規格
// LAB
// 顯示自己想要顯示的文字
#include <LiquidCrystal_I2C.h> // 需要下載函式庫 LiquidCrystal I2C
LiquidCrystal_I2C lcd(0x27,16,2); // 宣吿一個物件'lcd','lcd'為新的液晶顯示器
void setup()
{
lcd.init(); // 初始化'lcd'
lcd.backlight(); // 開啟背光
lcd.setCursor(0,0); // 設定游標位置(起始位置)
lcd.print("Hi! I‘m Sophia!"); // 印出文字
delay(1000); // 持續1秒鐘
}
void loop()
{
lcd.clear(); // 每次開始印之前,先清除一次
lcd.setCursor(0,0); // 設定游標位置(起始位置)
lcd.print("I'm pretty!"); // 印出文字
delay(1000); // 持續1秒鐘
lcd.clear();
for (int i=0; i<16; i++){
lcd.setCursor(i, 1); // 設定游標位置(起始位置)
lcd.print("Just kidding :)"); // 印出文字
delay(100); // 一個位置持續0.1秒
lcd.clear(); // 清除文字顯示
}
delay(1000); // 持續一秒鐘
}
// LAB
// 感測環境中的溫溼度並印出結果
#include <DHT.h> // 需要下載函式庫 DHT sensor library
#define DHTTYPE DHT11 //模組名稱
// 有其他種DHT,不只有DHT11
#define pin 9
DHT dht9 (pin, DHTTYPE); // 宣吿一個物件'dht9','dht9'為新的超音波感測器
void setup()
{
Serial.begin(9600); // 設定傳輸速度為9600baud
dht9.begin(); // 初始化dht9
}
void loop()
{
Serial.print(dht9.readTemperature()); // 印出讀到的溫度數值
Serial.print("C,"); // 印出單位
Serial.print(dht9.readHumidity()); // 印出讀到的濕度數值
Serial.println("%"); // 印出單位
delay(2000); // 每2秒讀一次
}
[Arduino範例] RFID RC522辨識系統入門,讀取UID和比對
阿玉maker研究區
// LAB
// 讀卡機
#include <SPI.h>
#include <MFRC522.h> // 需下載MFRC522函式庫
#define RST_PIN 9 // RST接到9
#define NSS_PIN 10 // NSS接到10
MFRC522 mfrc522 (NSS_PIN,RST_PIN);
void setup()
{
Serial.begin(9600); // 通訊 baud 值
SPI.begin();
mfrc522.PCD_Init(); // 初始化 MFRC522 讀卡機模組
Serial.print(F("Reader ")); // 印出文字
Serial.print(F(": ")); // 印出文字
mfrc522.PCD_DumpVersionToSerial(); // 顯示讀卡設備的版本
}
void loop()
{
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()){
// 檢查是否讀到卡片
// 顯示卡片內容
Serial.print(F("Card UID:")); // 印出'Card UID:'
byte *id = mfrc522.uid.uidByte; // 取得卡片的UID
byte idSize = mfrc522.uid.size; // 取得UID的長度
Serial.println();
for (byte i=0; i<idSize; i++){
Serial.print(id[i]+String(" ")); // 印出卡片UID
}
Serial.println(); // 換行
byte Card[4] = {82,244,212,26}; // 正確的卡片UID
for (byte i=0; i<4; i++){
if (id[i]!=Card[i]){ // 判斷卡片UID符合
Serial.print("Access Denied!"); // 拒絕進入
break;
}
if (i==3){
Serial.print("Access Granted!"); // 歡迎回來
}
}
mfrc522.PICC_HaltA(); // 讓卡片進入停止模式
}
}
Arduino 8*8 LED Matrix MAX7219 實習
#include <LedControl.h> // 需下載 LedControl 函式庫
#define DIN 8 // 定義接DIN的腳位在8
#define CS 7 // 定義接CS的腳位在7
#define CLK 6 // 定義接CLK的腳位在6
#define Width 8 // 8*8矩陣
#define Height 8
LedControl LC = LedControl(DIN,CLK,CS,1);
// data pin/ clock pin/
// 決定是否要傳資料/ 連接幾個led矩陣
// 設定每個燈的亮暗 8*8次
void Update(int Map[Height][Width])
{
for(int i=0; i<Height; i++)
{
for(int j=Width-1; j>=0; j--)
{
LC.setLed(0,j,i,Map[7-i][j]); // 更新亮暗
}
}
}
// 設定圖案
int On[8][8]={{0,0,1,1,1,1,0,0},
{0,1,0,0,0,0,1,0},
{1,0,1,0,0,1,0,1},
{1,0,0,0,0,0,0,1},
{1,0,1,0,0,1,0,1},
{1,0,0,1,1,0,0,1},
{0,1,0,0,0,0,1,0},
{0,0,1,1,1,1,0,0}};
void setup()
{
pinMode(DIN,OUTPUT); // 設定DIN腳位為輸出模式
pinMode(CS,OUTPUT); // 設定CS腳位為輸出模式
pinMode(CLK,OUTPUT); // 設定CLK腳位為輸出模式
LC.shutdown(0,false); // 供電
LC.setIntensity(0,5); // 設定亮暗 (0~15)
Update(On); // 更新圖案到顯示器上
}
void loop()
{
// 如果只想讓他亮 → 進入迴圈,但不跑任何程式
}
int now;
int prev = 0;
void setup() {
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop() {
now = analogRead(A0); //類比輸入接到 A0
if (prev > now) {
Serial.println((String(now) + String("it\'s getting colder")));
} else if (prev < now) {
Serial.println((String(now) + String("it\'s getting warmer")));
}
prev = now;
delay(100);
}
#include <LedControl.h>
#define CIN 0
#define CS 1
#define CLK 2
#define Width 8
#define Height 8
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2); //設定LCD位置0x27,設定LCD大小為16*2
LedControl LC = LedControl(CIN,CLK,CS,1);
//data pin/ clock pin/ ?/ 最多控制幾個設備
void Update(int Map[Height][Width])
{
for(int i=0;i<Height;i++)
{
for(int j=0;j<Width;j++)
{
LC.setLed(0,i,j,Map[i][j]); //更新亮暗
}
}
}
//設定圖案
int On[8][8]={{0,0,1,1,1,1,0,0},
{0,1,0,0,0,0,1,0},
{1,0,1,0,0,1,0,1},
{1,0,0,0,0,0,0,1},
{1,0,1,0,0,1,0,1},
{1,0,0,1,1,0,0,1},
{0,1,0,0,0,0,1,0},
{0,0,1,1,1,1,0,0}};
int Off[8][8]={{0,0,1,1,1,1,0,0},
{0,1,0,0,0,0,1,0},
{1,0,1,0,0,1,0,1},
{1,0,0,0,0,0,0,1},
{1,0,0,1,1,0,0,1},
{1,0,1,0,0,1,0,1},
{0,1,0,0,0,0,1,0},
{0,0,1,1,1,1,0,0}};
void setup()
{
pinMode(CIN,OUTPUT);
pinMode(CS,OUTPUT);
pinMode(CLK,OUTPUT);
LC.shutdown(0,false); //供不供電
LC.setIntensity(0,5); //設定亮暗 (0~15)
Update(On); //更新圖案到顯示器上
lcd.init(); //初始化LCD
lcd.backlight(); //開啟背光
lcd.print("Hello, World!"); //顯示Hello, World!
delay(3000);
}
void loop() {
Update(On);
lcd.clear();
lcd.setCursor(0, 0);// (column,row)
lcd.print("Smile");
delay(1000);
Update(Off);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Cry");
delay(1000);
}
#include <LedControl.h>
#define CIN 5
#define CS 6
#define CLK 7
#define Width 8
#define Height 8
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2); //設定LCD位置0x27,設定LCD大小為16*2
int randnumber;
#define R 9
#define G 10
#define B 11
LedControl LC = LedControl(CIN,CLK,CS,1);
//data pin/ clock pin/ ?/ 最多控制幾個設備
void Update(int Map[Height][Width])
{
for(int i=0;i<Height;i++)
{
for(int j=0;j<Width;j++)
{
LC.setLed(0,i,j,Map[i][j]); //更新亮暗
}
}
}
//設定圖案
int On[8][8]={{0,0,1,1,1,1,0,0},
{0,1,0,0,0,0,1,0},
{1,0,1,0,0,1,0,1},
{1,0,0,0,0,0,0,1},
{1,0,1,0,0,1,0,1},
{1,0,0,1,1,0,0,1},
{0,1,0,0,0,0,1,0},
{0,0,1,1,1,1,0,0}};
int Off[8][8]={{0,0,1,1,1,1,0,0},
{0,1,0,0,0,0,1,0},
{1,0,1,0,0,1,0,1},
{1,0,0,0,0,0,0,1},
{1,0,0,1,1,0,0,1},
{1,0,1,0,0,1,0,1},
{0,1,0,0,0,0,1,0},
{0,0,1,1,1,1,0,0}};
void setup()
{
pinMode(CIN,OUTPUT);
pinMode(CS,OUTPUT);
pinMode(CLK,OUTPUT);
LC.shutdown(0,false); //供不供電
LC.setIntensity(0,5); //設定亮暗 (0~15)
Update(On); //更新圖案到顯示器上
lcd.init(); //初始化LCD
lcd.backlight(); //開啟背光
lcd.print("Hello, World!"); //顯示Hello, World!
Serial.begin(9600);
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
analogWrite(R, 0);
analogWrite(G, 0);
analogWrite(B, 0);
randomSeed(analogRead(0));
delay(3000);
}
void loop() {
Serial.print("random = ");
randnumber = random(255);
Serial.println(randnumber);
analogWrite(R, randnumber);
randnumber = random(255);
Serial.println(randnumber);
analogWrite(G, randnumber);
randnumber = random(255);
Serial.println(randnumber);
analogWrite(B, randnumber);
Update(On);
lcd.clear();
lcd.setCursor(0, 0);// (column,row)
lcd.print("Smile");
delay(1000);
Update(Off);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Cry");
delay(1000);
}
程式碼連結 基礎程式設計 基礎電子設計 超級電子元件 FSM 有限狀態機
Feb 18, 2021C++ :::spoiler 提示 #include <iostream> using namespace std; int main() { string name; cout << "FSM Example"<< endl << endl;
Feb 18, 2021超級電子元件 ex1 :::spoiler 提示 #include <Servo.h> Servo myservo; // 建立一個 servo #define photocellPin A2 //定義光敏電阻 (photocell) 腳位 int photocellVal = 0; // photocell variable int minLight = 100; // 最小光線門檻值 int pos = 0; // 設定 Servo 角度的變數
Jan 25, 2021or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up