สารบัญ:

ขวดโค้ก Arduino & Neopixel Rainbow Party Light: 7 ขั้นตอน (พร้อมรูปภาพ)
ขวดโค้ก Arduino & Neopixel Rainbow Party Light: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ขวดโค้ก Arduino & Neopixel Rainbow Party Light: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ขวดโค้ก Arduino & Neopixel Rainbow Party Light: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: สอนทำโปรเจค Arduino ขวดเจลล้างมืออัตโนมัติ กดโดยไม่ต้องแตะขวด ทำเองได้ | โปรเจคไฟฟ้าอิเล็กทรอนิกส์ 2024, กรกฎาคม
Anonim
Image
Image

ดังนั้น ดูน ลูกชายของฉันจึงเห็นไฟปาร์ตี้สุดเจ๋งที่ทำจากขวดโค้กเก่าและอวัยวะภายในที่เหนียวของแท่งเรืองแสง และถามว่าเราจะสร้างมันขึ้นมาสำหรับการสอบในโรงเรียนที่กำลังจะมีขึ้นของเขาได้ไหม AYYY!!! ฉันพูดแน่ แต่คุณไม่อยากได้แหวน Adafruit Neopixel Rings ที่เราเคยอ่านเจอมาบ้างเหรอ… เขาจ้องฉันนิ่งๆ เพราะความจริงคือเขาไม่รู้ว่าฉันกำลังพูดถึงอะไร แต่พ่อเห็นโอกาสที่จะเล่นกับวงแหวน Neopixel ที่เขาเคยอ่านมา และเราทุกคนรู้ดีว่าหนึ่งใน 10 เหตุผลอันดับต้นๆ ที่พ่อเกินบรรยายให้กำเนิดคือการมี ข้ออ้างที่จะเล่นกับอุปกรณ์เจ๋ง ๆ ที่พวกเขาบอกว่าทุกคนมีไว้สำหรับลูก ๆ ของพวกเขา

นี่เป็นโครงการที่เรียบง่ายและดูดีมาก เราสร้างขวดโค้กเก่า 3 ขวด จานไม้ และฐานรองสนามเด็กเล่น -- สิ่งที่อยู่รอบ ๆ ในห้องใต้ดิน -- รวมกับ Arduino (ในกรณีของเรา Leonardo แต่บอร์ด Genuino ใด ๆ จะทำ!) และวงแหวน Neopixel สามวง. ฉันสั่งวงแหวน 9-LED แต่ลงเอยด้วยวงแหวน 12-LED ในราคาเดียวกัน ซึ่งฟังดูหวาน แต่หมายถึงการเติมเต็มบนหลุม - วงแหวน LED 12 ดวงมีความกว้าง 35 มม. เมื่อเทียบกับ 23 มม. สิ่งที่คุณต้องการ:

  • บอร์ด Genuino/Arduino (เราใช้ Leonardo แต่เกือบทุกบอร์ดจะทำ)
  • วงแหวนนีโอพิกเซล 3 วง (ไฟ LED แต่ละดวง 12 ดวง): รับจาก Adafruit และสนับสนุนคนดีเหล่านั้น
  • ตัวเก็บประจุ 1000 µf 6.3v หรือดีกว่า
  • ตัวต้านทาน 300-500 โอห์ม
  • จานไม้ หรือเศษไม้สี่เหลี่ยมจัตุรัส หรืออะไรก็ได้ที่คุณสามารถใส่นีโอพิกเซลเข้าไปแล้ววางขวดโค้กไว้ด้านบน
  • รูปแบบการยึดสำหรับเพลต - ตัวยึดเสาสนามเด็กเล่นใช้งานได้ดีสำหรับเรา
  • หูดที่ผนัง 9v
  • รูเจาะ 40 มม.
  • น็อต น็อต แหวนรอง สเปเซอร์
  • ลวดแกนแข็ง
  • หัวแร้งและหัวแร้ง
  • เขียงหั่นขนม
  • กล่องพลาสติกสำหรับ Arduino คุณสามารถออกไปซื้อกล่องพลาสติกที่พอดีตัวซึ่งทำจากปิโตรเลียมอายุนับล้านปีซึ่งขุดจากพื้นดินในสภาพแวดล้อมที่เปราะบางและผลิตขึ้นจากอีกฟากหนึ่งของโลกและจัดส่งในภาชนะไปยังโกดังใกล้บ้านคุณ พอร์ตตัดออกในแนวที่สมบูรณ์แบบและส่งไปที่ประตูของคุณโดยรถตู้ที่ปล่อยก๊าซคาร์บอนไดออกไซด์สู่ชั้นบรรยากาศ หรือคุณสามารถทำในสิ่งที่ฉันทำและใช้กล่องพลาสติกเก่าที่ทิ้งแล้ว.. ในกรณีนี้คือกล่องใส่ยามาดากัสการ์ที่วางอยู่ในตู้ยา… แล้วเจาะรูสองสามรูข้างใน ที่นี่สิ้นสุดการบรรยาย มาทำ…

ขั้นตอนที่ 1: สร้างฐาน

สร้างฐาน
สร้างฐาน
สร้างฐาน
สร้างฐาน

คุณสามารถปรับแต่งฐานของคุณจากขยะที่คุณมีในห้องใต้ดินของคุณเอง หรือแม้แต่ใช้กล่องไม้หรืออะไรก็ได้ที่จะซ่อนอุปกรณ์อิเล็กทรอนิกส์ของคุณ

ขั้นแรก เราเจาะรูสามรู โดยเว้นระยะห่างเท่าๆ กันบนแผ่นไม้ ซึ่งใหญ่พอสำหรับวงแหวน Neopixel ที่จะนั่งได้ ในภาพ หลุมนั้นเจาะรูด้วยสว่านจอบ ในท้ายที่สุด เนื่องจากวงแหวน LED 12 ดวงมีขนาดใหญ่ขึ้น เราจึงต้องเจาะรูด้วยดอกเจาะ ซึ่งหมายความว่าต้องสอดเข้าไปในจาน และแทนที่จะสวมแหวนเข้าไปในบ่อน้ำเล็กๆ ลึก 2 มม. ที่ประดิษฐ์ขึ้นอย่างประณีตด้วยรูตรงกลางเพื่อการเดินลวดที่เรียบร้อย ฉันกลับยึดวงแหวนไว้ด้วย… อะแฮ่ม… เทปพันท่อที่ด้านล่าง ของจาน อย่าตัดสิน คุณไม่สามารถมองเห็นด้านล่างของจานในแบบของฉันได้ และเมื่อเปิดเครื่องจะมืด และนอกจากนั้น - เทปพันสายไฟมีอะไรผิดปกติ?

ฉันต้องการช่องว่างระหว่างเพลตกับโครงยึดสำหรับเขียงหั่นขนมที่ด้านล่างของเพลทและส่วนประกอบหนึ่งตัว -- ตัวเก็บประจุ และสำหรับการเดินสายไฟที่จะต้องเปลี่ยนจากเขียงหั่นขนมไปเป็น Arduino ซึ่งฉันวางแผนที่จะใส่เข้าไปในโครงยึด ดังนั้นฉันจึงใส่ชุดตัวเว้นระยะชั่วคราวบนก้านสลักเพื่อให้มีระยะห่างเพียงพอ -- ประมาณ 3 ซม. ความสูงของเขียงหั่นขนม และอีกเล็กน้อย เพื่อไม่ให้สายไฟพัง ฉันใช้น๊อตยึดไม้สองอันต่อมุมเพราะมันสูงพอเหมาะและวางไว้ในลิ้นชักของผู้ชาย… กล่องนั้นมีทั้งสกรู โบลต์ ตะปู โซ่ตรวนขึ้นสนิม ข้อต่อสายยาง เหรียญเก่า ของมีคมที่คาดไม่ถึง และลักษณะอื่นๆ ชิ้นส่วนเล็กๆ น้อยๆ ที่สามารถช่วยคุณประหยัดเวลาในการเดินทางไปร้านฮาร์ดแวร์โดยเสนอสิ่งที่จะทำได้ดีหากไม่ใช่สิ่งที่คุณต้องการ

อุบัติเหตุที่มีความสุขเกี่ยวกับเสาสนามเด็กเล่นที่ฉันพบในห้องใต้ดินมีรูทะลุผ่านจานแล้ว ไม่ต้องเจาะเหล็ก! ฐานมีรูสลักสี่รู และเราเจาะรูที่ฝังไว้สี่รูในแผ่นไม้เพื่อให้เข้าคู่กัน

จากนั้นเราก็พ่นสีแบบโกธิกแบล็คทั้งหมด

ขั้นตอนที่ 2: การเตรียม Neopixel Rings

การเตรียม Neopixel Rings
การเตรียม Neopixel Rings

คุณจะต้องบัดกรีสายไฟเข้ากับวงแหวนนีโอพิกเซลของคุณ: สาย Data-In สำหรับทุกสาย สาย Data-Out สำหรับสองตัว และกำลังและสายดินสำหรับแต่ละตัว ไม่ว่าคุณจะต้องการความยาวเท่าใด ก็เพิ่มความยาวเข้าไป คุณสามารถตัดลวดส่วนเกินออกได้เสมอ คุณไม่สามารถยืดเส้นที่สั้นเกินไปได้ และพึงทราบคำเตือนจากอดาฟรุตว่า

เมื่อบัดกรีสายไฟเข้ากับวงแหวนเหล่านี้ คุณต้องระมัดระวังเป็นพิเศษเกี่ยวกับจุดบัดกรีและไฟฟ้าลัดวงจร ระยะห่างระหว่างส่วนประกอบแน่นมาก! มักจะง่ายที่สุดในการสอดลวดจากด้านหน้าและบัดกรีที่ด้านหลัง

ฉันหวังว่าฉันจะอ่านก่อนที่จะบัดกรีไปด้านหน้า ฉันจัดการที่จะไม่เผาไฟ LED ใดๆ ของฉันออก แต่ฉันเผาขอบของไฟ LED หนึ่งดวงจนทำให้เหงื่อออกจนเปิดเครื่อง นอกจากนี้ ถ้าฉันอ่านคู่มือดีๆ ฉันก็จะได้อ่านคำเตือนว่าอย่าใส่คลิปจระเข้บน LED ด้วย ให้ซากเรืออับปางของฉันเป็นประภาคารของคุณ

Neopixel วงแหวนเดซี่เชน ซึ่งหมายความว่าคุณสามารถควบคุม LED ทั้งหมดได้พร้อมกันจาก Arduino โดยเชื่อมต่อสายจาก OUT ของวงแหวนหนึ่งไปยัง IN ของอีกวงหนึ่ง แหวนแต่ละวงต้องการพลังงานและสายกราวด์ด้วย

ขั้นตอนที่ 3: การเดินสายไฟ

การเดินสายไฟ
การเดินสายไฟ

วางสายตามที่ Fritzing ด้านบน - ขา 6 ของ Arduino นำข้อมูลไปที่วงแหวนแรก Data-out จากวงแหวนนั้นไปที่ Data-in ของอันถัดไป Data-out ของอันนั้นไปที่ ข้อมูลในวงแหวนสุดท้าย คุณไม่จำเป็นต้องมีสาย data-out ของวงแหวนสุดท้าย

ความจุ 1,000 µf อยู่ระหว่างรางบวกและลบของเขียงหั่นขนม ฝาครอบนี้ปกป้องวงแหวนจากไฟกระชาก และแนะนำโดยส่วนแนวทางปฏิบัติที่ดีที่สุดของ Adafruit NeoPixel Uberguide Adafruit แนะนำให้ใช้ตัวต้านทานบน Data ในนีโอพิกเซลตัวแรกด้วย - เป็น 1K ใน Fritzing แต่ความต้านทานที่แนะนำคือ 300-500 โอห์ม

ในงานสร้างของฉัน ฉันเดินสายไฟจาก Neopixels ผ่านด้านหลังของเพลตไปยังเขียงหั่นขนมที่ยึดไว้ตรงกลาง ด้วยวิธีนี้ คุณจะต้องเดินสายไฟยาวสามเส้นเข้าไปในหน่วยฐานเท่านั้น: พลังงาน กราวด์ และข้อมูล ฉันทำสายไฟเหล่านี้ให้ยาวเป็นพิเศษ -- มีพื้นที่เก็บของมากมายในฐาน และทำให้สะดวกที่จะดึงบอร์ดออกมาเพื่อตั้งโปรแกรมใหม่

ขั้นตอนที่ 4: รหัส

"loading="lazy" พูดถึงลูกชายของฉันต้องการเวอร์ชั่นที่ตอบสนองทางดนตรีของสิ่งนี้ ใช้เวลาจนถึงวันเกิดครบรอบ 18 ปีของเขาเพื่อแก้ไขมัน แต่นี่มัน!

อุปกรณ์เพิ่มเติม:

1 ขั้วเดี่ยว สวิตช์ Double Throw1 ไมโครโฟนควบคุมอัตราขยายอัตโนมัติ (ฉันใช้ MAX9184 ของ AdaFruit) 1 ตัวเก็บประจุ 1uF-100uF (ค่าใดก็ได้)

ไมโครโฟนต้องมี Automatic Gain Control เพื่อให้ทำงานได้อย่างถูกต้อง AGC จะสุ่มตัวอย่างเสียงรอบข้างอย่างต่อเนื่อง และเพิ่มและลดเกณฑ์ที่พิจารณาจากพื้นหลัง ดังนั้นแสงของคุณจะตอบสนองต่อหนามแหลมบนพื้นหลังนั้น ไมโครโฟนของ AdaFruit นั้นยอดเยี่ยม: คุณสามารถไปจากห้องเงียบ ๆ ที่เสียงเดียวจะเรียกให้เข้าสู่โหมดปาร์ตี้เต็มรูปแบบด้วยห้องที่เต็มไปด้วยวัยรุ่นและเสียงดนตรีที่ดังก้อง และมันจะรับจังหวะของดนตรีเพียง ก็ได้. อีกทางเลือกหนึ่งคือ Mic Adjustable Gain Mic มีโพเทนชิออมิเตอร์ขนาดเล็กบนบอร์ดซึ่งมีความละเอียดอ่อนและเที่ยวยุ่งยิ่งเป็นไปไม่ได้ เสียงรอบข้างจะไม่เปลี่ยนแปลงมากนักเพื่อทำให้เครื่องไร้ประโยชน์: เปิดไฟตลอดเวลาหรือมืดตลอดเวลา AGC ทำงานเหมือนเวทมนตร์

ฉันต้องการตัวเลือกในการใช้รูปแบบการทดสอบการหมุนวนหรือเพลง ดังนั้นฉันจึงต่อสายกลางของสวิตช์ไปที่ VIN และสายหนึ่งไปยังขา 4 อีกสายหนึ่งเพื่อปักหมุด 8 ตัวของ Leonardo โดยการทดสอบพินเหล่านั้นสำหรับ HIGH หรือ LOW เราสามารถรู้ได้ว่าสวิตช์อยู่ในสถานะใดและรหัสสาขานั้นสอดคล้องกัน

ขั้นตอนที่ 7: การเดินสายไมโครโฟน

การเดินสายไมโครโฟน
การเดินสายไมโครโฟน

ป้อนอินพุตไมโครโฟนผ่านตัวเก็บประจุ 1-100µF นั้นลงใน Analogue Pin 0 หากตัวเก็บประจุของคุณเป็นแบบโพลาไรซ์ พินขาออกจะไปทางด้านบวก (สายสีเขียว)

ขอบคุณ CodeGirlJP สำหรับรูทีน Trinket-Color-by-Sound ซึ่งฉันดัดแปลงด้านล่าง:

// ไฟ LED ที่เปิดใช้งานเสียงด้วย Arduino และ NeoPixels

#รวม

#define MIC_PIN A0 // ต่อไมโครโฟนเข้ากับพิน a0 บน Leonardo

#define LED_PIN 6 // NeoPixel LED strand ต่อกับ pin 6 บน Leonardo #define N_PIXELS 36 // จำนวนพิกเซลใน LED strand !!!!!! ปรับจำนวนพิกเซลในการตั้งค่าของคุณ สิ่งนี้ถูกต้องสำหรับวงแหวน Neopixel 3 วง !!!!!! #define N 100 // จำนวนตัวอย่างที่ต้องใช้ในแต่ละครั้งที่อ่าน ตัวอย่างเรียกว่า #define fadeDelay 5 // เวลาหน่วงสำหรับแต่ละจำนวนการเฟด #define noiseLevel 30 // ระดับความชันของเสียงไมค์เฉลี่ยโดยไม่มีเสียง

//เริ่มต้นแถบ NeoPixel ด้วยค่าที่กำหนดไว้ด้านบน:

แถบ Adafruit_NeoPixel = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

ตัวอย่าง int[N]; // การจัดเก็บสำหรับชุดคอลเลกชันตัวอย่าง

int periodFactor = 0; // ติดตามจำนวน ms สำหรับการคำนวณระยะเวลา int t1 = -1; // ครั้งของความชัน > 100 ตรวจพบ อินท์ ที; // ระยะเวลาระหว่างเวลาที่ปรับขนาดเป็นมิลลิวินาที int ความชัน; // ความชันของสองจุดตัวอย่างข้อมูลที่รวบรวม ไบต์ periodChanged = 0; const int SwitchPinMusic = 4; // พินสำหรับตำแหน่งสวิตช์ ความไวของเพลง const int SwitchPinSwirl = 8; // ปักหมุดสำหรับตำแหน่งสวิตช์ รูปแบบการทดสอบ (หมุนวน) int MusicbuttonState = 0; // ปิดตัวแปรลอจิกสำหรับความไวของเพลง

// วิธีการตั้งค่า Arduino

การตั้งค่าเป็นโมฆะ () {

แถบ.begin();

ledsOff(); ล่าช้า (500); displayColor(ล้อ(100)); แถบ.show(); ล่าช้า (500); oddWheel(ล้อ(100)); แถบ.show(); ล่าช้า (500); โหมดพิน (SwitchPinMusic, INPUT); โหมดพิน (SwitchPinSwirl, INPUT); //attachInterrupt(4, Switched, FALLING);

}

// วิธีการวนรอบ Arduino

วงเป็นโมฆะ () { SwirlbuttonState = digitalRead (SwitchPinSwirl); // สูง หากสวิตช์ตั้งค่าเป็นความไวของเพลง MusicbuttonState = digitalRead (SwitchPinMusic); // สูง หากสวิตช์ตั้งค่าเป็นรูปแบบทดสอบในขณะที่ (SwirlbuttonState == LOW) { readSamples (); //เรียกใช้รูทีนการสุ่มตัวอย่างเพลง SwirlbuttonState = digitalRead(SwitchPinSwirl); //ตรวจสอบว่าสวิตช์ถูกเปลี่ยน } SwirlbuttonState = digitalRead(SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); ในขณะที่ (SwirlbuttonState == สูง) { เต้นรำ (); //เรียกใช้รูทีนรูปแบบการทดสอบแบบหมุนวน SwirlbuttonState = digitalRead(SwitchPinSwirl); //ตรวจสอบว่าสวิตช์ถูกเปลี่ยนหรือไม่

}

}

โมฆะเต้นรำ () {

ในขณะที่ (SwirlbuttonState == สูง) { colorWipe (แถบสี (255, 0, 0), 50); // สีแดง SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe(แถบสี(0, 255, 0), 50); // Green SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe(แถบสี(0, 0, 255), 50); // สีน้ำเงิน SwirlbuttonState = digitalRead (SwitchPinSwirl); //colorWipe(แถบสี(0, 0, 0, 255), 50); // RGBW สีขาว // ส่งการไล่ล่าพิกเซลของโรงภาพยนตร์ใน… SwirlbuttonState = digitalRead(SwitchPinSwirl); โรงละครเชส(แถบ.สี(127, 127, 127), 50); // สีขาว SwirlbuttonState = digitalRead (SwitchPinSwirl); โรงละครเชส(แถบ.สี(127, 0, 0), 50); // สีแดง SwirlbuttonState = digitalRead (SwitchPinSwirl); โรงละครเชส(แถบ.สี(0, 0, 127), 50); // สีน้ำเงิน SwirlbuttonState = digitalRead (SwitchPinSwirl); รุ้ง(20); SwirlbuttonState = digitalRead (SwitchPinSwirl); วงจรรุ้ง(20); SwirlbuttonState = digitalRead (SwitchPinSwirl); โรงละครเชสเรนโบว์(50); SwirlbuttonState = digitalRead (SwitchPinSwirl); } } // อ่านและประมวลผลข้อมูลตัวอย่างจาก Mic โมฆะ readSamples () { สำหรับ (int i = 0; i0) { ความชัน = ตัวอย่าง - ตัวอย่าง [i-1]; } อื่น { ความชัน = ตัวอย่าง - ตัวอย่าง[N-1]; } // ตรวจสอบว่า Slope มากกว่า noiseLevel หรือไม่ - ตรวจพบเสียงที่ไม่อยู่ในระดับเสียงรบกวน if(abs(slope) > noiseLevel) { if(slope < 0) { คำนวณระยะเวลา (i); if(periodChanged == 1) { displayColor(getColor(T)); } } } อื่น { ledsOff(); // โรงละคร ChaseRainbow(50); } periodFactor += 1; ล่าช้า(1); } }

เป็นโมฆะ คำนวณระยะเวลา (int i)

{ if(t1 == -1) { // t1 ยังไม่ได้ตั้งค่า t1 = i; } อื่น { // t1 ถูกตั้งค่าดังนั้น calc period int period = periodFactor*(i - t1); periodChanged = T==ระยะเวลา ? 0: 1; T = ระยะเวลา; //Serial.println(T);/ // รีเซ็ต t1 เป็นค่า i ใหม่ t1 = i; periodFactor = 0; } }

uint32_t getColor (ช่วงเวลา int)

{ if(period == -1) return Wheel(0); อื่น ๆ ถ้า (ระยะเวลา > 400) ส่งคืน Wheel(5); มิฉะนั้น ส่งคืน Wheel(แผนที่(-1*ระยะเวลา, -400, -1, 50, 255)); }

เป็นโมฆะ fadeOut()

{ สำหรับ(int i=0; i<5; i++) { strip.setBrightness(110 - i*20); แถบ.show(); // อัปเดตแถบล่าช้า (fadeDelay); periodFactor +=fadeDelay; } }

เป็นโมฆะ fadeIn()

{ แถบ. setBrightness (100); แถบ.show(); // อัปเดตแถบ // สีจางลงใน for (int i=0; i<5; i++) { //strip.setBrightness(20*i + 30); //แถบ.show(); // อัพเดตแถบดีเลย์ (fadeDelay); periodFactor+=fadeDelay; } }

เป็นโมฆะ ledsOff()

{ fadeOut(); สำหรับ(int i=0; i

เป็นโมฆะ displayColor (สี uint32_t)

{ สำหรับ(int i=0; i

เป็นโมฆะ oddWheel (สี uint32_t)

{ สำหรับ (int j=0; j < 256; j++) { // วนทั้งหมด 256 สีในวงล้อสำหรับ (int q=0; q < 3; q++) { สำหรับ (uint16_t i=24; i < 36; i =i+3) { strip.setPixelColor(i+q, วงล้อ((i+j) % 255)); // เปิดทุก ๆ พิกเซลที่สามบน } strip.show();

ล่าช้า(1);

สำหรับ (uint16_t i=24; i < 36; i=i+3) { strip.setPixelColor(i+q, 0); //ปิดทุก ๆ พิกเซลที่สาม } } } fadeIn(); }

// เติมจุดทีละจุดด้วยสี

เป็นโมฆะ colorWipe (uint32_t c, uint8_t รอ) { สำหรับ (uint16_t i=0; i

รุ้งเป็นโมฆะ (uint8_t รอ) {

uint16_t ผม, เจ;

สำหรับ(j=0; j<256; j++) { สำหรับ(i=0; i

// ต่างกันเล็กน้อย ทำให้รุ้งกระจายไปทั่ว

เป็นโมฆะ rainbowCycle (uint8_t รอ) { uint16_t i, j;

สำหรับ (j=0; j<256*5; j++) {// 5 รอบของสีทั้งหมดบนวงล้อ for (i=0; i< strip.numPixels(); i++) { strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels()) + j) & 255)); } strip.show(); ล่าช้า(รอ); } }

//ไฟคลานแบบโรงละคร

เป็นโมฆะ theatreChase (uint32_t c, uint8_t รอ) { สำหรับ (int j=0; j<10; j++) {// ไล่ตาม 10 รอบ (int q=0; q <3; q++) { สำหรับ (uint16_t i= 0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, c); // เปิดทุก ๆ พิกเซลที่สามบน } strip.show();

ล่าช้า(รอ);

สำหรับ (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //ปิดทุกๆ พิกเซลที่สาม } } } }

//ไฟคลานสไตล์โรงละครพร้อมเอฟเฟกต์สีรุ้ง

void theaterChaseRainbow (uint8_t wait) { สำหรับ (int j=0; j < 256; j++) { // วนรอบ 256 สีทั้งหมดในวงล้อสำหรับ (int q=0; q < 3; q++) { สำหรับ (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, วงล้อ((i+j) % 255)); // เปิดทุก ๆ พิกเซลที่สามบน } strip.show();

ล่าช้า(รอ);

สำหรับ (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //ปิดทุกๆ พิกเซลที่สาม } } } }

// ป้อนค่า 0 ถึง 255 เพื่อรับค่าสี

// สีเป็นการเปลี่ยน r - g - b - กลับ r. uint32_t Wheel (ไบต์ WheelPos) { WheelPos = 255 - WheelPos; ถ้า (WheelPos <85) { แถบส่งคืน. สี (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) { WheelPos -= 85; แถบส่งคืน.สี(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; แถบส่งคืน.สี(WheelPos * 3, 255 - WheelPos * 3, 0); }

เป็นโมฆะ Switched (){

แถบ.show(); อ่านตัวอย่าง (); }

ก่อนที่ฉันจะถูกฆ่าในความคิดเห็น (จำนโยบาย Be Nice !!) ฉันรู้หลังจากที่ฉันอัปโหลดโค้ดของฉันบางส่วนที่เลอะเทอะ ไม่จำเป็นต้องทดสอบทั้ง Pin 4 และ Pin 8 สำหรับ HIGH อย่างต่อเนื่อง เนื่องจากสวิตช์เป็นแบบขั้วเดี่ยวแบบดับเบิ้ลโยน ค่าของอันหนึ่งจึงสามารถอนุมานได้จากอีกอันหนึ่ง คุณเพียงแค่ต้องทดสอบอันหนึ่งเท่านั้น ดังนั้นคุณจึงสามารถอ่านและลบการอ้างอิงถึงการอ่านและการเขียน MusicButtonState ทั้งหมด และเรียกใช้สิ่งทั้งหมดได้อย่างมีประสิทธิภาพมากขึ้นโดยการทดสอบ SwirlButtonState หากคุณมีหน่วยความจำเหลือน้อยหรือขยายกับกิจวัตรอื่นๆ แต่โค้ดด้านบนใช้งานได้

และถ้าใครต้องการปรับแต่งกิจวัตรเสียงเหล่านั้นให้รับรู้ไม่ใช่แค่ระดับเสียง แต่รวมถึงความถี่ด้วย และเขียนโค้ดที่ราบรื่นเพื่อเลื่อนขึ้นและลงสเปกตรัมแสงเพื่อตอบสนองต่อการเคลื่อนที่ไปตามสเปกตรัมเสียง วางลิงก์ในความคิดเห็นที่ คุณทำมันได้อย่างไร

สนุก!

แนะนำ: