运动控制换色器!
组件和用品
关于这个项目
该项目将使您能够利用动作的力量来控制 RGB LED。您将需要 Sparkfun APDS-9960 和一个普通的阴极,而不是阳极,RGB LED。确保使用带有 4.7k Ohm 电阻器的 5v Arduino 板,因为该传感器使用 I2C 协议。然后按照原理图连接。从那里您可以在代码中添加自定义颜色。我已经放了6个。默认控件是:向上滑动以打开它,向下滑动以关闭它,向右滑动以前进到下一种颜色,向左滑动以反转。此代码也可以适用于许多其他类型的项目!随意尝试并创建更多很棒的项目。快乐制作!
面包板上的产品图片:
代码
Arduino 代码C/C++
Copy and Paste#include #include // Pins#define APDS9960_INT 2 // 需要是中断pin// Constantsint red_pin =A0;int green_pin =A1;int blue_pin =A2;int onOff_flag =0;//让数组循环通过int colorNumber =0;//全局变量SparkFun_APDS9960 apds =SparkFun_APDS9960();int isr_flag =0;void setup() { //设置中断引脚为输入pinMode(APDS9960_INT,输入); // 初始化串口Serial.begin(9600); Serial.println(); Serial.println(F("--------------------------------")); Serial.println(F("SparkFun APDS-9960 - GestureTest")); Serial.println(F("--------------------------------")); // 初始化中断服务程序 attachInterrupt(0, interruptRoutine, FALLING); // 初始化 APDS-9960(配置 I2C 和初始值) if ( apds.init() ) { Serial.println(F("APDS-9960 初始化完成")); } else { Serial.println(F("APDS-9960 初始化期间出现问题!")); } // 开始运行 APDS-9960 手势传感器引擎 if ( apds.enableGestureSensor(true) ) { Serial.println(F("Gesture sensor is now running")); } else { Serial.println(F("手势传感器初始化过程中出现问题!"));引脚模式(A0,输出); pinMode(A1,输出); pinMode(A2,输出);模拟写入(A0,0);模拟写入(A1,0);模拟写入(A2, 0);}void loop() { if( isr_flag ==1 ) { detachInterrupt(0);处理手势(); isr_flag =0; attachInterrupt(0,interruptRoutine,下降); } if (onOff_flag ==1){ switch (colorNumber){ case 0:Serial.println("red");模拟写入(红针,255);模拟写入(green_pin,0);模拟写入(blue_pin,0);休息;案例 1:Serial.println("小蓝");模拟写入(红针,255);模拟写入(green_pin,153);模拟写入(blue_pin,204);休息;情况 2:Serial.println("深蓝色");模拟写入(red_pin,100);模拟写入(green_pin,0);模拟写入(蓝针,170);休息;案例 3:Serial.println("green");模拟写入(red_pin,0);模拟写入(green_pin,255);模拟写入(blue_pin,0);休息;案例 4:Serial.println("blue");模拟写入(red_pin,0);模拟写入(green_pin,0);模拟写入(blue_pin,255);休息;案例 5:Serial.println("紫罗兰色");模拟写入(红针,191);模拟写入(green_pin,0);模拟写入(blue_pin,255);休息; }}else if(onOff_flag ==0){analogWrite(red_pin, 0);模拟写入(green_pin,0);模拟写入(blue_pin,0);}延迟(1000);}void interruptRoutine(){ isr_flag =1;}void handleGesture(){ if(apds.isGestureAvailable()){ switch(apds.readGesture()){ case DIR_UP: Serial.println("UP"); onOff_flag =1;休息; case DIR_DOWN:Serial.println("DOWN"); onOff_flag =0;休息; case DIR_LEFT:Serial.println("LEFT"); if(onOff_flag ==1){ if(colorNumber>0){ colorNumber -=1; Serial.println(colorNumber); } else if(colorNumber <1){ colorNumber =5; Serial.println(colorNumber); } } 休息; case DIR_RIGHT:Serial.println("RIGHT"); if(onOff_flag ==1){ if(colorNumber <5){ colorNumber +=1; Serial.println(colorNumber); } else if(colorNumber> 4){ colorNumber =0; Serial.println(colorNumber); } } 休息; case DIR_NEAR:Serial.println("NEAR");休息; case DIR_FAR:Serial.println("FAR");休息;默认值:Serial.println("NONE"); } }}
示意图
按原样连接。