Мазмуну:

Жарыкты тартыңыз - Жарык модулу Neopixel & Pull Up Switch аркылуу: 6 кадам (Сүрөттөр менен)
Жарыкты тартыңыз - Жарык модулу Neopixel & Pull Up Switch аркылуу: 6 кадам (Сүрөттөр менен)

Video: Жарыкты тартыңыз - Жарык модулу Neopixel & Pull Up Switch аркылуу: 6 кадам (Сүрөттөр менен)

Video: Жарыкты тартыңыз - Жарык модулу Neopixel & Pull Up Switch аркылуу: 6 кадам (Сүрөттөр менен)
Video: ESP32 Tutorial 47 - WS2812 CheerLights using MQTT over Internet | SunFounder's ESP32 IoT Learnig kit 2024, Июль
Anonim
Image
Image
Жарыкты тартыңыз - Жарык модулу Neopixel & Pull Up Switch колдонуп
Жарыкты тартыңыз - Жарык модулу Neopixel & Pull Up Switch колдонуп

Жарык модулунун өзгөчөлүктөрү

  • Arduino Uno
  • Аппаратура жана корпус интернеттен сатылып алынган
  • Neopixel & Power булагы Информатика жана Продукт Дизайн мектебинен алынган
  • Жарык модулу энергия менен камсыздалат
  • Бардык функциялар колдонуучулардын өз ара аракеттенүүсү аркылуу көзөмөлдөнөт
  • Неопикселдик тилкенин анимация түрлөрү: Жамгырдын түрү, Душтун түрү, Учкундун чагылган түрү, Поптун түрү, Туура эмес түрү
  • Тартуу которгуч Neopixel тилкесине туташкан жана Neopixel тилкеси тартылганда анимация өзгөрөт

1 -кадам: Баштоодон мурун

Баштоодон мурун
Баштоодон мурун

Саламатсыздарбы Инструкторлор жана жаратуучулар.

Биз жарыктын анимациясы аркылуу жамгырдын эмоциясын сезе алсак, эмне болорун интерактивдүү долбоорлоо долбоорун баштадык. Колдонуучунун сезгичтиги жарыкты түз тарткан интерфейс аркылуу максималдуу болот деп ойлогом.

Жумушка кирбесин

2 -кадам: Бөлүктөр керек

Тетиктер керек
Тетиктер керек
Тетиктер керек
Тетиктер керек
Тетиктер керек
Тетиктер керек

Бир Жарык модулуна негизделген

*** Неопикселдер жана Электр энергиясы менен камсыздоо бөлүмүбүздүн колдоосу менен колдонулду. ***

Электроника:

  1. Arduino Uno
  2. 3 түстүү зым (Кара, Кызыл, каалаган түс)
  3. 3pin туташтыргычы (сатып алуу үчүн шилтеме)
  4. 1 -которгучту тарткыла (сатып алуу үчүн шилтеме)
  5. кыскарган түтүк
  6. WS2812b кошулуучу LED тилкеси 74 LED менен (Neopixel тилкеси)*2
  7. Электр менен камсыздоо (5V 350A) 1

*** 50 комплект Arduino, Pull Switch жана NeoPixels үчүн керек. ***

Аппараттык:

  1. Акрил тилкеси 2t (10мм*1000мм) 1
  2. Акрил такта 5t (60mm*60mm) 1
  3. Foemax 10t (1200мм*1800мм) 1
  4. Кара спрей
  5. Кабелдик галстук
  6. Стринг
  7. Hardboard
  8. Тор тактасы

3 -кадам: Байланыш жана Аппаратты куруу

Байланыш жана Аппаратты куруу
Байланыш жана Аппаратты куруу
Байланыш жана Аппаратты куруу
Байланыш жана Аппаратты куруу
Байланыш жана Аппаратты куруу
Байланыш жана Аппаратты куруу

Биринчиден, бизге бир жарык модулун жасоо үчүн акрил кесүү керек.

  • Жарыктын анимациясын башынан өткөрүүнүн каражаты катары 1М аянты бар 2 мм коюу акрил тилкесине неопикселдик тилке түрүндө 74 светодиодду орнотуу менен бекитилген жарык модулун иштеп чыгыңыз. Биз жарык модулдарынын эки түрүн чыгардык: типтүү сызыктуу жана спираль.
  • Сызыктуу типтер үчүн учурдагы неопикселдик тилкелерди кармап, коргоого болот, бирок спираль түрлөрү кол менен иштөөнү талап кылат. 74 LEDдин ар бири бөлүктөргө бөлүнүп, спираль акрилге тиркелет жана коргошун менен бириктирилет.

Neopixel тилкесин акрилге бекитип, ар бир тилкени ысыктан жайылып кетпеши үчүн бекемдеңиз же балыкты жука жип менен байлаңыз. Сызыктуу типтеги учурда, модулдун аягына тартылышы керек болгон сфера эстетикалык көрүнүштү иштеп чыгуу үчүн орнотулган жана биз кара спрей менен стол тенниси боюнча топту бүтүрдүк. Андан кийин алар теннис боюнча топту кичинекей тешип, аны жип менен туташтырышты. Кийинки эң маанилүү бөлүк, коммутатор жана неопиксел, көрсөтүлгөндөй туташкан. Андан кийин которгуч шыптын текчесине бекитилет.

Спираль түрүндө, спираль модулун түз тартуу акрилди кысым астында сындырып алуу коркунучу бар, ошондуктан тартуу бөлүмү (Киргизүү) менен модуль (Чыгуу) бөлүнгөн. Жарыкты түшүрүү максимуму үчүн модулдар шыпка вертикалдуу орнотулган, сызыктуу модулдар абага, спиральдар шыпка түз бекитилген. Ал эми биз иштей алышы үчүн стол тенниси менен топту балык линиясына туташтырдык.

Жогоруда сүрөттө көрсөтүлгөндөй акрил кесүү текчеге которууну камсыздоо үчүн керек. 6см квадрат формасындагы которгучтун калыңдыгы 5 мм, которгучту борборлоштуруп, эки жактын тешиктеринен кабелдик галстукту туташтыргычты бекем бекитүү үчүн. Борбордун ылдый жагындагы тегерек тешик которгучтун тартылышын ачыкка чыгарат, анын астына модулдун кабелдик терминалына үч зымдуу кабель тартылып, туташтырылган. Жана ошондой эле, төрт бурчтагы тешик аркылуу текче менен акрил кабелдик галстуктар менен бекитилет. Жогоруда айтылгандай, сызыктуу модуль тартууга түз туташат, бирок спираль модулу пинди жана которгучту өзүнчө туташтырат.

4 -кадам: 50 Light модулдарын колдонуу менен түзүү

50 Light модулдарын колдонуу менен түзүү
50 Light модулдарын колдонуу менен түзүү
50 Light модулдарын колдонуу менен түзүү
50 Light модулдарын колдонуу менен түзүү
50 Light модулдарын колдонуу менен түзүү
50 Light модулдарын колдонуу менен түзүү

Биз жалпысынан 50 модулду жайылтуу менен бай жарык үчүн колдонуучу тажрыйбасын иштеп чыктык

Бизде 1, 800мм туурасы жана 1, 200мм текчеси бар болчу жана биз ар бир которгучту жана модулду туташтырдык, ошондо сиз биз пландаштырган жамгыр менен жамгырдын чөйрөсүн сезе алдык жана ар бир модулда көп тапшырманы иштетүү үчүн жалгыз турдук..

Дизайн чиймесине жараша, орнотууну жашыруу жана LED модулунун туташтырылган аймагы көрүнбөө үчүн foemaxке тегерек тешик бургуланган. Акрил тактасынан LED модулунун туташуусуна чейинки аралык 1смге жакын болгондуктан, калыңдыгы 1 см болгон фемакс колдонулган.

Металл чарчы алкак жалпы салмагын жана тең салмактуулугун сактоодо бурамалар жана кабелдик галстуктар менен бирге орнотууну өткөрүү үчүн колдонулган. Эгерде ачык байланыштардын узундугу жаратуучу аракет кылганда андан көп болсо, калыңыраак такта эффективдүү эмес жана башка структуралар сунушталат.

Колдонуучунун тажрыйбасын көз деңгээлинде жеңилдетүү үчүн, аяктаган орнотуу болжол менен 2 м бийиктиктеги таянычка коюлат, бирок этият болуңуз, кыстарылган LED модулун орнотуу өтө түйшүктүү, ошондуктан бардык байланыштарды алып салуу керек. Биз тепкичке өйдө көтөрүлүп, модулду тирөөчкө бекитилген орнотуу менен туташтырдык.

Бул процесстин эң маанилүү бөлүгү - бул тажрыйбанын коопсуз чөйрөдө мүмкүн болушун камсыз кылуу үчүн иштин коопсуз жана толук камсыз кылынышын камсыз кылуу

Жалпысынан 10 arduino жана 50 LED модулдары колдонулду жана беш LED модулу бир эффективдүү жана үзгүлтүксүз көп тапшырма үчүн ардуино күнүнө туташты. Чоо -жайын билүү үчүн тиркелген планды караңыз. Дизайн схемасына ылайык толук которууну колдонуп Neopixel көп тапшырмалуу коддоо кийинки кадамда кеңири талкууланат.

5 -кадам: Arduino Coding & Wiring

Arduino Coding & Wiring
Arduino Coding & Wiring
Arduino Coding & Wiring
Arduino Coding & Wiring

Электр өткөргүчтөрү

  • 50 -модуль 4 -кадамдын схемасына ылайык туташтырылган.
  • Ар бир модуль көп тапшырманы иштетүү жана так байланышты камсыз кылуу үчүн 50 модулдун 10 топтомуна бөлүнгөн.
  • Жогорудагы 1 сүрөттө көрсөтүлгөндөй, беш модуль бир ардуиного туташтырылган жана 5в неопикселдин төөнөгүчтөрү электр энергиясын туташтыруу үчүн дароо бириктирилген.
  • Неопикселдердин жана коммутаторлордун GND да бири -бирине байланган жана кабылдоону жеңилдетүү үчүн, өчүргүчтөр 2, 3, 4, 5, 6 төөнөгүчтөргө, неопикселдер 9, 10, 11, 12, 13 төөнөгүчтөргө сайылган..
  • Коммутаторлор жана неопикселдер 2-9, 3-10, 4-11, 5-12, 6-13 жолдор менен туташкан.
  • Белгилей кетсек, линиялардын туташуусу татаал болгондуктан жана кыска туташуудан улам өрт коркунучу бар болгондуктан, алсыз бөлүктөрү сынып калбашы үчүн кичирейүүчү түтүк жылытылган.

Неопиксел көп функциялуу, которуштуруучу которгуч менен

5 жарык анимациясы (Жамгырдын түрү, Душтун түрү, Учкундун чагылган түрү, Поптун түрү, Туура эмес түрү)

#кошуу

/*사용 하고자 하는 패턴 을 추가 함*/

enum үлгү {NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, TWINKLE, STAR, RAINBOWSPARKLE, METEOR, LIGHT, BLOSSOM}; /*네오 픽셀 을 방향 을 설정 함*/ enum багыты {АЛГА, АРТКА};

/*패턴 의 클래스 를 입력 함*/

класс NeoPatterns: public Adafruit_NeoPixel { /* 패턴 을 추가 하고 업데이트 위 위 함수 public* / public: pattern ActivePattern; /*클레스 함수 에 패턴 의 방향 을 입력*/ багыт Багыт;

/*변수 Interval 을 추가*/ unsigned long Interval; /*변수 lastUpdate 를 추가*/ unsigned long lastUpdate; /*변수 Color1, Color2 를 추가*/ uint32_t Color1, Color2; /*변수 TotalSteps 를 추가*/ uint16_t TotalSteps; /*변수 Индекс 를 추가*/ uint16_t Индекс;

/*패턴 을 완료 했을 시 다시 불러오는 함수*/ void (*OnComplete) (); /*네오 패턴 네오 네오 픽샐 의 갯수, 핀 번호, 타입, 타입 을 불러오는/*/ NeoPatterns (uint16_t пиксел, uint8_t пин, uint8_t түрү, void (*кайра чалуу) ()): Adafruit_NeoPixel (пиксел, пин, түрү) { OnComplete = кайра чалуу; }

/*패턴 을 업데이트 하기 위한 케이스 구문*/

void Update () { /*패턴 의 시간 설정. 멀티 태스킹 을 하는 구문*/ if ((millis () - lastUpdate)> Interval) {lastUpdate = millis (); /*ActivePattern 의 스위치 구문*/ switch (ActivePattern) {/*case RAINBOW_CYCLE 에서는 RainbowCycleUpdate 를 실행 하라*/ case RAINBOW_CYCLE: RainbowCycleUpdate (); /*case RAINBOW_CYCLE 에서 나와라*/ break;

/*case THEATER_CHASE 에서는 TheaterChaseUpdate 를 실행 하라*/

case THEATER_CHASE: TheaterChaseUpdate (); /*case THEATER_CHASE 에서 나와라*/ break;

/*case COLOR_WIPE 에서는 ColorWipeUpdate 를 실행 하라*/

COLOR_WIPE иши: ColorWipeUpdate (); /*case COLOR_WIPE 에서 나와라*/ break; /*case SCANNER 에서는 ScannerUpdate 를 실행 하라*/ case SCANNER: ScannerUpdate (); /*case SCANNER 에서 나와라*/ break;

/*case FADE 에서는 FadeUpdate 를 실행 하라*/

case FADE: FadeUpdate (); /*case FADE 에서 나와라*/ break;

/*case TWINKLE 에서는 TwinkleUpdate 를 실행 하라*/

case TWINKLE: TwinkleUpdate (); /*case TWINKLE 에서 나와라*/ break;

/*case STAR 에서는 StarUpdate 를 실행 하라*/

case STAR: StarUpdate (); /*case STAR 에서 나와라*/ break;

/*case RAINBOWSPARKLE 에서는 RainbowsparkleUpdate 를 실행 하라*/

case RAINBOWSPARKLE: RainbowsparkleUpdate (); /*case RAINBOWSPARKLE 에서 나와라*/ break; /*case METEOR 에서는 MeteorUpdate 를 실행 하라*/ case METEOR: MeteorUpdate (); /*case METEOR 에서 나와라*/ break;

/*case LIGHT 에서는 LightUpdate 를 실행 하라*/

case LIGHT: LightUpdate (); /*case LIGHT 에서 나와라*/ break;

/*case BLOSSOM 에서는 BlossomUpdate 를 실행 하라*/

Case BLOSSOM: BlossomUpdate (); /*case BLOSSOM 에서 나와라*/ break; }}}

/*패턴 의 방향 을 설정 하는 구문*/

/*Index 를 증가 시키고 초기화 하는 함수*/

void Increment () { /*만약 정방향 이면 인덱스 를 / /* / if (Багыт == АЛГА) {Index ++; /*만약 인덱스 가 전체 네오 픽셀 구동 와 같 같 거나 면 으로 0 으로 초기화*/ if (Index> = TotalSteps) {Index = 0; /*패턴 을 완료 시키는 함수*/ if (OnComplete! = NULL) {OnComplete (); }}}

/*만약 정방향 이 아니면 인덱스 를 감소 시켜라*/ else {--Index; /*만약 인덱스 가 전체 네오 픽셀 구동 와 같 같 거나 다면 전체 갯수 에서 1 을 빼라*/ if (Index <= 0) {Index = TotalSteps - 1; /*패턴 을 완료 시키는 함수*/ if (OnComplete! = NULL) {OnComplete (); }}}}

/*반대 방향 으로 움직이게 하는 함수*/

void Reverse () { /*애니메이션 함수 에 Reverse 를 썼을 시, 만약 방향 이 정방향 /* / if (Багыт == АЛГА) { /*방향 은 그 와 반대 이며 구동 갯수 에서 1 일 빼라* / Багыты = РЕВЕРС; Индекс = TotalSteps - 1; } /*그 외의 방향 이 정방향 이면 인덱스 를 0 으로 설정 해라* / else {Direction = FORWARD; Index = 0; }}

/*애니메이션 을 설정 하는 함수 들*

*RainbowCycle 의 시간 과 방향 을 입력*/

vain RainbowCycle (uint8_t интервал, багыт dir = АЛГА) { /*실행 되는 패턴 은 RainbowCycle 임* / ActivePattern = RAINBOW_CYCLE; /*시간 은 void RainbowCycle () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*총 구동 갯수 는 255 임*/ TotalSteps = 255; /*인덱스 는 0 으로 설정 함*/ Index = 0; /*방향 은 void RainbowCycle () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*RainbowCycle 를 업데이트 했을 경우*/

void RainbowCycleUpdate () { /*변수 i 가 네오 개수 보다 작 으면 를 를 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 증가 함 과 GB RGB 의 무지개 컬러 로 하면서 작동 해라 * / setPixelColor (i, Wheel (((i * 256 / numPixels ()) + Index) & 255)); } / *애니메이션 을 보여주는 함수 * / show (); Арттыруу (); }

/*TheaterChase 의 컬러 와 시간 방향 을/*/

void TheaterChase (uint32_t color1, uint32_t color2, uint8_t интервал, багыт dir = АЛГА) { /*실행 되는 패턴 은 RTHEATER_CHASE* / ActivePattern = THEATER_CHASE; /*시간 은 void TheaterChase () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1, 2 를 설정*/ Color1 = color1; Color2 = color2; /*인덱스 는 0 으로 설정 함*/ Index = 0; /*방향 은 void TheaterChase () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*TheaterChase 를 업데이트 했을 경우*/

void TheaterChaseUpdate () { /*변수 i 가 네오 픽셀 개수 보다 작 를 i 를 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*만약 에 i 에 인덱스 를 으로 3 으로 나눈 것이 0 과 같다 면 i 를 Color 로 변환 시켜라*/ if ((i + Index) % 3 == 0) {setPixelColor (i, Color1); } /*그렇지 않다면 i 를 Color 로 변환 시켜라* / else {setPixelColor (i, Color2); }} / *애니메이션 을 보여주는 함수 * / show (); Арттыруу (); }

/*ColorWipe 의 컬러 와 방향 을 입력/*/

жараксыз ColorWipe (uint32_t түс, uint8_t интервал, багыт dir = АЛГА) { /*실행 되는 패턴 은 COLOR_WIPE* / ActivePattern = COLOR_WIPE; /*시간 은 void ColorWipe () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1 을 설정*/ Color1 = түс; /*인덱스 는 0 으로 설정 함*/ Index = 0; /*방향 은 void ColorWipe () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*ColorWipeUpdate Документти көрүү*/

void ColorWipeUpdate () { /*индекси 를 컬러 1 로 변환 시켜라 /* / setPixelColor (Index, Color1); / *애니메이션 을 보여주는 함수 */ show (); Арттыруу (); }

/*Сканер 의 컬러 와 시간 을 입력*/

бош сканер (uint32_t color1, uint8_t интервал) { /*실행 되는 패턴 은 СКАНЕР* / ActivePattern = СКАНЕР; /*시간 은 void Scanner () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*구동 갯수 는 총 갯수 에서 1 을 빼고 2 를 곱 해라*/ TotalSteps = (numPixels () - 1)*2; /*컬러 1 을 설정*/ Color1 = color1; /*인덱스 는 0 으로 설정 함*/ Index = 0; }

/*ScannerUpdate 를 업데이트 했을 경우*/

void ScannerUpdate () { /*변수 i 는 영 이고 총 갯수 보다 작을 를 를 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*만약 변수 i 가 인덱스 같다 면 면 i 를 color1 로 변환 시켜라*/ if (i == Index) {setPixelColor (i, Color1); } / *그렇지 않다면 변수 i 를 전체 구동 에서 인덱스 인덱스 인덱스 과 else * / else if (i == TotalSteps - Index) {setPixelColor (i, Color1); } / *그 밖에는 i 를 디밍 시켜라 i 의 값 만큼 * / else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / show (); Арттыруу (); }

/*Сканер 의 컬러 1, 2 와, 시간, 방향 을 입력*/

void Fade (uint32_t color1, uint32_t color2, uint16_t кадамдар, uint8_t интервал, багыт dir = АЛГА) { /*실행 되는 패턴 은 FADE* / ActivePattern = FADE; /*시간 은 void Fade () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*구동 갯수 는 스텝 값임*/ TotalSteps = кадамдар; /*컬러 1, 2 를 설정*/ Color1 = color1; Color2 = color2; /*인덱스 는 0 으로 설정 함*/ Index = 0; /*방향 은 void Fade () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; } /*FadeUpdate 를 업데이트 했을 경우* / void FadeUpdate () { /*변수 red 값 은 다음 과 같음* / uint8_t red = ((Red (Color1)*(TotalSteps - Index)) + (Red (Color2)*Index)) / TotalSteps; / * 변수 жашыл 값 은 다음 과 / * / uint8_t green = ((Green (Color1) * (TotalSteps - Index)) + (Green (Color2) * Index)) / TotalSteps; / * 변수 blue 값 은 다음 과 / * / uint8_t blue = ((Blue (Color1) * (TotalSteps - Index)) + (Blue (Color2) * Index)) / TotalSteps; /*위 의 кызыл, жашыл, көк 값 으로 컬러 를 셋팅 함*/ ColorSet (Түс (кызыл, жашыл, көк)); / *애니메이션 을 보여주는 함수 */ show (); Арттыруу (); }

/*모든 네오 픽셀 을 끄는 구문*/

void alloff () { /*총 네오 픽셀 갯수 는 74 개* / int NPIXEL = 74; /*변수 i 가 증가 하며 모든 네오 픽셀 컬러 값 값 을 0 으로 함*/ for (int i = 0; i <NPIXEL; i ++) {setPixelColor (i, 0, 0, 0); }}

/*Twinkle 의 컬러 1 와 시간 을 입력*/

жараксыз Twinkle (uint32_t color1, uint8_t интервал) { /*실행 되는 패턴 은 TWINKLE* / ActivePattern = TWINKLE; /*시간 은 void Twinkle () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*컬러 1 를 설정*/ Color1 = color1; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); Index = 0; }

/*TwinkleUpdate 를 업데이트 했을 경우*/

void TwinkleUpdate () { /*모든 네오 픽셀 의 의 컬러 0 으로 셋팅* / setAll (0, 0, 0); /*변수 Pixel 은 random 74*/ int Pixel = random (74); /*кокустук 74 개 에서 2 로나 눈 수 를 랜덤 하게/*/setPixelColor (Pixel/2, 50, 100, 255); setPixelColor (Пиксел, 250, 255, 250); setPixelColor (Пиксел/2, 200, 250, 255); setPixelColor (Пиксел, 255, 255, 255); setPixelColor (Пиксел, 250, 230, 250); setPixelColor (Пиксел/2, 150, 200, 255); / *애니메이션 을 보여주는 함수 */ show (); / *랜덤 하게 끄는 함수 */ setPixelColor (Пиксел, 0, 0, 0); / *애니메이션 을 보여주는 함수 */ show (); Арттыруу (); }

/*Жылдыз 의 컬러 1 값 을 입력*/

void Star (uint32_t color1) { /*실행 되는 패턴 은 STAR* / ActivePattern = STAR; /*시간 은 void Star () 안에 입력 되는 интервал 과 같음*/ Interval = Interval; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1 을 설정*/ Color1 = color1; Index = 0; }

/*StarUpdate программасы 를 업데이트 했을 경우*/

void StarUpdate () { /*인덱스 와 컬러 를 /* / setPixelColor (Индекс, Түс1); көрсөтүү (); /*변수 i 가 0 이고 구동 갯수 작 으면 i 를 감소 = 한칸 씩 이동 애니메이션*/ for (int i = 0; i <numPixels (); i--) {setPixelColor (i, Color (0, 0, 0)); } / *애니메이션 을 보여주는 함수 * / Increment (); }

/*Rainbowsparkle 의 시간 과 방향 을 입력*/

жараксыз Rainbowsparkle (uint8_t интервал, багыт dir = АЛГА) { /*실행 되는 패턴 은 RAINBOWSPARKLE* / ActivePattern = RAINBOWSPARKLE; /*시간 은 void Rainbowsparkle () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); Index = 0; /*방향 은 void Rainbowsparkle () 안에 입력 되는 багыт 과 같음*/ Direction = dir; }

/*RainbowsparkleUpdate 를 업데이트 했을 경우*/

void RainbowsparkleUpdate () { /*변수 i 가 0 이고 갯수 보다 작 으면 으면 값 값 증가 /* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 0 이고 구동 갯수 보다 작 으면 i 값 을 증가 하는데*/ if ((i + Index) % 2 == 0) {uint32_t c = random (255); setPixelColor (i, c); } else {setPixelColor (i, random (255)); }} / *애니메이션 을 보여주는 함수 * / show (); Арттыруу (); } /*Метеор 의 시간 과 방향 을 입력* / void Meteor (uint32_t color1) { /*실행 되는 패턴 은 METEOR* / ActivePattern = METEOR; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 한 한 것과 같음 */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 을 설정*/ Color1 = color1; Index = 0; }

/*MeteorUpdate 를 업데이트 했을 경우*/

void MeteorUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == Index) {setPixelColor (i, 100, random (255), 255); } башка {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / show (); Арттыруу (); }

/*Жарык 의 시간 과 방향 을 입력*/

void Light (uint32_t color1) { /*실행 되는 패턴 은 LIGHT* / ActivePattern = LIGHT; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 한 한 것과 같음 */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 을 설정*/ Color1 = color1; Index = 0; }

/*LightUpdate программасы 를 업데이트 했을 경우*/

void LightUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 150, random (200), 40); } башка {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / show (); Арттыруу (); }

/*Blossom 의 시간 과 방향 을 입력*/

void Blossom (uint32_t color1) { /*실행 되는 패턴 은 BLOSSOM* / ActivePattern = BLOSSOM; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 한 한 것과 같음 */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 을 설정*/ Color1 = color1; Index = 0; }

/*BlossomUpdate 를 업데이트 했을 경우*/

voss BlossomUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 255, random (255), 100); } башка {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / show (); Арттыруу (); }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/ *네오 픽셀 의 켜지 는 위치 와 색 을 지정 해주는 */ void setAll (байт кызыл, байт жашыл, байт көк) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, red), жашыл көк); } show (); }

/*네오 픽셀 의 디밍, 즉 밝기 를 조절 하는 함수*/

uint32_t DimColor (uint32_t түсү) {// R, G жана B компоненттерин бир аз оңго жылдыруу uint32_t dimColor = Түс (Кызыл (түс) >> 1, Жашыл (түс) >> 1, Көк (түс) >> 1); кайтаруу dimColor; }

/*모든 네오 픽셀 의 칼라 를 조절*/

жараксыз ColorSet (uint32_t color) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, color); } show (); }

/*레드 값 을 불러 옴*/

uint8_t Кызыл (uint32_t түс) {кайтаруу (түс >> 16) & 0xFF; } /*그린 값 을 불러 /* / uint8_t Green (uint32_t color) {return (color >> 8) & 0xFF; } /*블루 값 을 불러 /* / uint8_t Blue (uint32_t color) {return color & 0xFF; }

/*Rainbow 컬러 를 불러 옴*/

uint32_t Wheel (байт WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return Color (255 - WheelPos * 3, 0, WheelPos * 3); } else if (WheelPos <170) {WheelPos -= 85; кайтаруу Түсү (0, WheelPos * 3, 255 - WheelPos * 3); } else {WheelPos -= 170; кайтуу Түсү (WheelPos * 3, 255 - WheelPos * 3, 0); }}};

/*strip 을 불러 오기 위한 함수 /*사용 하는 스트립 별로 모두 해주어해주 함* /

void strip1Complete (); void strip2Complete (); void strip3Complete (); боштук strip4Complete (); void strip5Complete ();

/*네오 픽셀 의 갯수 설정*/

#define NUMPIXELS 74 /*사용 하는 버튼 의 갯수 갯수 /* / #define B_NUM 5 /*Import strip1 ~ 5 까지, 74 74 개 연결 핀 은 strip1 은 8 ~ strip5 까지 12* / NeoPatterns strip1 (74, 8, NEO_GRB + NEO_KHZ800, & strip1Complete); NeoPatterns strip2 (74, 9, NEO_GRB + NEO_KHZ800, & strip2Complete); NeoPatterns strip3 (74, 10, NEO_GRB + NEO_KHZ800, & strip3Complete); NeoPatterns strip4 (74, 11, NEO_GRB + NEO_KHZ800, & strip4Complete); NeoPatterns strip5 (74, 12, NEO_GRB + NEO_KHZ800, & strip5Complete); /*배열 을 사용한 연결 버튼 핀 설정*/ const int buttonPin [B_NUM] = {2, 3, 4, 5, 6}; /*배열 을 사용 하여 버튼 상태 를 지정/*/ int buttonState [B_NUM]; /*2 번핀 부터 6 번핀 까지 상태 는 순서 대로 LOW 임*/ int lastButtonState [B_NUM] = {LOW, LOW, LOW, LOW, LOW}; /*2 번핀 부터 6 번핀 까지 버튼 카운터 를 초기화/*/ int buttonCounter [B_NUM] = {0, 0, 0, 0, 0}; /*2 번핀 부터 6 번핀 까지 최대 버튼 카운터 는 5 임*/ int buttonCounterMax = 5; /*모든 버튼 핀 을 읽 일수 있도록 변수/*/ int reading [B_NUM]; unsigned long lastDebounceTime [B_NUM] = {0, 0, 0, 0, 0}; /*모든 버튼 핀 을 읽는 읽는 간격 은 delay50 과 같음*/ unsigned long debounceDelay = 50;

жараксыз орнотуу () {

/*복잡 하게 저항 연결 이 필요 없도록 인풋 풀업 방식 설정 설정: GND - 5V (Pin номерине туташуу)*/ for (int i = 0; i <B_NUM; i ++) {pinMode (buttonPin , INPUT_PULLUP); } Serial.begin (9600); /*스트립 1 ~ 5 를 셋팅*/ strip1.begin (); strip2.begin (); strip3.begin (); strip4.begin (); strip5.begin ();

//strip1. TheaterChase(strip1. Color(255, 0, 255), strip1. Color (255, 50, 0), 20, АЛГА);

}

/*버튼 카운터 변수 값 은 5 임*/

int counter = 5; void loop () { /*버튼 수 보다 i 가 작 으면 i 를 증가* / for (int i = 0; i debounceDelay) {if (окуп ! = buttonState ) {buttonState = окуу ; buttonCounter ++; /*버튼 카운팅 이 위에서 한 Max Max 5 를 넘으면 0 으로 초기화 시켜라.*/ If (buttonCounter > buttonCounterMax) buttonCounter = 0; }} lastButtonState = окуу ; } /*모든 스트립 을 업데이트 함.* / Strip1. Update (); strip2. Update (); strip3. Update (); strip4. Update (); strip5. Update ();

///// SWITCH_2 /////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////

/*버튼 배열 의 0 번째 즉. 2 번핀 에 연결된 버튼 을 활용 하여 애니메이션 이 구동 되도록 되도록 스위치 케이스/*/ switch (buttonCounter [0]) {

/*첫번째 버튼 을 활동 시키면 구동 되는 애니메이션*/

учурда 0: strip1. ActivePattern = BLOSSOM; /*해당 애니메이션 의 시간 을 설정*/ strip1. Interval = 20; /*구동 되는 네오 픽셀 의 갯수 를/*/ strip1. TotalSteps = strip1.numPixels (); тыныгуу; /*두번째 버튼 을 활동 시키면 시키면 되는 애니메이션*/ case 1: strip1. ActivePattern = RAINBOWSPARKLE; strip1. Interval = 50; strip1. TotalSteps = strip1.numPixels (); тыныгуу; /*세번째 버튼 을 활동 시키면 구동 되는 애니메이션*/ case 2: strip1. ActivePattern = SCANNER; strip1. Interval = 10; strip1. TotalSteps = (strip1.numPixels () - 1) * 2; тыныгуу; /*네번째 버튼 을 활동 시키면 구동 되는 애니메이션*/ case 3: strip1. ActivePattern = TWINKLE; strip1. Interval = 1; strip1. TotalSteps = strip1.numPixels (); тыныгуу; /*다섯 번째 버튼 을 활동 활동 구동 되는 애니메이션*/ case 4: strip1. ActivePattern = METEOR; strip1. Interval = 10; strip1. TotalSteps = strip1.numPixels (); тыныгуу; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_3 //////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [1]) {case 0: strip2. ActivePattern = STAR; strip2. Interval = 50; strip2. TotalSteps = strip2.numPixels (); тыныгуу; 1 -жагдай: strip2. ActivePattern = RAINBOWSPARKLE; strip2. Interval = 100; strip2. TotalSteps = strip2.numPixels (); тыныгуу; 2 -жагдай: strip2. ActivePattern = СКАНЕР; strip2. Interval = 20; strip2. TotalSteps = (strip2.numPixels () - 1) * 2; тыныгуу; 3 -жагдай: strip2. ActivePattern = TWINKLE; strip2. Interval = 5; strip2. TotalSteps = strip2.numPixels (); тыныгуу; 4 -жагдай: strip2. ActivePattern = METEOR; strip2. Interval = 40; strip2. TotalSteps = strip2.numPixels (); тыныгуу; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_4 /////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [2]) {case 0: strip3. ActivePattern = STAR; strip3. Interval = 50; strip3. TotalSteps = strip3.numPixels (); тыныгуу; 1 -жагдай: strip3. ActivePattern = RAINBOWSPARKLE; strip3. Interval = 100; strip3. TotalSteps = strip3.numPixels (); тыныгуу; 2 -жагдай: strip3. ActivePattern = СКАНЕР; strip3. Interval = 20; strip3. TotalSteps = (strip3.numPixels () - 1) * 2; тыныгуу; 3 -жагдай: strip3. ActivePattern = TWINKLE; strip3. Interval = 5; strip3. TotalSteps = strip3.numPixels (); тыныгуу; 4 -жагдай: strip3. ActivePattern = METEOR; strip3. Interval = 25; strip3. TotalSteps = strip3.numPixels (); тыныгуу; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_5 /////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [3]) {case 0: strip4. ActivePattern = STAR; strip4. Interval = 50; strip4. TotalSteps = strip4.numPixels (); тыныгуу; 1 -жагдай: strip4. ActivePattern = RAINBOWSPARKLE; strip4. Interval = 100; strip4. TotalSteps = strip4.numPixels (); тыныгуу; 2 -жагдай: strip4. ActivePattern = СКАНЕР; strip4. Interval = 20; strip4. TotalSteps = (strip4.numPixels () - 1) * 2; тыныгуу; 3 -жагдай: strip4. ActivePattern = TWINKLE; strip4. Interval = 5; strip4. TotalSteps = strip4.numPixels (); тыныгуу; 4 -жагдай: strip4. ActivePattern = METEOR; strip4. Interval = 25; strip4. TotalSteps = strip4.numPixels (); тыныгуу; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_6 /////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [4]) {case 0: strip5. ActivePattern = STAR; strip5. Interval = 50; strip5. TotalSteps = strip5.numPixels (); тыныгуу; 1 -жагдай: strip5. ActivePattern = RAINBOWSPARKLE; strip5. Interval = 100; strip5. TotalSteps = strip5.numPixels (); тыныгуу; 2 -жагдай: strip5. ActivePattern = СКАНЕР; strip5. Interval = 20; strip5. TotalSteps = (strip5.numPixels () - 1) * 2; тыныгуу; 3 -жагдай: strip5. ActivePattern = TWINKLE; strip5. Interval = 5; strip5. TotalSteps = strip5.numPixels (); тыныгуу; 4 -жагдай: strip5. ActivePattern = METEOR; strip5. Interval = 25; strip5. TotalSteps = strip5.numPixels (); тыныгуу; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]); }

// strip1 Completion Callback

боштук strip1Complete () {strip1. Color1 = strip1. Wheel (random (255)); strip1. Color2 = strip1. Wheel (random (255)); strip1. Index = 0; }

// strip2 Completion Callback

боштук strip2Complete () {strip2. Color1 = strip2. Wheel (random (255)); strip2. Color2 = strip2. Wheel (random (255)); strip2. Index = 0; }

// strip3 Completion Callback

боштук strip3Complete () {strip3. Color1 = strip3. Wheel (random (255)); strip3. Color2 = strip3. Wheel (random (255)); strip3. Index = 0; }

// strip4 Completion Callback

боштук strip4Complete () {strip4. Color1 = strip4. Wheel (random (255)); strip4. Color2 = strip4. Wheel (random (255)); strip4. Index = 0; }

// strip5 Completion Callback

void strip5Complete () {strip5. Color1 = strip5. Wheel (random (255)); strip5. Color2 = strip5. Wheel (random (255)); strip5. Index = 0; }

6 -кадам: Жыйынтык жана фильм тартуу

Image
Image
Жыйынтык жана тасма тартуу
Жыйынтык жана тасма тартуу

Биздин долбоорго кызыкканыңыз үчүн рахмат, бирок бул жетишсиз.

Сунушталууда: