정보나눔

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

네오픽셀에 관련된 질문입니다
송보은선 | 2015-05-29


#include <MsTimer2.h>
#include "SPI.h"
#include "WS2801.h"
int dataPin = 2;
int clockPin = 3;
int ddrPin = 7;    //압력센서핀
int stepPress = 80 ;   
long buttonPushCounter = 0;
boolean buttonState = 0; 
boolean lastButtonState = 0;
long pixelOnNumber = 0 ;
WS2801 strip = WS2801(80, dataPin, clockPin);
void setup() {
  pinMode(ddrPin, INPUT);
  Serial.begin(9600);
  strip.begin();
  strip.show();
  MsTimer2::set(50, ddrPressed);
  MsTimer2::start();
}
void loop() {
    if (buttonPushCounter <= stepPress) {
    pixelOnNumber = buttonPushCounter / (stepPress / strip.numPixels()) ;
    for (int i = 0 ; i < pixelOnNumber ; i++) {
      strip.setPixelColor(i, Color(255, 255, 0));
      strip.setPixelColor(i+40, Color(255, 255, 0));//센서를 밟았을 때마다 네오픽셀에 불이 들어오게 한다
    }
    for (int i = pixelOnNumber ; i < 40 ; i++) {  
      strip.setPixelColor(i, Color(0,0,0));
      strip.setPixelColor(i+40, Color(0,0,0));
    }
    strip.show();
     Serial.println(pixelOnNumber) ;
  } else if(buttonPushCounter > stepPress ) {
    int j;
    for (j=0; j < 256; j++) {
    for (int i = 0 ; i < strip.numPixels() ; i++) {
       strip.setPixelColor(i, Wheel( (i + j) % 255));
       strip.setPixelColor(i+40, Wheel( (i + j) % 255));     //레인보우로 바꾸려고 시도한 부분입니다. stepPress80을 채워야 레인보우가 됩니다.
    }
    strip.show();
  }
//    buttonPushCounter = 0 ;
//    pixelOnNumber = 0 ;
  } 
}
void ddrPressed() {
  buttonState = digitalRead(ddrPin);
  if (buttonState != lastButtonState) {
    if (buttonState == HIGH) {
      buttonPushCounter++;
//      Serial.print("number of ddr pressed:  ");
//      Serial.println(buttonPushCounter);
    }
  }
  lastButtonState = buttonState;
}

uint32_t Color(byte r, byte g, byte b) {
  uint32_t c;
  c = r;
  c <<= 8;
  c |= g;
  c <<= 8;
  c |= b;
  return c;
}
uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
   return Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
   WheelPos -= 85;
   return Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170; 
   return Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}
 

 안녕하세요 아두이노로 인터렉티브 작품을 만들고 있는 학생입니다

압력센서를 이용해서 20개 짜리 RGB LED 체인(네오픽셀) 4개를 제어하려고 하는데

한줄로 쭉 이어서 연결한게 아니라 40개씩 두줄로 연결해서 제어하려고 합니다.

두줄로 연결해서 제어를 해서 두줄에 동시에 불이 들어와서 40번을 밟으면 전부 다 불이 켜지게 되는데요.

41번째 스텝을 밟았을 때 레인보우로 변하게 해야하는데 어떻게 해야할까요?......

 

 

프로필사진

천세련 2015-05-30 20:38:22

회로를 어떻게 연결하셨는지 안보여주시니 잘 모르겠네요

소스로만 보자면 조건문으로 버튼 카운트 41일때  네오픽셀 레인보우 동작함수 넣어주면 되겠네요

프로필사진

Klant 2015-06-01 08:57:19

네오픽셀 라이브러리가 임포트 되지 않았네요. 

코코아팹에 링크를 참고해주세요

네오픽셀 제어하기

 

라이브러리 다운로드 링크는 다음입니다. 

다운로드 받기

이전글   |    스마트폰 센서 -> 아두이노 시리얼모니터 값... 2015-05-29
다음글   |    블루투스 마스터모듈과 슬래이브모듈 2015-05-30