Daftar Isi:

Pull the Light - Light Module Menggunakan Neopixel & Pull Up Switch: 6 Langkah (dengan Gambar)
Pull the Light - Light Module Menggunakan Neopixel & Pull Up Switch: 6 Langkah (dengan Gambar)

Video: Pull the Light - Light Module Menggunakan Neopixel & Pull Up Switch: 6 Langkah (dengan Gambar)

Video: Pull the Light - Light Module Menggunakan Neopixel & Pull Up Switch: 6 Langkah (dengan Gambar)
Video: What’s Behind the Light? – How WS2812B LED Strips Work 2024, Juli
Anonim
Image
Image
Pull the Light - Light Module Menggunakan Neopixel & Pull Up Switch
Pull the Light - Light Module Menggunakan Neopixel & Pull Up Switch

Fitur modul Cahaya

  • Arduino Uno
  • Perangkat keras & penutup dibeli dari internet
  • Neopixel & Power supply dipinjam dari School of Informatics & Product Design
  • Modul cahaya dikendalikan oleh catu daya
  • Semua fungsi dikendalikan melalui interaksi pengguna
  • Jenis animasi strip Neopixel: Jenis hujan, Jenis pancuran, Jenis kilatan petir, Jenis pop, Jenis tidak beraturan
  • Sakelar pull up terhubung ke strip Neopixel dan animasi berubah saat ditarik strip Neopixel

Langkah 1: Sebelum Kita Mulai

Sebelum Kita Mulai
Sebelum Kita Mulai

Halo Instructables dan Pembuat.

Kami memulai dan merancang proyek interaktif dalam hal apa yang akan terjadi jika kami dapat merasakan emosi hujan melalui animasi cahaya. Saya pikir kepekaan pengguna akan dimaksimalkan melalui antarmuka yang menarik cahaya secara langsung.

Ayo mulai bekerja

Langkah 2: Bagian yang Dibutuhkan

Bagian yang Dibutuhkan
Bagian yang Dibutuhkan
Bagian yang Dibutuhkan
Bagian yang Dibutuhkan
Bagian yang Dibutuhkan
Bagian yang Dibutuhkan

Berdasarkan satu Modul Cahaya

***Neopiksel dan catu daya digunakan dengan dukungan departemen kami.***

Elektronik:

  1. Arduino Uno
  2. 3 kabel warna (Hitam, Merah, Warna apa saja)
  3. Konektor 3pin (Tautan untuk membeli)
  4. Tarik sakelar 1 (Tautan untuk membeli)
  5. tabung menyusut
  6. Strip LED yang dapat dialamatkan WS2812b dengan 74 LED (strip Neopiksel)*2
  7. Catu daya (5V 350A) 1

***50 set diperlukan untuk Arduino, Sakelar Tarik, dan NeoPixels.***

Perangkat keras:

  1. Batang akrilik 2t (10mm * 1000mm) 1
  2. Papan akrilik 5t (60mm * 60mm) 1
  3. Foemax 10t (1200mm * 1800mm) 1
  4. Semprotan hitam
  5. Ikat kabel
  6. Rangkaian
  7. papan keras
  8. Papan kisi

Langkah 3: Konektivitas dan Membangun Perangkat Keras

Konektivitas dan Membangun Perangkat Keras
Konektivitas dan Membangun Perangkat Keras
Konektivitas dan Membangun Perangkat Keras
Konektivitas dan Membangun Perangkat Keras
Konektivitas dan Membangun Perangkat Keras
Konektivitas dan Membangun Perangkat Keras

Pertama, kita membutuhkan Pemotongan Akrilik untuk membuat satu modul pencahayaan.

  • Sebagai sarana untuk mengalami animasi cahaya, draf modul pencahayaan yang dipasang dengan menempelkan 74 LED berbentuk strip neopiksel ke batang akrilik setebal 2mm dengan luas 1M. Kami telah memproduksi dua jenis modul pencahayaan: linear dan spiral tipikal.
  • Untuk tipe linier, strip neopiksel yang ada dapat dipegang dan diamankan, tetapi tipe spiral memerlukan operasi manual. Masing-masing dari 74 LED dipecah menjadi beberapa bagian, dilekatkan pada akrilik spiral, dan diikat bersama dengan timah.

Pasang strip Neopixel ke akrilik dan kencangkan setiap strip untuk mencegahnya menyebar oleh panas, atau ikat dengan tali pancing tipis. Dalam kasus tipe linier, bola perlu ditarik ke ujung modul dipasang untuk mendesain tampilan estetika dan kami menyelesaikan bola pingpong dengan semprotan hitam. Kemudian mereka mengebor lubang kecil di bola pingpong dan menghubungkannya dengan tali. Bagian terpenting berikutnya, sakelar dan neopiksel, terhubung seperti yang ditunjukkan. Saklar kemudian diamankan ke rak langit-langit.

Dalam kasus tipe spiral, ada risiko bahwa penarikan langsung modul spiral dapat mematahkan akrilik di bawah tekanan, sehingga bagian tarik (Input) dan modul (Output) dipisahkan. Untuk memaksimalkan jatuhnya cahaya, modul dipasang secara vertikal di langit-langit, modul linier dipasang ke udara, spiral dipasang langsung ke langit-langit. Dan kami menghubungkan bola pingpong dan saklar ke pancing sehingga bisa dioperasikan.

Pemotongan akrilik seperti yang ditunjukkan pada gambar di atas diperlukan untuk mengamankan sakelar ke rak. Sakelar berbentuk persegi 6 cm tebalnya kira-kira 5 mm, dengan sakelar di tengah dan pengikat kabel dimasukkan melalui lubang di kedua sisi untuk mengamankan sakelar dengan kuat. Sebuah lubang melingkar di bagian bawah tengah memperlihatkan tarikan sakelar, di bawahnya kabel tiga kawat ditarik keluar dan dihubungkan ke terminal kabel modul. Demikian pula, melalui lubang di empat sudut, rak dan akrilik diamankan dengan pengikat kabel. Seperti dijelaskan di atas, modul linier terhubung langsung ke tarikan, tetapi modul spiral menghubungkan pin dan sakelar secara terpisah.

Langkah 4: Buat Menggunakan 50 Modul Cahaya

Buat Menggunakan 50 Modul Cahaya
Buat Menggunakan 50 Modul Cahaya
Buat Menggunakan 50 Modul Cahaya
Buat Menggunakan 50 Modul Cahaya
Buat Menggunakan 50 Modul Cahaya
Buat Menggunakan 50 Modul Cahaya

Kami telah merancang pengalaman pengguna untuk cahaya yang lebih kaya dengan menerapkan total 50 modul

Kami memiliki rak dengan lebar 1.800mm dan panjang 1.200mm, dan kami menghubungkan setiap sakelar dan modul sehingga Anda dapat merasakan lingkungan hujan dan hujan yang awalnya kami rencanakan, dan kami memiliki setiap modul yang berdiri sendiri untuk memungkinkan multi-tasking.

Tergantung pada gambar desain, lubang bundar dibor ke dalam foemax untuk menyembunyikan pemasangan dan untuk memastikan bahwa area yang terhubung dari modul LED tidak terlihat. Karena jarak dari papan akrilik ke sambungan modul LED tempat sakelar dipasang sekitar 1cm, maka digunakan foemax setebal 1cm.

Bingkai persegi logam digunakan untuk menahan instalasi bersama-sama dengan sekrup dan pengikat kabel sambil mempertahankan berat dan keseimbangan keseluruhan. Jika panjang sambungan terbuka lebih dari itu ketika pembuat mencoba, papan yang lebih tebal tidak efisien dan struktur lain direkomendasikan.

Untuk memfasilitasi pengalaman pengguna setinggi mata, pemasangan yang telah selesai ditempatkan pada penyangga setinggi kira-kira 2m, tetapi perhatiannya adalah pemasangan modul LED tertanam dengan sakelar sangat rumit, sehingga semua sambungan harus dilepas. Kami menaiki tangga dan menghubungkan modul dengan instalasi yang dipasang ke penyangga.

Bagian terpenting dari keseluruhan proses ini adalah memastikan bahwa pekerjaan dilakukan dengan aman dan sepenuhnya terjamin untuk memastikan bahwa pengalaman itu dimungkinkan dalam lingkungan yang aman

Sebanyak 10 arduino dan 50 modul LED digunakan dan lima modul LED terhubung per arduino untuk multi-tasking yang lebih efisien dan mulus. Lihat cetak biru terlampir untuk detailnya. Pengkodean multi-tasking neopixel menggunakan full switch sesuai dengan diagram desain akan dibahas secara rinci pada langkah selanjutnya.

Langkah 5: Pengodean & Pengkabelan Arduino

Pengodean & Pengkabelan Arduino
Pengodean & Pengkabelan Arduino
Pengodean & Pengkabelan Arduino
Pengodean & Pengkabelan Arduino

Pengkabelan

  • 50 modul terhubung sesuai dengan tata letak langkah 4.
  • Setiap modul dibagi menjadi 10 set 50 modul untuk memungkinkan multi-tasking dan menyediakan koneksi yang jelas.
  • Seperti yang ditunjukkan pada gambar set 1 di atas, lima modul terhubung ke satu arduino, dan pin 5v neopiksel diikat sekaligus untuk menghubungkan catu daya.
  • GND neopiksel dan sakelar juga diikat bersama dan, untuk memudahkan persepsi, sakelar dicolokkan ke pin 2, 3, 4, 5, 6 dan neopiksel dicolokkan ke pin 9, 10, 11, 12, 13.
  • Sakelar dan neopiksel dihubungkan dengan cara masing-masing 2-9, 3-10, 4-11, 5-12, 6-13.
  • Perlu dicatat bahwa karena sambungan saluran rumit dan ada risiko kebakaran karena korsleting, tabung yang menyusut dipanaskan untuk memastikan bahwa bagian yang lemah tidak putus.

Pengkodean multi-tugas Neopixel dengan sakelar tarik

5 animasi cahaya (Jenis hujan, Jenis pancuran, Jenis kilatan petir, Jenis pop, Jenis tidak beraturan)

#termasuk

/*사용하고자하는 */

pola enum { NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, TWINKLE, STAR, RAINBOWSPARKLE, METEOR, LIGHT, BLOSSOM }; /*네오 */ enum arah { MAJU, Mundur };

/*패턴의 */

class NeoPatterns: public Adafruit_NeoPixel { /* */ public: pattern ActivePattern; /*클레스 */ arah Arah;

/*변수 Interval을 */ Interval panjang tanpa tanda; /*변수 lastUpdate를 */ unsigned long lastUpdate; /*변수 Warna1, Warna2를 */ uint32_t Warna1, Warna2; /*변수 TotalSteps를 */ uint16_t TotalSteps; /*변수 Indeks를 */ Indeks uint16_t;

/*패턴을 */ void (*OnComplete)(); /*네오패턴에서 네오픽샐의,,, 불러오는 함수*/ NeoPatterns(uint16_t piksel, pin uint8_t, tipe uint8_t, void (*callback)()): Adafruit_NeoPixel(piksel, pin, tipe){ OnComplete = panggilan balik; }

/*패턴을 */

batal Perbarui(){ /*패턴의. 구현하는 */ 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를 */

kasus THEATER_CHASE: TheaterChaseUpdate(); /*case THEATER_CHASE에서 */ break;

/*case COLOR_WIPE에서는 ColorWipeUpdate를 */

kasus COLOR_WIPE: ColorWipeUpdate(); /*case COLOR_WIPE에서 */ break; /*case SCANNER에서는 ScannerUpdate를 */ case SCANNER: ScannerUpdate(); /*case SCANNER에서 */ break;

/*case FADE에서는 FadeUpdate를 */

kasus FADE: FadeUpdate(); /*case FADE에서 */ break;

/*case TWINKLE에서는 TwinkleUpdate를 */

kasus TWINKLE: TwinkleUpdate(); /*case TWINKLE에서 */ break;

/*case STAR에서는 StarUpdate를 */

kasus STAR: StarUpdate(); /*case STAR에서 */ break;

/*case RAINBOWSPARKLE에서는 RainbowsparkleUpdate를 */

kasus RAINBOWSPARKLE: RainbowsparkleUpdate(); /*case RAINBOWSPARKLE에서 */ break; /*case METEOR에서는 MeteorUpdate를 */ case METEOR: MeteorUpdate(); /*case METEOR에서 */ break;

/*case LIGHT에서는 LightUpdate를 */

kasus LIGHT: LightUpdate(); /*case LIGHT에서 */ break;

/*case BLOSSOM에서는 BlossomUpdate를 */

kasus BLOSSOM: BlossomUpdate(); /*case BLOSSOM에서 */ break; } } }

/*패턴의 */

/*Indeks를 */

void Increment(){ /*만약 */ if (Arah == MAJU){ Indeks++; /*만약 갯수와 같거나 0으로 */ if (Indeks >= TotalLangkah){ Indeks = 0; /*패턴을 */ if (OnComplete != NULL){ OnComplete(); } } }

/*만약 */ else{ --Indeks; /*만약 인덱스가 전체 갯수와 전체 구동 1을빼라*/ if (Indeks <= 0){ Indeks = TotalLangkah - 1; /*패턴을 */ if (OnComplete != NULL){ OnComplete(); } } } }

/*반대방향으로 */

void Mundur(){ /*애니메이션 함수에 Mundur를, 방향이 정방향이면*/ if (Arah == MAJU){ /*방향은 그와 전체 1일빼라*/ Arah = Mundur; Indeks = TotalLangkah - 1; } /*그 인덱스를 0으로 */ else{ Arah = MAJU; Indeks = 0; } }

/*애니메이션을 *

*Siklus Pelangi의 */

void RainbowCycle(interval uint8_t, arah dir = FORWARD){ /*실행되는 RainbowCycle임*/ ActivePattern = RAINBOW_CYCLE; /*시간은 void RainbowCycle()안에 interval과 */ Interval = interval; /*총 255임*/ TotalLangkah = 255; /*인덱스는 0으로 */ Indeks = 0; /*방향은 void RainbowCycle()안에 dir = MAJU과 */ Arah = dir; }

/*Siklus Pelangi를 */

void RainbowCycleUpdate(){ /*변수 i가 개수보다 작으면 i를 */ for (int i = 0; i < numPixels(); i++){ /*변수 i가 RGB의 */ setPixelColor(i, Wheel(((i * 256 / numPixels()) + Indeks) & 255); } /*애니메이션을 */ tampilkan(); Kenaikan(); }

/*Kejaran Teater의 */

void TheaterChase(uint32_t color1, uint32_t color2, uint8_t interval, direction dir = FORWARD){ /*실행되는 RTHEATER_CHASE*/ ActivePattern = THEATER_CHASE; /*시간은 void TheaterChase()안에 interval과 */ Interval = interval; /*총 numPixels갯수임*/ TotalSteps = numPixels(); /*컬러 1, 2를 */ Warna1 = warna1; Warna2 = warna2; /*인덱스는 0으로 */ Indeks = 0; /*방향은 void TheaterChase()안에 dir = FORWARD과 */ Direction = dir; }

/*Kejaran Teater를 */

void TheaterChaseUpdate(){ /*변수 i가 네오픽셀 개수보다 작으면 i를 */ for (int i = 0; i < numPixels(); i++){ /*만약 변수 i에 3으로 0과 i를 Warna로 */ if ((i + Indeks) % 3 == 0){ setPixelColor(i, Color1); } /*그렇지 i를 Color로 */ else{ setPixelColor(i, Color2); } } /*애니메이션을 */ tampilkan(); Kenaikan(); }

/*Hapus Warna의 */

void ColorWipe(warna uint32_t, interval uint8_t, arah dir = FORWARD){ /*실행되는 COLOR_WIPE*/ ActivePattern = COLOR_WIPE; /*시간은 void ColorWipe()안에 interval과 */ Interval = interval; /*총 numPixels갯수임*/ TotalSteps = numPixels(); /*컬러 1을 */ Warna1 = warna; /*인덱스는 0으로 */ Indeks = 0; /*방향은 void ColorWipe()안에 dir = FORWARD과 */ Direction = dir; }

/*ColorWipeUpdate를 */

void ColorWipeUpdate(){ /*index를 1로 */ setPixelColor(Index, Color1); /*애니메이션을 */ tampilkan(); Kenaikan(); }

/*Pemindai의 */

void Scanner(uint32_t color1, uint8_t interval){ /*실행되는 SCANNER*/ ActivePattern = SCANNER; /*시간은 void Scanner()안에 interval과 */ Interval = interval; /*구동갯수는 1을빼고 2를 */ TotalSteps = (numPixels() - 1) * 2; /*컬러 1을 */ Warna1 = warna1; /*인덱스는 0으로 */ Indeks = 0; }

/*Pembaruan Pemindai를 */

void ScannerUpdate(){ /*변수 i는 영이고 작을경우 i를 */ for (int i = 0; i < numPixels(); i++){ /*만약 i가 i color1로 */ if (i == Index){ setPixelColor(i, Color1); } /*그렇지 i를 같다 */ else if (i == TotalSteps - Index){ setPixelColor(i, Color1); } /*그 i를 i의 */ else { setPixelColor(i, DimColor(getPixelColor(i))); } } /*애니메이션을 */ tampilkan(); Kenaikan(); }

/*Pemindai의 1, 2와,, */

void Fade(uint32_t color1, uint32_t color2, uint16_t langkah, uint8_t interval, arah dir = FORWARD){ /*실행되는 FADE*/ ActivePattern = FADE; /*시간은 void Fade()안에 interval과 */ Interval = interval; /*구동갯수는 */ TotalSteps = langkah; /*컬러 1, 2를 */ Warna1 = warna1; Warna2 = warna2; /*인덱스는 0으로 */ Indeks = 0; /*방향은 void Fade()안에 dir = FORWARD과 */ Direction = dir; } /*FadeUpdate를 업데이트했을 경우*/ void FadeUpdate(){ /*변수 red값은 다음과 */ uint8_t red = ((Merah(Warna1) * (JumlahLangkah - Indeks)) + (Merah(Warna2) * Indeks)) / TotalSteps; /*변수 hijau값은 */ uint8_t hijau = ((Hijau(Warna1) * (TotalLangkah - Indeks)) + (Hijau(Warna2) * Indeks)) / TotalLangkah; /*변수 biru값은 */ uint8_t blue = ((Biru(Warna1) * (TotalSteps - Indeks)) + (Biru(Color2) * Indeks)) / TotalSteps; /*위의 merah, hijau, biru */ ColorSet(Warna(merah, hijau, biru)); /*애니메이션을 */ tampilkan(); Kenaikan(); }

/*모든 */

void alloff() { /*총 74개이며*/ int NPIXEL = 74; /*변수 i가 네오픽셀의 컬러 0으로 */ for (int i = 0; i < NPIXEL; i++) { setPixelColor(i, 0, 0, 0); } }

/*Kelap-kelip의 1와 */

void Twinkle(uint32_t color1, uint8_t interval){ /*실행되는 TWINKLE*/ ActivePattern = TWINKLE; /*시간은 void Twinkle()안에 interval과 */ Interval = interval; /*컬러 1를 */ Warna1 = warna1; /*총 numPixels갯수임*/ TotalSteps = numPixels(); Indeks = 0; }

/*TwinkleUpdate를 */

void TwinkleUpdate(){ /*모든 0으로 */ setAll(0, 0, 0); /*변수 Piksel은 acak 74*/ int Piksel = acak(74); /*random 74개에서 2로나눈 */ setPixelColor(Pixel/2, 50, 100, 255); setPixelColor(Pixel, 250, 255, 250); setPixelColor(Pixel/2, 200, 250, 255); setPixelColor(Pixel, 255, 255, 255); setPixelColor(Pixel, 250, 230, 250); setPixelColor(Pixel/2, 150, 200, 255); /*애니메이션을 */ tampilkan(); /*랜덤하게 */ setPixelColor(Pixel, 0, 0, 0); /*애니메이션을 */ tampilkan(); Kenaikan(); }

/*Bintang의 1 */

void Bintang(uint32_t color1){ /*실행되는 STAR*/ ActivePattern = STAR; /*시간은 void Bintang()안에 interval과 */ Interval = Interval; /*총 numPixels갯수임*/ TotalSteps = numPixels(); /*컬러 1을 */ Warna1 = warna1; Indeks = 0; }

/*StarUpdate를 */

void StarUpdate(){ /*인덱스와 */ setPixelColor(Indeks, Warna1); menunjukkan(); /*변수 i가 0이고 갯수보다 작으면 i를 감소시킴 = 이동하는 애니메이션*/ for (int i = 0; i < numPixels(); i--) { setPixelColor(i, Color(0, 0, 0)); } /*애니메이션을 */ Kenaikan(); }

/*Rainbowsparkle */

void Rainbowsparkle(interval uint8_t, arah dir = MAJU){ /*실행되는 RAINBOWSPARKLE*/ ActivePattern = RAINBOWSPARKLE; /*시간은 void Rainbowsparkle()안에 interval과 */ Interval = interval; /*총 numPixels갯수임*/ TotalSteps = numPixels(); Indeks = 0; /*방향은 void Rainbowsparkle()안에 arah과 */ Arah = dir; }

/*RainbowsparkleUpdate를 */

void RainbowsparkleUpdate(){ /*변수 i가 0이고 갯수보다 작으면 i값을 증가하는데*/ for (int i = 0; i < numPixels(); i++){ /*변수 i가 0이고 i값을 */ if ((i + Indeks) % 2 == 0){ uint32_t c = random(255); setPixelColor(i, c); } else{ setPixelColor(i, random(255)); } } /*애니메이션을 */ tampilkan(); Kenaikan(); } /*Meteor의 */ void Meteor(uint32_t color1){ /*실행되는 METEOR*/ ActivePattern = METEOR; /*시간 */ Interval = Interval; /*총 numPixels갯수에서 1일뺀, *2를 */ TotalSteps = (numPixels()-1) * 2; /*컬러 1을 */ Warna1 = warna1; Indeks = 0; }

/*MeteorUpdate를 */

void MeteorUpdate(){ for (int i = 0; i < numPixels(); i++){ if (i == Index){ setPixelColor(i, 100, random(255), 255); } else { setPixelColor(i, DimColor(getPixelColor(i))); } } /*애니메이션을 */ tampilkan(); Kenaikan(); }

/*Cahaya의 */

void Light(uint32_t color1){ /*실행되는 LIGHT*/ ActivePattern = LIGHT; /*시간 */ Interval = Interval; /*총 numPixels갯수에서 1일뺀, *2를 */ TotalSteps = (numPixels()-1) * 2; /*컬러 1을 */ Warna1 = warna1; Indeks = 0; }

/*LightUpdate를 */

void LightUpdate(){ for (int i = 0; i < numPixels(); i++){ if (i == TotalSteps - Index){ setPixelColor(i, 150, random(200), 40); } else { setPixelColor(i, DimColor(getPixelColor(i))); } } /*애니메이션을 */ tampilkan(); Kenaikan(); }

/*Mekar의 */

void Blossom(uint32_t color1){ /*실행되는 BLOSSOM*/ ActivePattern = BLOSSOM; /*시간 */ Interval = Interval; /*총 numPixels갯수에서 1일뺀, *2를 */ TotalSteps = (numPixels()-1) * 2; /*컬러 1을 */ Warna1 = warna1; Indeks = 0; }

/*BlossomUpdate를 */

void BlossomUpdate(){ for (int i = 0; i < numPixels(); i++){ if (i == TotalSteps - Index){ setPixelColor(i, 255, random(255), 100); } else { setPixelColor(i, DimColor(getPixelColor(i))); } } /*애니메이션을 */ tampilkan(); Kenaikan(); }

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

/*네오픽셀의 위치와 지정해주는 함수 */ void setAll(byte merah, byte hijau, byte biru) { for(int i = 0; i < numPixels(); i++) { setPixelColor(i, red, hijau biru); } menunjukkan(); }

/*네오픽셀의, */

uint32_t DimColor(uint32_t color){ // Geser komponen R, G dan B satu bit ke kanan uint32_t dimColor = Warna(Merah(warna) >> 1, Hijau(warna) >> 1, Biru(warna) >> 1); kembali dimColor; }

/*모든 */

void ColorSet(uint32_t color){ for (int i = 0; i < numPixels(); i++){ setPixelColor(i, color); } menunjukkan(); }

/*레드값을 */

uint8_t Merah(warna uint32_t){ kembali (warna >> 16) & 0xFF; } /*그린값을 */ uint8_t Hijau(uint32_t warna){ return (warna >> 8) & 0xFF; } /*블루값을 */ uint8_t Biru(warna uint32_t){ mengembalikan warna & 0xFF; }

/*Pelangi */

uint32_t Wheel(byte WheelPos){ WheelPos = 255 - WheelPos; if (WheelPos < 85){ mengembalikan Warna(255 - WheelPos * 3, 0, WheelPos * 3); } else if (WheelPos < 170){ WheelPos -= 85; return Color(0, WheelPos * 3, 255 - WheelPos * 3); } else{ WheelPos -= 170; kembali Warna(WheelPos * 3, 255 - WheelPos * 3, 0); } } };

/*strip을 / *사용하는 */

batal strip1Lengkap(); batal strip2Lengkap(); batal strip3Lengkap(); batal strip4Lengkap(); void strip5Lengkap();

/*네오픽셀의 */

#define NUMPIXELS 74 /*사용하는 갯수 설정*/ #define B_NUM 5 /*Impor strip1~5까지, 74개 strip1은 8 ~ strip5까지12*/ NeoPatterns strip1(74, 8, NEO_GRB + NEO_KHZ800, &strip1Lengkap); NeoPatterns strip2(74, 9, NEO_GRB + NEO_KHZ800, &strip2Complete); NeoPatterns strip3(74, 10, NEO_GRB + NEO_KHZ800, &strip3Lengkap); 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번핀까지 RENDAH임*/ int lastButtonState[B_NUM] = {RENDAH, RENDAH, RENDAH, RENDAH, RENDAH}; /*2번핀부터 6번핀까지 */ int buttonCounter[B_NUM] = {0, 0, 0, 0, 0}; /*2번핀부터 6번핀까지 5임*/ int buttonCounterMax = 5; /*모든 */ int membaca[B_NUM]; unsigned long lastDebounceTime[B_NUM] = {0, 0, 0, 0, 0}; /*모든 delay50과 */ unsigned long debounceDelay = 50;

batalkan pengaturan(){

/*복잡하게 풀업방식의: GND - 5V(Sambungkan ke nomor Pin)*/ for (int i = 0; i < B_NUM; i++) { pinMode(buttonPin, INPUT_PULLUP); } Serial.begin(9600); /*스트립 1~5를 */ strip1.begin(); strip2.mulai(); strip3.mulai(); strip4.begin(); strip5.mulai();

//strip1. TheaterChase(strip1. Color(255, 0, 255), strip1. Color(255, 50, 0), 20, FORWARD);

}

/*버튼 5임*/

int penghitung = 5; void loop(){ /*버튼 i가 i를 */ for (int i = 0; i debounceDelay) { if (membaca != buttonState) { buttonState = membaca; buttonCounter++; /*버튼 Maks 5를 넘으면 0으로.*/ if (buttonCounter > buttonCounterMax) buttonCounter = 0; } } lastButtonState = membaca; } /*모든.*/ strip1. Update(); strip2. Perbarui(); strip3. Perbarui(); strip4. Perbarui(); strip5. Perbarui();

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

/*버튼 0번째. 2번핀에 버튼을 구문*/ sakelar (tombolPenghitung[0]) {

/*첫번째 */

kasus 0: strip1. ActivePattern = BLOSSOM; /*해당 */ strip1. Interval = 20; /*구동되는 */ strip1. TotalSteps = strip1.numPixels(); merusak; /*두번째 */ kasus 1: strip1. ActivePattern = RAINBOWSPARKLE; strip1. Interval = 50; strip1. TotalSteps = strip1.numPixels(); merusak; /*세번째 */ kasus 2: strip1. ActivePattern = SCANNER; strip1. Interval = 10; strip1. TotalSteps = (strip1.numPixels() - 1) * 2; merusak; /*네번째 */ kasus 3: strip1. ActivePattern = TWINKLE; strip1. Interval = 1; strip1. TotalSteps = strip1.numPixels(); merusak; /*다섯번째 */ kasus 4: strip1. ActivePattern = METEOR; strip1. Interval = 10; strip1. TotalSteps = strip1.numPixels(); merusak; } Serial.print(buttonCounter[0]); Serial.print(", "); Serial.println(buttonCounter[1]);

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

switch (buttonCounter[1]) { case 0: strip2. ActivePattern = BINTANG; strip2. Interval = 50; strip2. TotalSteps = strip2.numPixels(); merusak; kasus 1: strip2. ActivePattern = RAINBOWSPARKLE; strip2. Interval = 100; strip2. TotalSteps = strip2.numPixels(); merusak; kasus 2: strip2. ActivePattern = SCANNER; strip2. Interval = 20; strip2. TotalSteps = (strip2.numPixels() - 1) * 2; merusak; kasus 3: strip2. ActivePattern = TWINKLE; strip2. Interval = 5; strip2. TotalSteps = strip2.numPixels(); merusak; kasus 4: strip2. ActivePattern = METEOR; strip2. Interval = 40; strip2. TotalSteps = strip2.numPixels(); merusak; } Serial.print(buttonCounter[0]); Serial.print(", "); Serial.println(buttonCounter[1]);

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

switch (buttonCounter [2]) { case 0: strip3. ActivePattern = BINTANG; strip3. Interval = 50; strip3. TotalSteps = strip3.numPixels(); merusak; kasus 1: strip3. ActivePattern = RAINBOWSPARKLE; strip3. Interval = 100; strip3. TotalSteps = strip3.numPixels(); merusak; kasus 2: strip3. ActivePattern = SCANNER; strip3. Interval = 20; strip3. TotalSteps = (strip3.numPixels() - 1) * 2; merusak; kasus 3: strip3. ActivePattern = TWINKLE; strip3. Interval = 5; strip3. TotalSteps = strip3.numPixels(); merusak; kasus 4: strip3. ActivePattern = METEOR; strip3. Interval = 25; strip3. TotalSteps = strip3.numPixels(); merusak; } 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(); merusak; kasus 1: strip4. ActivePattern = RAINBOWSPARKLE; strip4. Interval = 100; strip4. TotalSteps = strip4.numPixels(); merusak; kasus 2: strip4. ActivePattern = SCANNER; strip4. Interval = 20; strip4. TotalSteps = (strip4.numPixels() - 1) * 2; merusak; kasus 3: strip4. ActivePattern = TWINKLE; strip4. Interval = 5; strip4. TotalSteps = strip4.numPixels(); merusak; kasus 4: strip4. ActivePattern = METEOR; strip4. Interval = 25; strip4. TotalSteps = strip4.numPixels(); merusak; } Serial.print(buttonCounter[0]); Serial.print(", "); Serial.println(buttonCounter[1]);

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

switch (buttonCounter[4]) { case 0: strip5. ActivePattern = BINTANG; strip5. Interval = 50; strip5. TotalSteps = strip5.numPixels(); merusak; kasus 1: strip5. ActivePattern = RAINBOWSPARKLE; strip5. Interval = 100; strip5. TotalSteps = strip5.numPixels(); merusak; kasus 2: strip5. ActivePattern = SCANNER; strip5. Interval = 20; strip5. TotalSteps = (strip5.numPixels() - 1) * 2; merusak; kasus 3: strip5. ActivePattern = TWINKLE; strip5. Interval = 5; strip5. TotalSteps = strip5.numPixels(); merusak; kasus 4: strip5. ActivePattern = METEOR; strip5. Interval = 25; strip5. TotalSteps = strip5.numPixels(); merusak; } Serial.print(buttonCounter[0]); Serial.print(", "); Serial.println(buttonCounter[1]); }

// strip1 Penyelesaian Panggilan Balik

void strip1Complete(){ strip1. Color1 = strip1. Wheel(random(255)); strip1. Color2 = strip1. Wheel(random(255)); strip1. Indeks = 0; }

// strip2 Penyelesaian Panggilan Balik

void strip2Complete(){ strip2. Color1 = strip2. Wheel(random(255)); strip2. Color2 = strip2. Wheel(random(255)); strip2. Indeks = 0; }

// strip3 Penyelesaian Panggilan Balik

void strip3Complete(){ strip3. Color1 = strip3. Wheel(random(255)); strip3. Color2 = strip3. Wheel(random(255)); strip3. Indeks = 0; }

// strip4 Penyelesaian Panggilan Balik

void strip4Complete(){ strip4. Color1 = strip4. Wheel(random(255)); strip4. Color2 = strip4. Wheel(random(255)); strip4. Indeks = 0; }

// strip5 Penyelesaian Panggilan Balik

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

Langkah 6: Hasil dan Pembuatan Film

Image
Image
Hasil dan Pembuatan Film
Hasil dan Pembuatan Film

Terima kasih atas minat Anda pada proyek kami meskipun itu tidak cukup.

Direkomendasikan: