질문게시판 > 네오픽셀 버튼 조합

TODAY1,153 TOTAL1,448,397
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 네오픽셀 버튼 조합

페이지 정보

작성자 지수 작성일2021-01-04 20:11 조회63회 댓글7건

본문

	

네오픽셀이랑 버튼을 조합해서 만들려고 하는데요 버튼을 누를때마다 색깔이랑 패턴들이 달라집니다

시작한지 얼마안되서 인터넷 뒤져가지고 조합하긴 했는데 안되네요... 고쳐야 될부분좀 알려주시면 감사하겠습니다

 

#include <Adafruit_NeoPixel.h>

 

#define PIN 3

 

//네오픽셀을 사용하기 위해 객체 하나를 생성한다.

//첫번째 인자값은 네오픽셀의 LED의 개수

//두번째 인자값은 네오픽셀이 연결된 아두이노의 핀번호

//세번째 인자값은 네오픽셀의 타입에 따라 바뀌는 flag

Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);

 

#define BUTTON_pin 2   // 버튼을 2번 핀에 연결

bool BUTTON_flag = false;  // 버튼 플래그

 

int colorWipe;

int theaterChase;

int rainbow;

int rainbowCycle;

int theaterChaseRainbow;

 

void setup() {

  pinMode(BUTTON_pin, INPUT); // 입력으로 설정

  strip.begin(); //네오픽셀을 초기화하기 위해 모든LED를 off시킨다

  strip.show();

}

 

void loop() {

  //아래의 순서대로 NeoPixel을 반복한다.

  colorWipe(strip.Color(0, 255, 255), 50); //빨간색 출력

  colorWipe(strip.Color(0, 255, 0), 50); //녹색 출력

  colorWipe(strip.Color(0, 0, 255), 50); //파란색 출력

 

  theaterChase(strip.Color(127, 127, 127), 50); //흰색 출력

  theaterChase(strip.Color(0,   127, 127), 50); //빨간색 출력

  theaterChase(strip.Color(  0,   0, 127), 50); //파란색 출력

 

  //화려하게 다양한 색 출력

  rainbow(20);

  rainbowCycle(20);

  theaterChaseRainbow(50);

 

  if (digitalRead(BUTTON_pin) == 1)

  { //NeoPixel에 달린 LED를 각각 주어진 인자값 색으로 채워나가는 함수

    void colorWipe(uint32_t c, uint8_t wait) {

      for (uint16_t i = 0; i < strip.numPixels(); i++) {

        strip.setPixelColor(i, c);

        strip.show();

        delay(wait);

      }

    }

  }

  if (digitalRead(BUTTON_pin) == 2)

  { //모든 LED를 출력가능한 모든색으로 한번씩 보여주는 동작을 한번하는 함수

    void rainbow(uint8_t wait) {

      uint16_t i, j;

 

      for (j = 0; j < 256; j++) {

        for (i = 0; i < strip.numPixels(); i++) {

          strip.setPixelColor(i, Wheel((i + j) & 255));

        }

        strip.show();

        delay(wait);

      }

    }

  }

  if (digitalRead(BUTTON_pin) == 3)

  { //NeoPixel에 달린 LED를 각각 다른색으로 시작하여 다양한색으로 5번 반복한다

    void rainbowCycle(uint8_t wait) {

      uint16_t i, j;

 

      for (j = 0; j < 256 * 5; j++) {

        for (i = 0; i < strip.numPixels(); i++) {

          strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));

        }

        strip.show();

        delay(wait);

      }

    }

  }

  if (digitalRead(BUTTON_pin) == 4)

  { //입력한 색으로 LED를 깜빡거리며 표현한다

    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) {

            strip.setPixelColor(i + q, c);  //turn every third pixel on

          }

          strip.show();

 

          delay(wait);

 

          for (int i = 0; i < strip.numPixels(); i = i + 3) {

            strip.setPixelColor(i + q, 0);      //turn every third pixel off

          }

        }

      }

    }

  }

  if (digitalRead(BUTTON_pin) == 5)

  { //LED를 다양한색으로 표현하며 깜빡거린다

    void theaterChaseRainbow(uint8_t wait) {

      for (int j = 0; j < 256; j++) {   //256가지의 색을 표현

        for (int q = 0; q < 3; q++) {

          for (int i = 0; i < strip.numPixels(); i = i + 3) {

            strip.setPixelColor(i + q, Wheel( (i + j) % 255));

          }

          strip.show();

 

          delay(wait);

 

          for (int i = 0; i < strip.numPixels(); i = i + 3) {

            strip.setPixelColor(i + q, 0);

          }

        }

      }

    }

  }

}

//255가지의 색을 나타내는 함수

uint32_t Wheel(byte WheelPos) {

  if (WheelPos < 85) {

    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

  } else if (WheelPos < 170) {

    WheelPos -= 85;

    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

  } else {

    WheelPos -= 170;

    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

  }

}

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 7

조회수 63

master님의 댓글

master 작성일

#include <Adafruit_NeoPixel.h> //네오픽셀을 사용하기 위해 객체 하나를 생성한다.
#define PIN 3
//첫번째 인자값은 네오픽셀의 LED의 개수
//두번째 인자값은 네오픽셀이 연결된 아두이노의 핀번호
//세번째 인자값은 네오픽셀의 타입에 따라 바뀌는 flag
Adafruit_NeoPixel strip=Adafruit_NeoPixel(24,PIN,NEO_GRB+NEO_KHZ800);
//
#define BUTTON_pin 2  // 버튼을 2번 핀에 연결
//
bool BUTTON_flag=0; // 버튼 플래그
//
int mode=0;
//
void setup(){
  pinMode(BUTTON_pin,INPUT); // 입력으로 설정
  strip.begin(); //네오픽셀을 초기화하기 위해 모든LED를 off시킨다
  strip.show();
}
//
void loop(){
  if(digitalRead(BUTTON_pin)){
    if(BUTTON_flag==0){ BUTTON_flag=1;
      if(++mode>8)mode=0;
    }
  }
  else{ BUTTON_flag=0; }
  //-----------------------------------------------------------
  if    (mode==0)colorWipe(strip.Color(0,255,255),50); //빨간색 출력
  else if(mode==1)colorWipe(strip.Color(0,255,  0),50); //녹색 출력
  else if(mode==2)colorWipe(strip.Color(0,  0,255),50); //파란색 출력
  else if(mode==3)rainbow(20);      //모든 LED를 출력가능한 모든색으로 한번씩 보여주는 동작을 한번하는 함수
  else if(mode==4)rainbowCycle(20); //NeoPixel에 달린 LED를 각각 다른색으로 시작하여 다양한색으로 5번 반복한다
  else if(mode==5)theaterChase(strip.Color(127,127,127),50); //흰색 출력
  else if(mode==6)theaterChase(strip.Color(  0,127,127),50); //빨간색 출력
  else if(mode==7)theaterChase(strip.Color(  0,  0,127),50); //파란색 출력
  else if(mode==8)theaterChaseRainbow(50); //LED를 다양한색으로 표현하며 깜빡거린다
}
//
void colorWipe(uint32_t c,uint8_t wait){
  for(uint16_t i=0;i<strip.numPixels();i++){ strip.setPixelColor(i,c); strip.show(); delay(wait); }
}
//
void rainbow(uint8_t wait){
  uint16_t i,j;
  for(j=0;j<256;j++){
    for(i=0;i<strip.numPixels();i++)strip.setPixelColor(i,Wheel((i+j)& 255));
    strip.show();
    delay(wait);
  }
}
//
void theaterChase(uint32_t c,uint8_t wait){ //입력한 색으로 LED를 깜빡거리며 표현한다
  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)strip.setPixelColor(i+q,c); //turn every third pixel on
      strip.show();
      delay(wait);
      for(int i=0;i<strip.numPixels();i=i+3)strip.setPixelColor(i+q,0); //turn every third pixel off
    }
  }
}
//
void rainbowCycle(uint8_t wait){
  uint16_t i,j;
  for(j=0;j<256*5;j++){
    for(i=0;i<strip.numPixels();i++)strip.setPixelColor(i,Wheel(((i*256/strip.numPixels())+j)&255));
    strip.show();
    delay(wait);
  }
}
//
void theaterChaseRainbow(uint8_t wait){
  for(int j=0;j<256;j++){ //256가지의 색을 표현
    for(int q=0;q<3;q++){
      for(int i=0;i<strip.numPixels();i=i+3)strip.setPixelColor(i+q,Wheel((i+j)% 255));
      strip.show();
      delay(wait);
      for(int i=0;i<strip.numPixels();i=i+3)strip.setPixelColor(i+q,0);
    }
  }
}
//255가지의 색을 나타내는 함수
uint32_t Wheel(byte WheelPos){
  if    (WheelPos< 85){ return strip.Color(WheelPos*3,255-WheelPos*3,0); }
  else if(WheelPos<170){ WheelPos-= 85; return strip.Color(255-WheelPos*3,0,WheelPos*3); }
  else                { WheelPos-=170; return strip.Color(0,WheelPos*3,255-WheelPos*3); }
}

지수님의 댓글

지수 댓글의 댓글 작성일

답변 감사합니다!
버튼을 누르면 mode4번까지는 잘 가는데 mode5번으로는 잘 안넘어 가네요 이건 어떻게 해결해야하나요??
채터링 문제인가요?

master님의 댓글

master 작성일

void rainbowCycle(uint8_t wait){
  uint16_t i,j;
  for(j=0;j<256*5;j++){
    for(i=0;i<strip.numPixels();i++)strip.setPixelColor(i,Wheel(((i*256/strip.numPixels())+j)&255));
    strip.show();
    delay(wait);
    if(digitalRead(BUTTON_pin)){ return; } else{ BUTTON_flag=0; } // <--- 추가
  }
}

지수님의 댓글

지수 작성일

if(digitalRead(BUTTON_pin)){ return; } else{ BUTTON_flag=0; }를 추가했는데 버튼을 안눌러도 5번으로 넘어가네요 버튼을 누르면 다시 4번이 시작되고요..
해결해 볼려고 했는데 잘 안되서 다시 질문 드립니다... 번거롭게 해서 죄송합니다

master님의 댓글

master 댓글의 댓글 작성일

스위치에 풀다운 저항을 사용하고 있나요?

지수님의 댓글

지수 댓글의 댓글 작성일

네 풀다운 저항을쓰고있어요

master님의 댓글

master 댓글의 댓글 작성일

스위치 회로도 첨부해보세요

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 2677
공지 사이트 이용 안내댓글[16] master 17-10-29 14822
공지 [무료 공개] 소스코드 하이라이트 v2.0 beta [2013.02.07]댓글[1] 이미지첨부파일 master 18-01-23 5663
질문 블루투스와 터치센서 질문드립니다~!!!! 새글 YMKIM 21-01-15 19
답변 답변글 답변 : 블루투스와 터치센서 질문드립니다~!!!! 새글 master 05:40 4
질문 ATmega128 LED 탑쌓기 반대방향 질문입니다.댓글[1] 새글 쩡쩡쭁 21-01-15 26
질문 아두이노 if에서 다른 버튼으로 else if 혹은 else로 넘어갔을때 오류입니다.댓글[5] 이미지새글첨부파일 LoadRian 21-01-14 19
질문 센싱 데이터 sd카드 저장 관련 코드 질문 드립니다.댓글[1] 첨부파일 우끼우기 21-01-13 21
질문 아두이노 서보모터 다중제어 질문드립니다.댓글[1] 서보모토능력자 21-01-12 45
질문 아두이노 MCP2515 CAN Module 을 통한 CAN data 전송댓글[1] 이미지첨부파일 흠압지 21-01-11 26
질문 유아전동차 블루트스 컨트롤+MP3댓글[2] kenneth 21-01-09 33
질문 디버깅하는데 입출력 코드에서 자꾸 멈춰요댓글[1] 이미지첨부파일 한입만 21-01-07 43
질문 UV LED 를 제어하는 함수는 없나요???댓글[1] 한입만 21-01-06 50
현재글 네오픽셀 버튼 조합댓글[7] 지수 21-01-04 64
질문 아두이노 블루투스 모듈이랑 연결을 시도했을 때 안되요.댓글[3] 첨부파일 ONCE원스 20-12-31 119
질문 아두이노 for문에 random함수 가능한지 질문입니다!댓글[3] 호식이 20-12-30 86
질문 조도센서에 millis()로 특정부분 반복가능한가요?댓글[2] 그릇 20-12-29 78
질문 아트메가168 업로드 문제 아두이노배우기 20-12-29 57
질문 아두이노 조도센서와 RGB 3색 LED 4핀센서댓글[1] 해위 20-12-29 81
질문 아두이노 온습도센서 질문입니다.댓글[1] 랩돌이 20-12-28 92
질문 아두이노 깨짐현상댓글[3] 이미지첨부파일 ginnie92 20-12-28 101
질문 nodemcu 와이파이연결 질문입니다 !댓글[1] 꿈꾸는자 20-12-27 64
질문 millis()함수로 led와 버튼 제어가능할까요?댓글[4] 요식 20-12-23 138
질문 버튼과 led 제어 질문있습니다..댓글[3] 지우개 20-12-21 131
질문 led제어질문 있습니다..댓글[2] 이미지첨부파일 핑핑 20-12-19 108
질문 초음파 센서 질문입니다.댓글[1] 슬레이브 20-12-19 102
질문 코드 해석에 관한 질문입니다.댓글[1] 슬레이브 20-12-19 76
질문 atmega128 질문입니다!댓글[1] 슬레이브 20-12-19 120
질문 atmega128 질문드립니다.댓글[3] 하늘하늘 20-12-19 178
질문 아두이노 코딩 수정 질문입니다댓글[1] 이미지 붉은돼지 20-12-18 92
게시물 검색

2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기