Arduino Project เครื่องควบคุมการเปิด-ปิดอุปกรณ์จำนวน 4ช่อง



อุปกรณ์หลัก
บอร์ด Arduino UNO R3
จอ LCD 16x2 แบบ I2C
ขา OUTPUT ใช้ขา 8-11 สามารถต่อออกไปควบคุม Relay ได้
BUTTON 1 ใช้สำหรับการเลือกควบคุมอุปกรณ์
BUTTON 2 ใช้สำหรับการสั่งงาน เปิด-ปิด อุปกรณ์

Code
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);

int c = 15;
int l,i,k,er1,er2,er3,er4;

void setup() {
  pinMode(2,INPUT);
  pinMode(3,INPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  
  attachInterrupt(digitalPinToInterrupt(2), sc1, FALLING);
  attachInterrupt(digitalPinToInterrupt(3), sc2, FALLING);
  
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print(" Control Device ");
  lcd.setCursor(0,1);
  lcd.print("  By.AeHiwJang  ");
  delay(3000);
  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Device 1  OFF");
  lcd.setCursor(0,1);
  lcd.print("Device 2  OFF");
  lcd.setCursor(c,l);
  lcd.print("<");
}

void loop() {
  sor();
  mai(i);
}

void sc1(){
  delay(500);
  l++;
  i++;
  if(l>1)l=1;
  if(i>3){
  i=0;
  l=0;}
}

void sc2(){
  delay(500);
  if(i==0)
  { 
    if(er1==0)
    {
      er1=1;
    }
    else if(er1==1)
    {
      er1=0;
    }
  }
  else if(i==1){
    if(er2==0)
    {
      er2=1;
    }
    else if(er2==1)
    {
      er2=0;
    }
  }
  else if(i==2){
    if(er3==0)
    {
      er3=1;
    }
    else if(er3==1)
    {
      er3=0;
    }
  }
  else if(i==3){
    if(er4==0)
    {
      er4=1;
    }
    else if(er4==1)
    {
      er4=0;
    }
  }
}

void sor(){
 lcd.setCursor(c,l);
 lcd.print("<");
 lcd.setCursor(c,l-1);
 lcd.print(" ");
 lcd.setCursor(c,l+1);
 lcd.print(" ");
}

void mai(int j){
  switch (j) {
    case 0:
    if(er1==1 && er2 == 0)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 1  ON ");
    lcd.setCursor(0,1);
    lcd.print("Device 2  OFF");
    digitalWrite(8,HIGH);
    digitalWrite(9,LOW);
    }
    
    else if(er1==1 && er2 == 1)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 1  ON ");
    lcd.setCursor(0,1);
    lcd.print("Device 2  ON ");
    digitalWrite(8,HIGH);
    digitalWrite(9,HIGH);
    }
    
    else if(er1==0 && er2 == 0)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 1  OFF ");
    lcd.setCursor(0,1);
    lcd.print("Device 2  OFF ");
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    }

    else if(er1==0 && er2 == 1)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 1  OFF ");
    lcd.setCursor(0,1);
    lcd.print("Device 2  ON ");
    digitalWrite(8,LOW);
    digitalWrite(9,HIGH);
    }
    
    break;
    
    case 1:
    if(er1==1 && er2 == 0)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 1  ON ");
    lcd.setCursor(0,1);
    lcd.print("Device 2  OFF");
    digitalWrite(8,HIGH);
    digitalWrite(9,LOW);
    }
    
    else if(er1==1 && er2 == 1)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 1  ON ");
    lcd.setCursor(0,1);
    lcd.print("Device 2  ON ");
    digitalWrite(8,HIGH);
    digitalWrite(9,HIGH);
    }

    else if(er1==0 && er2 == 0)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 1  OFF ");
    lcd.setCursor(0,1);
    lcd.print("Device 2  OFF ");
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    }

    else if(er1==0 && er2 == 1)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 1  OFF ");
    lcd.setCursor(0,1);
    lcd.print("Device 2  ON ");
    digitalWrite(8,LOW);
    digitalWrite(9,HIGH);
    }
    break;
    
    case 2:
    if(er2==1 && er3 == 0)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 2  ON ");
    lcd.setCursor(0,1);
    lcd.print("Device 3  OFF");
    digitalWrite(9,HIGH);
    digitalWrite(10,LOW);
    }
    
    else if(er2==1 && er3 == 1)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 2  ON ");
    lcd.setCursor(0,1);
    lcd.print("Device 3  ON ");
    digitalWrite(9,HIGH);
    digitalWrite(10,HIGH);
    }

    else if(er2==0 && er3 == 0)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 2  OFF ");
    lcd.setCursor(0,1);
    lcd.print("Device 3  OFF ");
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    }

    else if(er2==0 && er3 == 1)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 2  OFF ");
    lcd.setCursor(0,1);
    lcd.print("Device 3  ON ");
    digitalWrite(9,LOW);
    digitalWrite(10,HIGH);
    }
    break;
    
    case 3:
    if(er3==1 && er4 == 0)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 3  ON ");
    lcd.setCursor(0,1);
    lcd.print("Device 4  OFF");
    digitalWrite(10,HIGH);
    digitalWrite(11,LOW);
    }
    
    else if(er3==1 && er4 == 1)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 3  ON ");
    lcd.setCursor(0,1);
    lcd.print("Device 4  ON ");
    digitalWrite(10,HIGH);
    digitalWrite(11,HIGH);
    }

    else if(er3==0 && er4 == 0)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 3  OFF ");
    lcd.setCursor(0,1);
    lcd.print("Device 4  OFF ");
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    }

    else if(er3==0 && er4 == 1)
    {
    lcd.setCursor(0,0);
    lcd.print("Device 3  OFF ");
    lcd.setCursor(0,1);
    lcd.print("Device 4  ON ");
    digitalWrite(10,LOW);
    digitalWrite(11,HIGH);
    }
    break;
  }
}



**สามารถนำไปต่อยอดเพิ่มขาควบคุมอุปกรณ์หลายๆอย่างได้
หรือเพิ่มฟังก์ชั่น EEPROM เพื่อใช้ในการจดจำคำสั่งงานอุปกรณ์ต่างๆ ในกรณีที่ไฟดับแล้วเปิดใหม่ เพื่อให้เครื่องสามารถทำงานในคำสั่งเดิมได้

**Code นี้ไม่มีฟังก์ชั่น Debounce การกดสวิตช์

ไม่มีความคิดเห็น:

แสดงความคิดเห็น