Met dit project kun je de kracht van je bewegingen gebruiken om een RGB-led te besturen. Je hebt de Sparkfun APDS-9960 nodig en een gewone CATHODE, geen anode, RGB LED. Zorg ervoor dat je een 5v Arduino-bord gebruikt met de 4.7k Ohm-weerstanden, omdat deze sensor het I2C-protocol gebruikt. Sluit vervolgens aan zoals in het schema. Van daaruit kunt u aangepaste kleuren in de code toevoegen. Ik heb er al 6 geplaatst. De standaardbedieningen zijn:veeg omhoog om het in te schakelen, veeg omlaag om het uit te schakelen, veeg naar rechts om vooruit te gaan naar de volgende kleur en naar links om achteruit te gaan. Deze code kan ook worden aangepast aan vele andere soorten projecten! Voel je vrij om te experimenteren en meer geweldige projecten te maken. Veel plezier met maken!
Code
Arduino-codeC/C++
Kopieer en plak#include #include // Pins#define APDS9960_INT 2 // Moet een interrupt-pin zijn// Constantsint red_pin =A0;int green_pin =A1;int blue_pin =A2;int onOff_flag =0;//Maak de array doorlopend colorNumber =0;// Global VariablesSparkFun_APDS9960 apds =SparkFun_APDS9960();int isr_flag =0;void setup() {// Stel de interrupt-pin in als input pinMode (APDS9960_INT, INVOER); // Initialiseer seriële poort Serial.begin (9600); Serieel.println(); Serial.println(F("--------------------------------")); Serial.println(F("SparkFun APDS-9960 - GestureTest")); Serial.println(F("--------------------------------")); // Initialiseer interrupt-serviceroutine attachInterrupt(0, interruptRoutine, FALLING); // Initialiseer APDS-9960 (configureer I2C en initiële waarden) if (apds.init()) { Serial.println(F("APDS-9960 initialisatie voltooid")); } else { Serial.println(F("Er is iets misgegaan tijdens APDS-9960 init!")); } // Start de APDS-9960-bewegingssensor-engine als ( apds.enableGestureSensor (true) ) { Serial.println (F ("Gebaarsensor is nu actief")); } else { Serial.println(F("Er is iets misgegaan tijdens het opstarten van de bewegingssensor!")); } pinMode (A0, UITGANG); pinMode (A1, UITGANG); pinMode (A2, UITGANG); analoogWrite(A0, 0); analoogWrite(A1, 0); analogWrite(A2, 0);}void loop() {if(isr_flag ==1 ) {detachInterrupt(0); handvatGesture(); isr_vlag =0; attachInterrupt(0, interruptRoutine, FALLING); } if (onOff_flag ==1){ switch (colorNumber){ case 0:Serial.println("red"); analogWrite(red_pin, 255); analogWrite(green_pin, 0); analoogWrite(blue_pin, 0); pauze; geval 1:Serial.println ("babyblauw"); analogWrite(red_pin, 255); analogWrite(green_pin, 153); analogWrite(blue_pin, 204); pauze; geval 2:Serial.println ("donkerblauw"); analoogWrite(red_pin, 100); analogWrite(green_pin, 0); analoogWrite(blue_pin, 170); pauze; geval 3:Serial.println("groen"); analogWrite(red_pin, 0); analogWrite(green_pin, 255); analoogWrite(blue_pin, 0); pauze; geval 4:Serial.println ("blauw"); analogWrite(red_pin, 0); analogWrite(green_pin, 0); analoogWrite(blue_pin, 255); pauze; geval 5:Serial.println ("violet"); analoogWrite(red_pin, 191); analogWrite(green_pin, 0); analoogWrite(blue_pin, 255); pauze; }}else if(onOff_flag ==0){ analogWrite(red_pin, 0); analogWrite(green_pin, 0); analogWrite(blue_pin, 0);}delay(1000);}void interruptRoutine() {isr_flag =1;}void handleGesture() {if (apds.isGestureAvailable()) { switch (apds.readGesture()) { case DIR_UP:Serieel.println("UP"); onOff_flag =1; pauze; geval DIR_DOWN:Serial.println ("DOWN"); onOff_flag =0; pauze; geval DIR_LEFT:Serial.println ("LEFT"); if(onOff_flag ==1){ if(colorNumber>0){ colorNumber -=1; Serial.println (kleurnummer); } else if(colorNumber <1){ colorNumber =5; Serial.println (kleurnummer); } } pauze; geval DIR_RIGHT:Serial.println ("RIGHT"); if(onOff_flag ==1){ if(colorNumber <5){ colorNumber +=1; Serial.println (kleurnummer); } else if(colorNumber> 4){ colorNumber =0; Serial.println (kleurnummer); } } pauze; geval DIR_NEAR:Serial.println ("NEAR"); pauze; geval DIR_FAR:Serial.println ("FAR"); pauze; standaard:Serial.println ("GEEN"); } }}
Schema's
Verbind zoals het is.