Arduino

[Arduino] Final Project

#include<dht11.h>
#include<LiquidCrystal.h>
LiquidCrystal LCD(11,12,5,4,3,2); //宣告一個名為LCD的LiquidCrystal
dht11 DHT; //宣告一個名為DHT的dht11
int trig = 9,echo = 10,buzzer = 6;
float cm;
void setup() {
    LCD.begin(16,2); //初始化LCD
    pinMode(buzzer,OUTPUT); //初始化蜂鳴器
    pinMode(trig,OUTPUT); //初始化超音波發射器為OUTPUT
    pinMode(echo,INPUT); //初始化超音波接收器為INPUT
}
void loop() {
    if(DHT.read(8) == 0) //如果讀取成功輸出溫度和濕度
    { 
        showdht(); //顯示溫度濕度
        bibi(); //蜂鳴器叫兩聲
        delay(2000);
        LCD.clear(); 
        showdis(); //顯示距離
        bibi();
        delay(2000); 
    }
    else{ //讀取失敗則輸出Error
    LCD.setCursor(0,0);
    LCD.print("Error");
    }
    LCD.clear(); //清除畫面 
}
void bibi() //嗶嗶兩聲
{
    for(int i = 1;i <= 100;i++) //每隔4ms鳴叫一次重複100次
    {
        digitalWrite(buzzer,HIGH);
        delay(1);
        digitalWrite(buzzer,LOW);
        delay(1);
    }
    delay(100);
    for(int i = 1;i <= 100;i++) //每隔4ms鳴叫一次重複100次
    {
        digitalWrite(buzzer,HIGH);
        delay(1);
        digitalWrite(buzzer,LOW);
        delay(1);
    }
}
void showdht() //用來輸出溫度濕度
{
    LCD.setCursor(0,0);
    LCD.print("Temperature:");
    LCD.print((float)DHT.temperature,2);
    LCD.print("c");
    LCD.setCursor(0,1);
    LCD.print("Humidity:");
    LCD.print((float)DHT.humidity,2);
    LCD.print("%"); 
}
void showdis() //用來計算和輸出距離
{
    //trig發出脈衝
    digitalWrite(trig,LOW);
    delayMicroseconds(2);
    digitalWrite(trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(trig,LOW);
    //接收時間
    long etime = pulseIn(echo,HIGH);//等到pin到HIGH之後開始計時直到LOW 回傳Microseconds;
    //計算距離
    cm = etime*(331+0.6*(float)DHT.temperature)/2/10000;
    LCD.setCursor(0,0);
    LCD.print("Distance:");
    LCD.setCursor(0,1);
    LCD.print(cm);
    LCD.print("cm"); 
}

[Arduino]

#include<dht11.h>
#include<LiquidCrystal.h>
LiquidCrystal LCD(12,11,2,3,4,5); //宣告一個名為LCD的LiquidCrystal
dht11 DHT; //宣告一個名為DHT的dht11
void setup() {
    LCD.begin(16,2); //初始化LCD
}
void loop() {
    if(DHT.read(13) == 0) //如果讀取成功輸出溫度和濕度
    {
        LCD.setCursor(0,0);
        LCD.print("Temperature:");
        LCD.print((float)DHT.temperature,2);
        LCD.print("c");
        LCD.setCursor(0,1);
        LCD.print("Humidity:");
        LCD.print((float)DHT.humidity,2);
        LCD.print("%"); 
    }
    else{ //讀取失敗則輸出Error
        LCD.setCursor(0,0);
        LCD.print("Error");
    }
    delay(2000); //等待兩秒後清除畫面
    LCD.clear();
}

[Arduino] LCM

#include<LiquidCrystal.h>
LiquidCrystal LCD(12,11,2,3,4,5); //宣告一個名為LCD的LiquidCrystal
byte left[8] = {B00100,B01000,B10000,B00000,B00000,B00000,B00000,B00000}; //符號ˊ
byte dot[8] = {B00000,B01100,B01100,B00000,B00000,B00000,B00000,B00000}; //符號・
byte right[8] = {B00100,B00010,B00001,B00000,B00000,B00000,B00000,B00000}; //符號ˋ
void setup() {
    //創建字元
    LCD.createChar(0,left);
    LCD.createChar(1,dot); 
    LCD.createChar(2,right);
    LCD.begin(16,2);
    LCD.print("Hello,World!");
    //在(5,1)印出(´・ω・`)
    LCD.setCursor(5,1);
    LCD.write("(");
    LCD.write(byte(0));
    LCD.write(byte(1));
    LCD.write("w");
    LCD.write(byte(1));
    LCD.write(byte(2));
    LCD.write(")");
}
void loop() {
    //在(0,1)印出經過時間(秒)
    LCD.setCursor(0,1);
    LCD.print(millis()/1000);
}

[Arduino] Ultrasound

int trig = 8;
int echo = 9;
int led[7] = {0,1,2,3,4,5,6};
float cm,inch;
void setup() {
    pinMode(trig,OUTPUT); //初始化超音波發射器為OUTPUT
    pinMode(echo,INPUT); //初始化超音波接收器為INPUT
    for(int i = 1;i <= 6;i++)pinMode(led[i],OUTPUT); //初始化六個LED
    Serial.begin(9600); //初始化序列埠傳輸速率
    //delay(3000);
    Serial.println("ShowDistance : ");
}

void loop() {
    //trig發出脈衝
    digitalWrite(trig,LOW);
    delayMicroseconds(2);
    digitalWrite(trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(trig,LOW);
    //接收時間
    long etime = pulseIn(echo,HIGH);//等到pin到HIGH之後開始計時直到LOW 回傳Microseconds;
    //計算距離
    cm = etime/29/2;
    inch = etime/74/2;
    Serial.print(cm);
    Serial.println("cm");
    Serial.print(inch);
    Serial.println("inch");
    for(int i = 1;i <= 6;i++) //全部LED熄滅
    {
        digitalWrite(led[i],LOW);
    }
    for(int i = 1;i <= ((cm/10)+1)&&i <= 6;i++) //判斷需有幾個燈亮並點亮
    {
        digitalWrite(led[i],HIGH);
    }
    delay(500); //每500毫秒更新一次距離
}

[Arduino] PWM–LED

int led = 9;
void setup()
{
    pinMode(led,OUTPUT);
}
int light = 0,add = 5;
void loop()
{ 
    light+=add;
    delay(30);
    analogWrite(led,light);
    if(light == 255||light == 0)
    {
        add = -add;
        //delay(500);
    } 
}

[Arduino] ActiveBuzzer

int buzzer = 8;
void setup() { //初始化蜂鳴器pin8為輸出
    pinMode(buzzer,OUTPUT);
}

void loop() {
    for(int i = 1;i <= 80;i++) //每隔2ms鳴叫一次重複80次
    {
        digitalWrite(buzzer,HIGH);
        delay(1); 
        digitalWrite(buzzer,LOW);
        delay(1);
    }
    for(int i = 1;i <= 100;i++) //每隔4ms鳴叫一次重複100次
    {
        digitalWrite(buzzer,HIGH);
        delay(2);
        digitalWrite(buzzer,LOW);
        delay(2);
    }
}

[Arduino] 6*LED

int led[7] = {0,1,2,3,4,5,6}; //set pin number
void setup() //set pin led[1]~led[6] as OUTPUT
{
    for(int i = 1;i <= 6;i++)
        pinMode(led[i], OUTPUT);
}
void s1()
{
    for(int i = 1;i <= 6;i++) //由1~6每200毫秒點亮一顆LED
    {
        digitalWrite(led[i], HIGH); 
        delay(200);
    }
    for(int i = 6;i >= 1;i--) //由6~1每200毫秒熄滅一顆LED
     { 
        digitalWrite(led[i], LOW); 
        delay(200); 
    }
}
void s2()
{
   for(int i = 3;i >= 1;i--) //由中間往外每200毫秒點亮一組LED
    {
        digitalWrite(led[i], HIGH);
        digitalWrite(led[7-i], HIGH);
        delay(200);
    }
    for(int i = 1;i <= 3;i++) //由外往內每200毫秒熄滅一組LED
    {
        digitalWrite(led[i], LOW);
        digitalWrite(led[7-i], LOW);
        delay(200);
    }
}
void s3()
{
    for(int i = 1;i <= 3;i++) //由外往內 間隔200毫秒閃爍一組LED
    {
        digitalWrite(led[i], HIGH);
        digitalWrite(led[7-i], HIGH);
        delay(200);
        digitalWrite(led[i], LOW);
        digitalWrite(led[7-i], LOW);
        delay(200);
    }
    for(int i = 2;i >= 1;i--) //由內往外 間隔200毫秒閃爍一組LED
    {
        digitalWrite(led[i], HIGH);
        digitalWrite(led[7-i], HIGH);
        delay(200);
        digitalWrite(led[i], LOW);
        digitalWrite(led[7-i], LOW);
        delay(200);
    }
}
void flash()
{
    for(int j = 1;j <= 2;j++) //執行兩次閃爍
    {
        for(int i = 1;i <= 6;i++) // 1~6全亮
        {
            digitalWrite(led[i],HIGH);
        }
        delay(200);
        for(int i = 1;i <= 6;i++) //1~6全暗
        {
            digitalWrite(led[i],LOW);
        }
        delay(200);
    }
}
void loop() {
    s1();
    flash();
    s2();
    flash();
    s3();
    flash();
}

[Arduino] PassiveBuzzer

int buzzer = 8;
int i = 0,aclick = 100;
int music[500] = {6,0,10,0,9,10,0,7,0,8,0,10,9,8,7,6,0,6,10,0,9,
10,0,7,0,8,0,10,5,0,5,0,6,0,10,0,9,10,0,7,0,8,0,10,9,8,7,6,0,6,10,
0,9,10,0,7,0,8,0,10,5,0,5,0,6,0,8,0,7,8,7,0,9,0,8,0,7,8,7,5,6,0,10,
0,9,10,9,10,11,0,10,0,9,0,10,0,6,0,8,0,7,8,7,0,9,0,8,0,7,8,7,5,6,0,
10,0,9,10,9,10,12,0,10,0,9,0,10,0,6,0,8,0,7,8,7,0,9,0,8,0,7,8,7,5,6,
0,10,0,9,10,9,10,11,0,10,0,9,0,10,0,9,0,0,0,0,9,9,10,0,9,0,8,0,7,0,6,
0,0,0,0,0,-1};
int scale[50] = {0,131,147,165,175,196,220,247,262,294,330,392,440,494};

void setup() {
    pinMode(buzzer,OUTPUT);
}
void loop() {
    if(music[i] == -1)i = 0;
    mtone(scale[music[i]]);
    i++;
}
void mtone(int f) {
    tone(buzzer,f);
    delay(aclick);
    noTone(buzzer);
}