/*
【Arduino】108种传感器模块系列实验(99)
实验九十九: APDS-9960 GY-9960-3.3 RGB红外手势传感器 方向识别模块
1、工具-管理库-搜索“SparkFun_APDS-9960”库-安装
2、项目:串口显示测量的四组数据(未接入LCD)
3、实验接脚
SDA = A4
SCL= A5
GND = GND
VCC = 3.3V
*/
#include <Wire.h>
#include <SparkFun_APDS9960.h>
#include <LiquidCrystal.h>
SparkFun_APDS9960 apds = SparkFun_APDS9960();
uint16_t ambient_light = 0;
uint16_t red_light = 0;
uint16_t green_light = 0;
uint16_t blue_light = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - ColorSensor"));
Serial.println(F("--------------------------------"));
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
if ( apds.enableLightSensor(false) ) {
Serial.println(F("Light sensor is now running"));
} else {
Serial.println(F("Something went wrong during light sensor init!"));
}
delay(500);
}
void loop() {
if (!apds.readAmbientLight(ambient_light) ||
!apds.readRedLight(red_light) ||
!apds.readGreenLight(green_light) ||
!apds.readBlueLight(blue_light) ) {
Serial.println("Error reading light values");
} else {
Serial.print("Ambient: ");
Serial.print(ambient_light);
lcd.setCursor(1, 0);
lcd.print(red_light);
Serial.print(" Red: ");
Serial.print(red_light);
lcd.setCursor(7, 0);
lcd.print(green_light);
Serial.print(" Green: ");
Serial.print(green_light);
lcd.setCursor(1, 1);
lcd.print(blue_light);
Serial.print(" Blue: ");
Serial.println(blue_light);
}
delay(1000);
}
初始化后距离台灯40CM的数据
不同手势,四组数据各不相同
/*
【Arduino】108种传感器模块系列实验(99)
实验九十九: APDS-9960 GY-9960-3.3 RGB红外手势传感器 方向识别模块
1、工具-管理库-搜索“SparkFun_APDS-9960”库-安装
2、项目二:接入中断,串口显示7个不同的手势符号
UP=向上
DOWN=向下
LEFT=向左
RIGHT=向右
NEAR=向近
FAR=向远
NONE=无动作
3、实验接脚
INT = D2
SDA = A4
SCL= A5
GND = GND
VCC = 3.3V
*/
#include <Wire.h>
#include <SparkFun_APDS9960.h>
// Pins
#define APDS9960_INT 2 // Needs to be an interrupt pin
// Constants
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
// Initialize Serial port
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Initialize interrupt service routine
attachInterrupt(0, interruptRoutine, FALLING);
// Initialize APDS-9960 (configure I2C and initial values)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Start running the APDS-9960 gesture sensor engine
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}
}
void loop() {
if( isr_flag == 1 ) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
break;
case DIR_RIGHT:
Serial.println("RIGHT");
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。
实验一百: AT-09蓝牙4.0BLE 模块 串口引出 CC2541兼容HM-10模块
CC2541
是一款针对低能耗以及私有 2.4GHz 应用的功率优化的真正片载系统 (SoC) 解决方案。 它使得使用低总体物料清单成本建立强健网络节点成为可能。 CC2541 将领先 RF 收发器的出色性能和一个业界标准的增强型 8051 MCU、系统内可编程闪存存储器、8kB RAM 和很多其它功能强大的特性和外设组合在一起。 CC2541 非常适合应用于需要超低能耗的系统。 这由多种不同的运行模式指定。 运行模式间较短的转换时间进一步使低能耗变为可能。
如果CC2540上
的USB未启用并且CC2541上的I2C/额外I/O未启用,那么CC2541与CC2540在6mmx6mm方形扁平无引脚(QFN)40封装内引脚兼容。与CC2540相比,CC2541提供更低RF流耗。CC2541没有CC2540所具有的USB接口,并在TX模式中提供较低的最大输出功率CC2541还增加了1个HWI2C接口。CC2541与CC2533优化RF4CEIEEE802.15.4SoC引脚兼容。CC2541有2个不同的版本:分别具有128kB和256kB闪存的的CC2541F128/F256。
CC2540/41特性
(1)射频
–2.4GHz蓝牙符合低能耗规范和私有的RF片载系统
–支持250kbps,500kbps,1Mbps,2Mbps的制器内核数据速率–出色的链路预算,不使用外部前段而支持长距离应用–高达0dBm的可编程输出功率
–出色的接收器灵敏度(1Mbps时为-94dBm),可选择性,和阻挡性能
–适合于针对符合世界范围内的无线电频率调节系统:ETSIEN300328和EN3004402类(欧洲),FCCCFR4715部分(美国),和ARIBSTD-T66(日本)
(2)布局
–极少的外部组件–提供参考设计支持
–6mm×6mm方形扁平无引脚(QFN)-40封装
–与CC2540引脚兼容(当不使用USB或者I2C时)(ADC)
(3)低功率
–工作模式RX低至:17.9mA
–工作模式TX(0dBm):18.2mA–功率模式1(4μs唤醒):270μs–功率模式2(睡眠定时器打开):1μs–功率模式3(外部中断):0.5μs
(4)工作模式下TPS62730兼容低功率
–RX低至:14.7mA(3V电源)–TX(0dBm):14.3mA(3V电源)
(5)微控制器
–具有代码预取功能的高性能和低功率8051微控制器内核
–系统内可编程闪存,128或者256KB
–在所有功率模式下具有保持功能的8KBRAM
–支持硬件调试
–扩展基带自动化,包括自动确认和地址解码
–所有功率模式中对所有相关寄存器的保持
(6)外设
–功能强大的5通道直接内存访问(DMA)
–通用定时器(1个16位,2个8位)
–红外(IR)生成电路
–具有捕捉功能的32kHz睡眠定时器
–精确数字接收到的数字信号强度指示器(RSSI)支持
–电池监视器和温度感应器
–含8通道和可配置分辨率的12位模数转换器(ADC)
–高级加密标准(AES)安全协处理器
–2个功能强大的支持几个串行协议的通用异步接收发器(UART)
–23个通用I/O引脚(21×4mA,2×20mA)
–I2C接口
–2个具有LED驱动功能的I/O引脚
–安全装置定时器
–集成的高性能比较器(7)开发工具
–CC2541评估模块工具包(CC2541EMK)
–CC2541小型开发工具包(CC2541DK-MINI)
–SmartRF™软件
–提供IAR嵌入式Workbench™