로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Arduino Open Source
아듀이노 함수의 상세설명
작성자 avrtools™        
작성일 2008/08/13
Link#1 (Down:264)
ㆍ추천: 0  ㆍ조회: 4635   
  아듀이노 스위치와 LED점등
Debounce 및 Fading
참조 사이트 : http://www.arduino.cc/en/Tutorial/

제목 : LED의 밝기를 자동으로 변화시킨다 (Fading LED)
아듀이노의 PWM 출력은 매우 쉽다, 아듀이노의 소프트웨어는 PWM 함수를 내장하고 있기 때문이다,
0~100%의 펄스비(duty)의 PWM 출력을 0~100% 아날로그 출력처럼 사용할 수 있게해 준다.
 
PWM 함수의 예를 들면, analogWrite(3, 255); 라고 간단하게 함수를 호출하면, 그것으로 PWM이 출력된다.
PWM 출력이 가능한 아듀이노 기판의 디지털 포트는, D3, D5, D6, D9, D10, D11로 모두 6개의 포트가 있다.
 
 
 
작동 설명
D9~D11은 PWM 출력이 가능한 아날로그 출력겸용의 디지털 포트이다.
이 PWM 기능을 이용하여 D9, D10, D11 중에서 하나의 포트에 LED를 연결하고
천천히 LED를 점점 밝게하다가, 완전히 밝아 지면, LED를 점점 어둡게 한다, 

 

준비
M168 USB V1.0 기판에서 전원점퍼를 USB로 하고, 아듀이노 기판을 빵판의 측면에 꼽는다. 
D9~11 중에서 하나를 선택해서 (예제는 D11), D11과 GND 사이에 LED를 연결한다.
(LED의 조금 긴 다리는 Anode 이므로 PWM 포트에, 짧은 다리는 Kathod 이므로 GND에 연결)  
 
M168 USB V1.0을 USB 미니 케이블로 PC의 USB 포트에 연결한다.
FT232 드라이버가 설치된 PC는, USB 포트에 장치가 연결된 것을 알려줄 것이다.

아듀이노 개발환경(IDE) 소프트웨어인, 무설치 소프트웨어 arduino-0011.exe를 실행하고,
File > Sketch book > Examples > Analog > Fading 을 선택하면 편집창(sketch)에 소스가 나온다.

int value = 0;                            // led의 밝기를 정하는 변수
int ledpin = 11;                          // pwm을 출력하는 포트


void setup()                             // 출력은 별도의 설정이 필요없다 
{
  // nothing for setup
}
 
void loop()                              // 무한반복하는 주함수의 시작
{
  for(value = 0 ; value <= 255; value+=30) // LED를 점점 밝게 켠다 (fade in) 
  {
    analogWrite(ledpin, value);                // LED 밝기 값을 PWM으로 출력한다 (범위는 0~255를 사용) 
    delay(30);                                       // 30ms 동안 한단계의 밝기를 유지한다(이것이 없으면 너무 빨리 변화한다)
  }
  for(value = 255; value >=0; value-=30)   // led를 점점 어듑게 켠다 (fade out)
  {
    analogWrite(ledpin, value);               // LED 밝기 값을 PWM으로 출력한다 
    delay(30);                                       // 30ms 동안 한단계의 밝기를 유지한다
  } 


실행 
이때, Tools > Serial Port > COM3 (혹은 COM4)를 클릭하여 v표시가 되어야 한다.
또한, Tools > Board > Arduino Decimillas에서 v표시를 확인해야 한다.

주의, 만일 응용소스를 다른 파일에서 복사하여, 스케치 창에 붙혀넣었다면,
File > Save as 에서 새로운 이름으로 저장한 다음, Setch > Verify/Compile을 해야 한다.

Sketch > Verify/Compile을 클릭하여 소스(pde)를 실행코드(binary)로 번역(compile)하고,
File > Upload to I/O Boad를 클릭하면 아듀이노 기판으로 실행코드가 업로드된다.
잠시 후, 아듀이노 기판의 RUN-LED가 4번 빠르게 깜빡이고, 자동리셋이 된 것을 알려 줍니다.

실행코드의 업로드가 끝나고, 실험용 LED가 아듀이노 기판의 출력핀에 올바르게 연결되어 있다면,
LED Fading 실행코드가 아듀이노의 기판에서 작동하는 것을 확인할 수 있습니다. 
 
9 번, 14번 줄의 for(value = 0 ; value <= 255; value+=10) // LED를 점점 밝게 켠다 (fade in)에서
숫자 30을 10~50 으로 바꾸어 주고, 컴파일, 업로드하면, LED의 Fading 작동속도가 변화됩니다.
이 값을 너무 빠르게 하면, LED의 밝기가 너무 빠르게 변화하므로, LED를 단순히 켯다가 끄는 것처럼 보입니다.

------------------------------------------------------------------------------------------------------------------
저자 : BARRAGAN
참조 사이트 : http://people.interaction-ivrea.it/h.barragan

다음 예제는 누름 스위치를 한번 누르면 LED를 켜거나 끈다. LED가 꺼져 있으면 켜고, 켜있으면 끈다.
단추를 한번 눌러도 여러번 눌린 결과가 나오지 않도록, 입력의 접점진동을 소프트웨어에서 억제한다.
 
 

접점진동 시간을 지나서 감지하려면, 단추가 눌러졌을 때, 접촉을 계속 유지하는지 millis() 함수를 사용한다.
  

스위치 연결방법에는 Active Low와 Active High로 2 가지 방식이 있다. 
Active Low는 눌럿을 때, Low 상태로 되는 회로이며, (저항으로 포트가 Pull-down된다)
Active High는 눌럿을 때, High 상태로 되는 회로이다. (저항으로 포트가 Pull-up된다)
이 회로는, 전류를 발생하지 않는 종류의 센서도 동일하게 사용할 수 있다.   
 
 
회로도
1. 사진과 같이 아듀이노 기판의 D7과 VCC 사이에 누름스위치를 연결하고, 
2. 누름 스위치가 대기상태에서 LOW를 유지하도록 1K 저항을 D7과 GND에 연결한다.
3. 누름 스위치 작동을 확인하는 표시기로 D13과 GND 사이에 LED를 연결한다.
 
 

소스코드 
int inPin = 7; // 디지털 입력 핀 (누름 스위치를 연결한다)의 번호를 지정
int outPin = 13; // 작동확인용 출력 핀 (LED를 연결한다)의 번호를 지정 

int state = HIGH; //출력 핀의 현재 상태
int reading; // 입력 핀의 현재 상태
int previous = LOW; // 입력 핀을 읽은 과거값

// ms을 측정하기 위한 long (4 바이트) 변수
// int (2 바이트) 변수에 저장하면 빨라진다.
long time = 0; // 반전된 출력핀의 마지막 시간
long debounce = 200; // 진동억제(debounce) 시간, 출력이 깜빡이면 크게 한다.

void setup()   // 기판의 초기화 (준비)
{
pinMode(inPin, INPUT);   // D7을 입력으로 설정, 포트 번호를 바꾸려면 inPin의 변수값을 바꾸어야 한다.
pinMode(outPin, OUTPUT);  // D13을 출력으로 설정, 포트 번호를 바꾸려면 outPin의 변수값을 바꾸어야 한다.
}                 // 기판의 초기화 끝

void loop()                              // 기판의 작동 시작
{
  reading = digitalRead(inPin);   // 입력 핀을 디지털 값(HIGH 혹은 LOW)으로 읽어서 reading에 저장한다. 

 // 먼저상태 -> 접점ON 감지 -> 지연시간 -> 현재상태 -> 누름판정 -> 출력반전 -> 지금상태 저장
 // 단추를 누른다면 이상적인 입력은 LOW에서 HIGH로 된다.
 // 그러나 접점은 누를 때, 점점진동이 발생하여 엄청나게 ON-OFF를 반복한다,
 // 그러므로 접접진동이 없어질 때 까지 기다린다.


 // 즉, 입력핀이 HIGH이고, 먼저 상태가 LOW 이고, 대기시간이 debounce 값보다 크면 (설정시간이 초과되었다면)
 // if (조건) 다음의 { } 명령들을 실행한다, 아니면 { }를 실행하지 않는다.
 // (A && B && C)는 A와 B와 C의 조건을 모두 만족해야 조건을 충족한다,

 // 다시 말하면, && 연산자는 비교조건을 동시에 여러개 설정할 수 있게 한다.
 
// 복수조건의 비교조건 안에서, millis() 함수를 직접 호출하고, 그 결과를 &&로 비교하고 있다.
if (reading == HIGH && previous == LOW && millis() - time > debounce)   
 {
   // 반전 출력
   if (state == HIGH) state = LOW;  // 만일 state가 HIGH 이면 LOW로 만든다  
   else state = HIGH;                   // 만일 state가 LOW 이면 HIGH로 만든다 

   // 지금까지 진행된 타이머 값(millis =이번에 단추가 눌린 시간)을 저장한다
   // 다음번에 과거 시간값으로 이용하기 위한 것.
   // millis()는 ms을 측정하는 시간측정 함수이다. 
   // 당연히 millis() 함수의 정의가 이 소스안에 있어야 한다.
   time = millis();                       // time = 현재의 millis가 과거에 단추가 눌린 시간으로 저장된다. 
 }

digitalWrite(outPin, state);           // 결정된 출력상태를 비로서 디지털 포트에 출력한다 
previous = reading;                    // 지금의 입력핀 상태를 과거의 입력핀 상태로 저장한다.
}                                              // 기판의 작동 끝 (작동시작으로 돌아 간다)    

------------------------------------------------------------------------------------------------------------------제목 : Loop
참조 사이트 : http://www.arduino.cc/en/Tutorial/Loop
 
이 예제는 추억의 TV 연속극  "Knight Rider"라 부르는 것이다. 80 년대에 유명한 David Hasselhoff가
그의 Pontiac 차량에 달고 다녔다. 자동차는 깜빡이는 재주를 부리는 LED로 가득 했었다.
기판을  "Knight Rider" 처럼 재미있게 쓰기위해, 시간차 제어는 좋은 프로그램 기술이라고 생각된다.
 
이 예제는 6개의 LED를 D2~D7에서 빵판으로 220옴 저항을 연결하여 만들었다.
첫번째 예는, 하나 하나  digitalWrite(pinNum,HIGH/LOW)와 delay(time)을 써서, LED를 순차적으로 깜빡일 것이다.  
두번째 예는 for(;;) 구문과 매우 비슷한 기능을 어떻게 사용하는가 이다. 그러나 불과 몇 줄이다.
세번째 마지막 예는, LED의 점등/소등을 소프트웨어적으로 가시효과를 집중시킨다.
  
회로
 
 
  
용응소스
int timer = 100;                   // The higher the number, the slower the timing.
int pins[] = { 2, 3, 4, 5, 6, 7 }; // an array of pin numbers
int num_pins = 6;                  // the number of pins (i.e. the length of the array)

void setup()
{
  int i;

  for (i = 0; i < num_pins; i++)   // the array elements are numbered from 0 to num_pins - 1
    pinMode(pins[i], OUTPUT);      // set each pin as an output
}

void loop()
{
  int i;

  for (i = 0; i < num_pins; i++) { // loop through each pin...
    digitalWrite(pins[i], HIGH);   // turning it on,
    delay(timer);                  // pausing,
    digitalWrite(pins[i], LOW);    // and turning it off.
  }
  for (i = num_pins - 1; i >= 0; i--) {
    digitalWrite(pins[i], HIGH);
    delay(timer);
    digitalWrite(pins[i], LOW);
  }
}

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA

 AVRTOOLS™
   
  0
9999
윗글 아듀이노 shiftOut
아래글 아듀이노의 주파수 출력 함수
    N         제목    글쓴이 작성일 조회 추천
판매상품의 사용설명서는 다른 자료실에,,, avrtools™ 2011/08/30 (화) 1461 0
23 LCD 문자표시 (신형) avrtools™ 2012/04/12 (목) 2101 0
22 아듀이노 멜로디 연주 avrtools™ 2008/08/22 (금) 3454 0
21 아듀이노 4비트 LCD (구형) avrtools™ 2008/09/02 (화) 4302 0
20 아듀이노 가변저항 avrtools™ 2008/08/26 (화) 3073 0
19 직렬 데이터 이동(shift) 출력 avrtools™ 2012/04/10 (화) 1711 0
18 디지털 신호의 펄스폭을 측정하는 함수 avrtools™ 2012/04/10 (화) 1973 0
17 EEPROM 읽기, 쓰기 함수 avrtools™ 2012/04/10 (화) 2281 0
16 변수의 크기 avrtools™ 2012/04/10 (화) 1613 0
15 플레시 메모리에 상수를 저장하고 읽는 함수 avrtools™ 2012/04/10 (화) 1897 0
14 소프트웨어 Serial 함수 avrtools™ 2012/04/10 (화) 1793 0
13 아듀이노 터치스위치 [3] avrtools™ 2008/08/11 (월) 4104 0
12 아듀이노 shiftOut avrtools™ 2008/09/10 (수) 3364 0
11 아듀이노 스위치와 LED점등 avrtools™ 2008/08/13 (수) 4635 0
10 아듀이노의 주파수 출력 함수 avrtools™ 2009/10/20 (화) 2736 0
9 One Button Switch Library avrtools™ 2012/03/09 (금) 1841 0
8 아듀이노 논리연산 avrtools™ 2008/08/26 (화) 3005 0
7 아듀이노 PS2 키보드 읽기 avrtools™ 2008/09/10 (수) 4072 0
6 아듀이노 가로채기 함수 avrtools™ 2008/08/23 (토) 3185 0
5 아듀이노 전용명령 avrtools™ 2008/09/16 (화) 3914 0
4 아듀이노 PWM 출력과 타이머1 전용명령 avrtools™ 2008/08/19 (화) 3562 0
3 8비트 포트의 단일비트 조작방법 avrtools™ 2010/10/30 (토) 2365 0
2 직렬포트에서 문자를 받아 숫자 int로 저장 avrtools™ 2012/04/08 (일) 1682 0
1 직렬통신포트의 초기화 avrtools™ 2012/04/06 (금) 1468 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0