레이어(Layer)란 ?

그래듀에이션보다 많은 층을 표현할 때 사용하는 것 레이어 : 위가 짧고 아래가 긴 스타일 레이어 : 90도 이상 각도를 들어서 자르는 층이 많은 커트 (출처 - http://kin.naver.com/openkr/detail.nhn?docId=173794 )

라고 합니다.


더 쉽게 예기하면 포토샾을 하신분들은 레이어를 많이사용하시니 같은개념으로 이해하심 됩니다.

즉 하나의 층을 이야기합니다.


css로 2개의 층을 만들고 그것을 띄웠다 사라졌다를 관리할 수 있습니다.


고양이 메일링 서비스 ( http://bubibuba.tistory.com/77 ) 소스를 참고하여 설명 드리겠습니다.


style.css 파일을 보시면 레이어가 구현이 되어있습니다.

이중 Layer1를 띄웠다 사라졌다 하는 부분을 설명드리면


 
//레이어 1번
#Layer1 {
              border:2px solid #ff6600;
              background:white;
              position:absolute; 
              top:50%; 
              left:50%; 
              width:450px; 
              height:500px; 
              margin-left: -225px; 
              margin-top: -300px;
              visibility:hidden;
          }
위처럼 레이어를 css로 구현을 해 둡니다.

그리고 위 이미지의 Join 버튼을 누르면 Layer1이 출력이 되게 되는데 main.php 의 소스를 보면

<input type="button" value="JOIN" class="button" onclick="Layer1.style.visibility='visible'" style="margin-left:30px">

위 부분에서 구현이 되는걸 확인할 수 있습니다.

OnClick를 보시면 Layer1이 hidden -> visible로 변경되면서 화면이 출력됩니다.




이런식으로 말이죠.. 반대로 Back부분을 보면 화면이 사라지는데

그부분은 위와 마찬가지로

<input class="button" type="button" value="BACK" OnClick="Layer1.style.visibility='hidden'" style="margin-left:30px"> 


 Layer1을  visible -> hidden 로 변경 시켜 화면에서 사라지게 합니다.


소스를 꼭 다운받으셔서 보시는것을 추천드립니다.


 
#footer {
              position:absolute; 
              clear:left; 
              float:left; 
              width:100%; 
              
              left:0; 
              bottom:0px;            
          }


아래속성을 참고로하여 필요한 부분만 수정해주면 됩니다.


에프티크레이이티드(http://fdc.ne.kr)에서 제공하는 교육용 아두이노를 이용하여 제작했습니다.

사용한 센서는 

- 조도 센서

- 온도 센서

- 습도 센서

를 사용하여 

버튼을 땐경우에는 - 온도,습도 를 출력

버튼을 누른경우에는 - 조도를 출력합니다.


#include 
#include 
#include  
#define dataPin  22 // 온습도 데이터 입력핀 설정
#define clockPin 23 // 시간 데이터 입력핀 설정
SHT1x sht1x(dataPin, clockPin);
LiquidCrystal lcd(32, 54, 33, 34, 35, 36, 37);
int buttonState = 0;
const int cdsInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogInPin = A1;  // Analog input pin that the potentiometer is attached to

int sensorValue = 0;        // value read from the pot
int cdsValue = 0;        // value read from the pot


void setup()
{
   Serial.begin(9600); // 
   Serial.println("Starting up");
   Wire.begin();        // join i2c bus (address optional for master) 
   delay(500);  
   pinMode(8, INPUT);  //LED Set "Relay Board Cn1"
   lcd.begin(8,2);              // 8열 2줄 LCD 활용 시작
   lcd.clear();                  // LCD 화면 비움
  
}
void loop()
{
  buttonState = digitalRead(8);
  sensorValue = analogRead(analogInPin);
  cdsValue = analogRead(cdsInPin)*10;   
  float sensor;
  float cds;
  
  // Read values from the sensor
  sensor = analogInPin;
  cds = cdsInPin;   
  const int lookup[10] = {0x3F,0x06,0x5B,0x4F,0x66,
                          0x6D,0x7D,0x07,0x7F,0x6F};
  int Count, Thousands, Hundreds, Tens, Base;  
  Wire.beginTransmission(0x38);
  Wire.write((byte) 0);
  Wire.write(B01000111);
  Wire.endTransmission();
  
  float temp_c; // 섭씨 
  float temp_f; // 화씨
  float humidity; // 습도

  // 위의 변수 값에 센서로부터의 값을 입력 받도록 설정한다.
  temp_c = sht1x.readTemperatureC();
  temp_f = sht1x.readTemperatureF();
  humidity = sht1x.readHumidity();

  if(buttonState == HIGH){
  
      //LCD START
      lcd.setCursor(0,0);           // 0, 0 윗줄 시작
      lcd.print("Temp= ");    // 따옴표 사이에 원하는 글을 적는다.
      lcd.print(temp_c, DEC);    // 따옴표 사이에 원하는 글을 적는다.
      
      lcd.setCursor(0,1);           // 0, 1 아랫줄 시작
      lcd.print("Humi= ");
      lcd.print(temp_f, DEC);
      //LCD END
      
      // 7 SEGMENT START
      Wire.beginTransmission(0x38);
      Wire.write(1);
      Thousands = (int)temp_c/10;
      Hundreds = (int)(temp_c - (Thousands*10));
      Tens = (int)temp_f/10;
      Base = (int)(temp_f - (Tens*10));
      
      Wire.write(lookup[Thousands]);
      Wire.write(lookup[Hundreds]);
      Wire.write(lookup[Tens]);
      Wire.write(lookup[Base]);
      Wire.endTransmission();

      
  }else{
      
    if(cdsValue >= 160)
      {
        Serial.print("Relay Cn1 On\n");
        Serial.print("Trun off Light 0n\n");
    
        digitalWrite(33, LOW);
        digitalWrite(32, HIGH);
        
        lcd.begin(8,2); 
        lcd.clear();
        lcd.setCursor(0,0);        
        lcd.print("cds");   
        lcd.print(cdsValue,DEC);
        lcd.setCursor(0,1);          
        lcd.print("lightoff");
        
        Wire.beginTransmission(0x38);
        Wire.write(1);
        if(cdsValue>99 && cdsValue<1000){
          Thousands = 0;
          Hundreds = cdsValue/100;
          Tens = (cdsValue - (Hundreds*100))/10;
          Base = (cdsValue - (Hundreds*100)-(Tens*10));
        
          Wire.write(lookup[Thousands]);
          Wire.write(lookup[Hundreds]);
          Wire.write(lookup[Tens]);
          Wire.write(lookup[Base]);
          Wire.endTransmission();

        }else if(cdsValue>9 && cdsValue<100){
          Thousands = 0;
          Hundreds = 0;
          Tens = cdsValue/10;
          Base = (cdsValue - (Tens*10));
          
          Wire.write(lookup[Thousands]);
          Wire.write(lookup[Hundreds]);
          Wire.write(lookup[Tens]);
          Wire.write(lookup[Base]);
          Wire.endTransmission();

        }else if(cdsValue>10){
          Thousands = 0;
          Hundreds = 0;
          Tens = 0;
          Base = cdsValue;
        
          Wire.write(lookup[Thousands]);
          Wire.write(lookup[Hundreds]);
          Wire.write(lookup[Tens]);
          Wire.write(lookup[Base]);
          Wire.endTransmission();

        }
      }
  
    else
    {
      Serial.print("Relay Cn2 On\n");
      Serial.print("Trun On the light On\n");
  
      digitalWrite(32, LOW);
      digitalWrite(33, HIGH);
      
      lcd.begin(8,2); 
      lcd.clear();
      lcd.setCursor(0,0);        
      lcd.print("cds ");   
      lcd.print(cdsValue,DEC);
      lcd.setCursor(0,1);          
      lcd.print("light on");
    }
  }
  // 7 SEGMENT END
  delay(50);
}






이 프로그램을 응용하여 릴리즈를 활용하여 

조도값을 받아 어두울때는 전등을 키고 밝을때는 전등을끄는 기능과

추울때는 히터를 틀고 더울때는 히터를 키는 소스를 구현하였습니다.



 

#include 
#include 
#include  
#define dataPin  22 // 온습도 데이터 입력핀 설정
#define clockPin 23 // 시간 데이터 입력핀 설정
SHT1x sht1x(dataPin, clockPin);
LiquidCrystal lcd(40, 54, 41, 42, 43, 44, 45);
const int cdsInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogInPin = A1;  // Analog input pin that the potentiometer is attached to

int sensorValue = 0;        // value read from the pot
int cdsValue = 0;        // value read from the pot


void setup()
{
   Serial.begin(9600); // 
   Serial.println("Starting up"); 
   pinMode(32, OUTPUT); 
   pinMode(33, OUTPUT);    
   lcd.begin(8,2);              // 8열 2줄 LCD 활용 시작
   lcd.clear();                  // LCD 화면 비움
  
}
void loop()
{

  sensorValue = analogRead(analogInPin);
  cdsValue = analogRead(cdsInPin)*10;   
  float sensor;
  float cds;
  
  // Read values from the sensor
  sensor = analogInPin;
  cds = cdsInPin;   
  
  float temp_c; // 섭씨 
  float temp_f; // 화씨
  float humidity; // 습도

  // 위의 변수 값에 센서로부터의 값을 입력 받도록 설정한다.
  temp_c = sht1x.readTemperatureC();
  temp_f = sht1x.readTemperatureF();
  humidity = sht1x.readHumidity();

  if(temp_c<20){ // 온도의 기준은 20도
  
      //LCD START
      lcd.setCursor(0,0);           // 0, 0 윗줄 시작
      lcd.print("T=");    // 따옴표 사이에 원하는 글을 적는다.
      lcd.print((int)temp_c, DEC);    // 따옴표 사이에 원하는 글을 적는다.
      digitalWrite(32, HIGH); 
      lcd.print(" ON  ");    // 따옴표 사이에 원하는 글을 적는다.
      
  }else{
    //LCD START
      lcd.setCursor(0,0);           // 0, 0 윗줄 시작
      lcd.print("T=");    // 따옴표 사이에 원하는 글을 적는다.
      lcd.print((int)temp_c, DEC);    // 따옴표 사이에 원하는 글을 적는다.
      digitalWrite(32, LOW); 
      lcd.print(" OFF  ");    // 따옴표 사이에 원하는 글을 적는다.
  }
      
  if(cdsValue >= 160) // 밝기의 기준은 160
    {
      Serial.print("Relay Cn1 On\n");
      Serial.print("Trun off Light 0n\n");
  
      lcd.setCursor(0,1);
      lcd.print("L=");    // 따옴표 사이에 원하는 글을 적는다.
      lcd.print(cdsValue, DEC);    // 따옴표 사이에 원하는 글을 적는다.
      lcd.print(" OFF  ");    // 따옴표 사이에 원하는 글을 적는다.
      digitalWrite(33, LOW); 
  }
  else
  {
    Serial.print("Relay Cn2 On\n");
    Serial.print("Trun On the light On\n");

    lcd.setCursor(0,1);          
    lcd.print("L=");    // 따옴표 사이에 원하는 글을 적는다.
    lcd.print(cdsValue, DEC);    // 따옴표 사이에 원하는 글을 적는다.
    lcd.print(" ON  ");    // 따옴표 사이에 원하는 글을 적는다.
    digitalWrite(33, HIGH); 
  }
  delay(1000);
}




1. DC모터 제어하기.

   DC모터를 제어하기 위해서는 DC모터 , DC모터 모듈 , 9V전지가 필요합니다.

   제어 부분에 대해서는 아래그림을 참고해 주시면 됩니다.



in 핀의 HIGH(또는 아날로그값 ( 0 - 250 ) , LOW 를 조절하여 방향을 원하는대로 조절하는 기능을 가졌습니다.

또한 ENA핀을 HIGH , LOW 로 조절하여 ON/OFF 관리를 할 수 있습니다.


그럼 가변저항을 이용하여 속도를 조절하며 , 버튼을 이용하여 왼쪽 오른쪽 제어하는 소스를 구현해보겠습니다.



// 소스코드 1
// 버튼하나를 이용한 DC모터제어
int P1 = 10; // IN1 Pin
int P2 = 11; // IN2 Pin
int onOff = 9; // on/off (ENA Pin)
int btn = 2;   // Left & Right Select Button Pin
int sensorPin = A0; // SensorPin 
int sensorValue = 0; // Input Sensor Value
int val=0;           // Sensor Value Mapping 
int btn_state = 0;



void setup(){
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(onOff,OUTPUT);
  pinMode(btn , INPUT);
}

void loop(){
  btn_state = digitalRead(btn);
  digitalWrite(onOff , HIGH); //onoff
  sensorValue = analogRead(sensorPin); 
    val =  map(sensorValue , 0, 1023, 0, 250);
  if(btn_state == HIGH){
    
    analogWrite(P1 , val);
    digitalWrite(P2 , LOW);
  }else{
    analogWrite(P2 , val);
    digitalWrite(P1 , LOW);
  }

}



소스만 올리고 회로도가없어서 주석을 추가적으로 달았습니다.

아두이노는 한글에 너무 약해서 한글주석도 달기 힘드내요.


위와같이 소스를 구현하시면 아래처럼 작동합니다.


조금 더 응용을 해보아서 버튼 2개를 두어 오른쪽 왼쪽 방향키처럼 제어해보겠습니다.

버튼하나만 더 추가해주시면 됩니다.


// 소스코드 2
// 버튼두개를 이용한 DC모터제어
int P1 = 10;
int P2 = 11;
int onOff = 9;
int btn1 = 2;
int btn2 = 3;

int btn_state1 = 0;
int btn_state2 = 0;



void setup(){
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(onOff,OUTPUT);
  pinMode(btn1 , INPUT);
  pinMode(btn2 , INPUT);
}

void loop(){
  btn_state1 = digitalRead(btn1);
  btn_state2 = digitalRead(btn2);
  digitalWrite(onOff , HIGH); //onoff
   if(btn_state1 == HIGH && btn_state2 == LOW ){
    
    digitalWrite(P1 , HIGH);
    digitalWrite(P2 , LOW);
  }else if(btn_state1 == LOW && btn_state2 == HIGH){
    digitalWrite(P2 , HIGH);
    digitalWrite(P1 , LOW);
  }else{
    digitalWrite(P2 , LOW);
    digitalWrite(P1 , LOW);
  }

}


소스코드를 입력하시고 구동해보시면 됩니다.

버튼 다시는 방법은 제글을 찾아보시면 됩니다.






마이크와 스피커는 같은 구조로 이어져있습니다. 

용도에 따라 어떤식으로 좀더 특성에 맞게 구성되어있는것이지 구성자체는 진동을 주느냐 받느냐의 차이에 있습니다.


그래서 스피커를 마이크처럼 이용하여 진동을 받을 시 LED를 on/off 하는 소스를 구현했습니다,.


회로도는 간단합니다. 위처럼 가변저항같이 값을 가져오면 그값을 해석하여 LED를 추가적으로 설치하여 LED를 ON/OFF를 하는 소스입니다.




아래는 소스입니다.

시리얼모니터를 켜시고 받아오는 값을 측정하면서 소스를 조절하시면됩니다.



 
const int ledPin = 13;      // led connected to digital pin 13
const int knockSensor = A0; // the piezo is connected to analog pin 0
const int threshold = 20;  // threshold value to decide when the detected sound is a knock or not


// these variables will change:
int sensorReading = 0;      // variable to store the value read from the sensor pin
int ledState = LOW;         // variable used to store the last LED status, to toggle the light

void setup() {
 pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
 Serial.begin(9600);       // use the serial port
}

void loop() {
  // read the sensor and store it in the variable sensorReading:
  sensorReading = analogRead(knockSensor);    
  Serial.println(sensorReading);
  // if the sensor reading is greater than the threshold:
  if (sensorReading >= threshold) {
    // toggle the status of the ledPin:
    ledState = !ledState;   
    // update the LED pin itself:        
    digitalWrite(ledPin, ledState);
    // send the string "Knock!" back to the computer, followed by newline
    Serial.println("Knock!");         
  }
  delay(100);  // delay to avoid overloading the serial port buffer
}

에프디크리에이티브 사 에서 제작한 교육용 아두이노를 이용하여

초음파 탐지기를 이용한 후방주차 감지 시스탬을 구현해보았습니다.



즉흥적으로 짠거라 회로도는 따로없고 사진을 참고하시면됩니다.


소스는

int cnt;
int dummcnt;
long Distance;
long Tempture;
unsigned long duration;
int pin = 15;

void setup() {
  pinMode(32, OUTPUT);   
  pinMode(40, OUTPUT);     
  pinMode(41, OUTPUT);     
  pinMode(42, OUTPUT);     
  pinMode(43, OUTPUT);     
  pinMode(44, OUTPUT);     
  pinMode(45, OUTPUT);     
  pinMode(46, OUTPUT);     
  pinMode(47, OUTPUT);  
    Serial.begin(9600);    
    Tempture = 25;    
    pinMode(pin,OUTPUT);
    digitalWrite(pin, LOW);

    cnt = 0;
}

void allOff(){
   digitalWrite(40, LOW); 
   digitalWrite(41, LOW);
   digitalWrite(42, LOW);
   digitalWrite(43, LOW);
   digitalWrite(44, LOW);
   digitalWrite(45, LOW);
   digitalWrite(46, LOW);
   digitalWrite(47, LOW);
  
   //delay(1000);
}
void onLed(int num){
   digitalWrite(32,LOW);
 for(int j = 0 ; j<num ; j++){
   int lednum = j+40;
   digitalWrite(lednum, HIGH);
  
 }

}

void loop() {

    delay(150);
    
    pinMode(pin,OUTPUT);
    
    digitalWrite(15,HIGH);
    delayMicroseconds(10); 
    digitalWrite(15,LOW);
    
    pinMode(pin,INPUT);
    duration = pulseIn(pin, HIGH);
    
    Distance = (331.5 + 0.607 * Tempture) * ( duration * 0.001 / 2 );

    Serial.print("value (mm) = ");
    Serial.println(Distance);    
    //led all off
   
    if(Distance<40){
      digitalWrite(32,HIGH);
      allOff();
    }else if(Distance>=50 && Distance < 100){
      digitalWrite(32,HIGH);
      delay(50);
      digitalWrite(32,LOW);
      delay(50);
      digitalWrite(32,HIGH);
      delay(50);
      digitalWrite(32,LOW);
      delay(50);
      digitalWrite(32,HIGH);
      delay(50);
      digitalWrite(32,LOW);
      delay(50);
      digitalWrite(32,HIGH);
      delay(50);
      digitalWrite(32,LOW);
      
      onLed(1);
    }else if(Distance>=100 && Distance < 150){
      digitalWrite(32,HIGH);
      delay(100);
      digitalWrite(32,LOW);
      delay(100);
      digitalWrite(32,HIGH);
      delay(100);
      digitalWrite(32,LOW);
      onLed(2);
    }else if(Distance>=150 && Distance < 200){
      digitalWrite(32,HIGH);
      delay(150);
      digitalWrite(32,LOW);
      onLed(3);     
    }else if(Distance>=200 && Distance < 250){
      digitalWrite(32,HIGH);
      delay(200);
      digitalWrite(32,LOW);
      onLed(4);     
    }else if(Distance>=250 && Distance < 300){
      onLed(5);   
    }else if(Distance>=300 && Distance < 350){
      onLed(6);
    }else if(Distance>=350 && Distance < 400){
      onLed(7);
    }else{
      onLed(8);
    }
}

위와같이 소스를 설정하시면 아래영상처럼 구동됩니다.

소리를 키워주세요!





아두이노를 쓰다보면 핀수가 부족해서 원하고자하는것을 못하는경우가 생깁니다.


이럴때를 대비해서 아두이노 사이트에서는 쉬프트라는 명령어를 제공합니다. (http://arduino.cc/en/Tutorial/ShiftOut)

74HC595이라는 쉬프트레지스터를 이용해서 포트를 확장하게 됩니다.


아두이노 사이트에 있는



이그림을 구현해 보도록 하겠습니다.


우선 74HC595를 이해해보면


출처 = http://blog.naver.com/eskelt/120157837942

11,12,14를 핀에 가지고 제어를 해줍니다.

중요한건 12번핀을 LOW화 시키고 코드를 집어넣은 뒤 12번 핀을 HIGH로 바꾸어 00000000 - 11111111 사이의 데이터를 집어넣을 수 있습니다.


핀번호에 맞추어 VCC , GND 까지 연결을 해줍니다.


아래소스는 기본 아두이노 사이트에서지원하는 샘플 소스입니다.


//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  //count up routine
  for (int j = 0; j < 256; j++) {
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);   
    //return the latch pin high to signal chip that it 
    //no longer needs to listen for information
    digitalWrite(latchPin, HIGH);
    delay(1000);
  }
} 
 

위 소스를 입력하고 동작시킨 영상입니다.



다음은 이걸활용한 LED매트릭스를 보여드릴께요

가변저항이란?

'저항값을 바꿀 수 있는 저항기' 를 말합니다.



요렇게 생긴거를 의미합니다.

- 스피커 볼륨

- 전등 밝기 

등에 많이 사용됩니다.


사용법은

이런식으로 양끝에 5V 와 접지를 이어주고 

가운대는 아날로그 입력을 꼳아줍니다. 

가변저항을 조절하여 출력되는 값을 A0으로 보내주어 값을 가져오는 방식입니다.


우선 가변저항 없이 기본소스를 입력하여 어떠한 변화가 오는지 알아봅시다.

// 샘플 소스 1
// LED 밝기 조절하기 ( 가변저항 X )
int led = 9
int brightness = 0;    
int fadeAmount = 5;    
void setup()  { 
  pinMode(led, OUTPUT);
} 

void loop()  { 
  analogWrite(led, brightness);    
  brightness = brightness + fadeAmount;
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  delay(30);                            
}


이런식으로 소스를 구현하고 led핀을 9번으로 넣어줍니다. 출력을 아날로그를 출력하며 0~255까지 5씩 밝기를 조절해줍니다.


밝았다가 어두워졌다가 하는 모습을 볼 수 있습니다.




그럼 가변저항을 이용한 소스를 보도록 하겠습니다.

우선 회로를 보시면


아까 위의 그림처럼 가변저항을 설정해 줍니다.

그리고 3 5 6 9 10 11 에 각각 LED를 연결해 저항 접지까지 연결해줍니다.

잘모르시는분은 1일차를 참고해주세요 

// 샘플소스 2 
// 가변저항을 이용하여 LED를 제어 1

int sensorPin = A0;    // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor
int brightness = 0;    
int brightness1 = 50;    
int brightness2 = 100;    
int brightness3 = 150;    
int brightness4 = 200;    
int brightness5 = 250;    
// 각각의 밝기 초기값을 설정
int fadeAmount = 5;    
int fadeAmount1 = 5;  
int fadeAmount2 = 5;  
int fadeAmount3 = 5;  
int fadeAmount4 = 5;  
int fadeAmount5 = 5;  
//가변값을 각각설정

void setup()  { 
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  //아날로그 출력핀을 설정
} 

void loop()  { 
  sensorValue = analogRead(sensorPin);    
  analogWrite(3, brightness); 
  analogWrite(5, brightness1); 
  analogWrite(6, brightness2); 
  analogWrite(9, brightness3); 
  analogWrite(10, brightness4); 
  analogWrite(11, brightness5); 

  brightness = brightness + fadeAmount;
  brightness1 = brightness1 + fadeAmount1;
  brightness2 = brightness2 + fadeAmount2;
  brightness3 = brightness3 + fadeAmount3;
  brightness4 = brightness4 + fadeAmount4;
  brightness5 = brightness5 + fadeAmount5;
  
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  if (brightness1 == 0 || brightness1 == 255) {
    fadeAmount1 = -fadeAmount1 ; 
  }
  if (brightness2 == 0 || brightness2 == 255) {
    fadeAmount2 = -fadeAmount2 ; 
  }
  if (brightness3 == 0 || brightness3 == 255) {
    fadeAmount3 = -fadeAmount3 ; 
  }
  if (brightness4 == 0 || brightness4 == 255) {
    fadeAmount4 = -fadeAmount4 ; 
  }
  if (brightness5 == 0 || brightness5 == 255) {
    fadeAmount5 = -fadeAmount5 ; 
  }
  delay(sensorValue);        
  //딜레이시간을 수신받는 가변저항을 이용하여 설정 
}

이런식으로 설정해줍니다.


포트를 A0-6 을 설정하지않고 디지털 포트를 설정한 이유는

A0-6은 아날로그 수신이 가능한포트이며

디지털포트중 ~ 물결표시가 적힌 포트는 아날로그 출력이 가능한 포트입니다.


이런식으로 설정을 해주면






마지막소스는 저항에따라 켜는 갯수를 정하는것입니다. 회로는 똑같고 프로그램만 변경합니다.


int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 11;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop() {
  
  sensorValue = analogRead(sensorPin);    
  
 
  if(sensorValue == 0 ){
      digitalWrite(3, LOW);      
      digitalWrite(5, LOW);      
      digitalWrite(6, LOW);      
      digitalWrite(9, LOW);      
      digitalWrite(10, LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 0  &&  sensorValue <= 40){
      digitalWrite(3 , HIGH);      
      digitalWrite(5 , LOW);      
      digitalWrite(6 , LOW);      
      digitalWrite(9 , LOW);      
      digitalWrite(10 , LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 40  &&  sensorValue <= 80){
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, LOW);      
      digitalWrite(9, LOW);      
      digitalWrite(10, LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 80  &&  sensorValue <= 120){
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, HIGH);      
      digitalWrite(9, LOW);      
      digitalWrite(10, LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 120  &&  sensorValue <= 160){
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, HIGH);      
      digitalWrite(9, HIGH);      
      digitalWrite(10, LOW);      
      digitalWrite(11, LOW);      
  }
  else if(sensorValue > 160  &&  sensorValue <= 200){
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, HIGH);      
      digitalWrite(9, HIGH);      
      digitalWrite(10, HIGH);      
      digitalWrite(11, LOW);      
  }
  else{
      digitalWrite(3, HIGH);      
      digitalWrite(5, HIGH);      
      digitalWrite(6, HIGH);      
      digitalWrite(9, HIGH);      
      digitalWrite(10, HIGH);      
      digitalWrite(11, HIGH);      
  }
  
  delay(30);          
  
  //digitalWrite(ledPin, LOW);   
  


이런식으로 받는 값( 0 - 255 ) 를 감지해서 LED를 키는법입니다.

아날로그출력이아니라 디지털출력 그대로 사용하고 받는 값에 따라 갯수만 변경한 것입니다.




오늘은여기까지입니다.


확실히 내머리속에있는대 이걸꺼내는건 어렵내요.

ㅠㅠ


모르시는거 있으시면 꼭 리플달아주세요!!

+ Recent posts