정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 네오픽셀 Ring과 Stripe 동시제어관련 도와주세요 ㅠㅠ 제발 ㅠㅠ
박슬기 | 2018-08-11

 

 

1. 프로젝트 사용한 보드 종류

   아두이노 UNO

 

 

2. 사용한 개발 프로그램명

   아두이노 IDE

 

 

3. 사용한 센서 모델명

    네오픽셀 스트립 RGBW , 네오픽셀 링 RGBW LED8개짜리

 

 

4. 연결한 회로 설명 (또는 이미지)

   

 

 

5. 소스코드 (주석 필수)

  

// 네오픽셀 ring과 Stripe 타입 동시 제어 

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

// 이 아래 적는 것은 링입니다. strip
#define PIN 6 // 네오픽셀 연결 디지털 핀 번호 적기
#define NUM_LEDS 8 // 네오픽셀 소자 수

// 이 아래 적는 것은 스트립입니다. pixels
#define PIN 3 // 네오픽셀 연결 디지털 핀 번호 적기
#define NUMPIXELS 8 // 네오픽셀 소자 수

//네오픽셀의 밝기 조절
#define BRIGHTNESS 100 // 네오픽셀 밝기 설정 0(어두움) ~ 255(밝음)

//네오픽셀 라이브러리 불러오기 링과 스트립을 같이 제어할꺼라 strip과 pixels로 구분을 지었습니다.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, 6, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, 3, NEO_GRBW + NEO_KHZ800);

int delayval = 8000; // delay 시간 

void setup() {
  strip.setBrightness(BRIGHTNESS);
  strip.begin(); // 네오픽셀 제어 시작
  }

void loop() {
  //링에대한 제어 strip
  // 0번 핀부터 8번핀까지 delay1000으로 화이트 불이 켜지게
  for(int i=0;i<NUM_LEDS;i++){

    // strip.Color takes RGBW values, from 0,0,0 up to 255,255,255
    strip.setPixelColor(i, pixels.Color(0,0,0,150)); // white color.불이 점등

    strip.show();
  delay(1000);
  }
  //0번핀의 LED를 블루 나머지를 화이트로 켜기
  delay(3000);
  strip.setPixelColor(0,0,0,255,0); 
  strip.setPixelColor(1,0,0,0,150); 
  strip.setPixelColor(2,0,0,0,150); 
  strip.setPixelColor(3,0,0,0,150); 
  strip.setPixelColor(4,0,0,0,150); 
  strip.setPixelColor(5,0,0,0,150); 
  strip.setPixelColor(6,0,0,0,150); 
  strip.setPixelColor(7,0,0,0,150);  
  strip.show();// 네오픽셀 점등
  //2번핀의 LED를 블루 나머지를 화이트로 켜기
  delay(8000);
  strip.setPixelColor(0,0,0,0,150); //3번핀에 블루를 키겠다.
  strip.setPixelColor(1,0,0,0,150); //3번핀에 블루를 키겠다.
  strip.setPixelColor(2,0,0,255,0); //3번핀에 블루를 키겠다.
  strip.setPixelColor(3,0,0,0,150); //3번핀에 블루를 키겠다.
  strip.setPixelColor(4,0,0,0,150); //3번핀에 블루를 키겠다.
  strip.setPixelColor(5,0,0,0,150); //3번핀에 블루를 키겠다.
  strip.setPixelColor(6,0,0,0,150); //3번핀에 블루를 키겠다.
  strip.setPixelColor(7,0,0,0,150); //3번핀에 블루를 키겠다. 
  strip.show();
  delay(8000);

  //스트립에 대한 제어 pixels
    // 10초후 네오픽셀 LED가 'delayval=8000'마다 하나씩 켜진다.
  delay(10000);
   for(int i=0;i<NUMPIXELS;i++){

    // pixels.Color takes RGBW values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,0,0,150)); // 햐얀색 불을 켜겠다.

    pixels.show(); // 네오픽셀 점등
    if(i==5) {break;}
    else {delay(delayval);} // dealy(delayval)을 주는건 5번핀 까지만
    }
  // LED가 아래의 컬로로 깜빡이면서 반짝인다.
  delay(3000);
  theaterChase(pixels.Color(0, 0, 0, 127), 90); //깜빡이면서 흰색 출력 90은 딜레이로 이게 어느정도 시간동안 깜빡이는지에대한제어
  colorWhipe(pixels.Color(0,0,0,127),0); //깜빡임 후 불이 다 붉은색으로 변함
  delay(3000);
  colorWhipe(pixels.Color(0,0,0,0),0); //깜빡임 후 불이 동시에 꺼진다.
  delay(10000);

}


// 아래부터는 스트립에 쓰인 함수 설명
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        pixels.setPixelColor(i+q, c);    //turn every third pixel on
      }
      pixels.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

void colorWhipe(uint32_t c, uint8_t wait){
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      pixels.setPixelColor(i, c);
      pixels.show();
  }
}

 

 

6. 문제점 및 에러 내용

  소스코드는 에러가 뜨지 않는데ㅠㅠ 정작 작동을 하질 않습니다. 

네오 픽셀을 같은 종류의 네오 픽셀은 여러개를 쓸경우 납뗌으로 서로를 연결해서 제어LED수를 늘려 

제어하는 것 같았는데요. 저 같은 경우에는 아예 타입이 달라....타입이 다른 경우의 예제를 찾지 못해 코딩을 

이식으로 했었습니다.

[링만 불이 들어와요 ㅠㅠ 스트립은 들어오지 않습니다. ㅠㅠ]

프로필사진

kocoafabeditor 2018-08-13 09:49:22

안녕하세요.

 

우선 회로쪽은 크게 문제 없는것 같고, 소스코드만 봤을 때,

 

setup()함수 안에 strip.begin() 은 있는데, pixels.begin() 부분은 없는것 같습니다.

 

pixel 객체가 3번핀에 연결된 네오 스트립인듯 하니 아마 begin함수가 선언되지 않아 동작을 하지 않는 것 같습니다. 

 

한번 추가한 후 다시 확인해보세요.

이전글   |    오렌지보드 BLE와 라즈베리파이3 B모델간 블루투스통신에 관해서 질문드립니다... 2018-08-06
다음글   |    LED를 이용한 화살표 2018-08-12