前言

开发板:Arduino Uno Rev3 创客主板
开发环境:Arduino IDE
开发语言:Arduino 语言(类C语言)
模块:PAJ7620U2


源码参考官方例程,并加以功能修改。
paj7620官方例程:https://www.arduino.cc/reference/en/libraries/gesture-paj7620/
wire库官方文档:https://www.arduino.cc/en/Reference/Wire

功能介绍:

一共定义了 9种模式,分别为 全关、全开、LED1亮、LED1灭、LED2亮、LED2灭、LED1闪烁、LED2闪烁和LED流动闪烁。

#define ALL_OFF 0
#define ALL_ON 1
#define LED1_ON 2
#define LED1_OFF 3
#define LED2_ON 4
#define LED2_OFF 5
#define LED1_TWINKLE 6
#define LED2_TWINKLE 7
#define LED_FLOW 8

一共是9种手势的识别,分别为 向右挥,向左挥,向上挥,向下挥,靠近,后退,顺时针,逆时针和挥手。

#define GES_RIGHT_FLAG               PAJ7620_VAL(1,0)
#define GES_LEFT_FLAG               PAJ7620_VAL(1,1)
#define GES_UP_FLAG                 PAJ7620_VAL(1,2)
#define GES_DOWN_FLAG               PAJ7620_VAL(1,3)
#define GES_FORWARD_FLAG            PAJ7620_VAL(1,4)
#define GES_BACKWARD_FLAG           PAJ7620_VAL(1,5)
#define GES_CLOCKWISE_FLAG          PAJ7620_VAL(1,6)
#define GES_COUNT_CLOCKWISE_FLAG    PAJ7620_VAL(1,7)
#define GES_WAVE_FLAG               PAJ7620_VAL(1,0)

手势和模式的对应关系

向左挥      LED1(左边的灯即LED1)亮灭
向右挥      LED2(右边的灯即LED2)亮灭
向上挥      全亮
向下挥      全灭
靠近        全灭
后退        全亮
顺时针      LED1闪烁
逆时针      LED2闪烁
挥手        LED流水闪烁

接线

2 3口接灯负极(灯正极串 1k欧电阻 接5v)UNO       PAJ7620U2
3.3V -》  VCC
GND  -》  GND
SCL  -》  SCL
SDA  -》  SDA


效果图

温馨提示:效果随便看看就好(因为gif上传限制,所以gif帧数和画质都比较渣) 看久了 有点晕

左挥 LED1亮 右挥 LED2亮
左挥 LED1灭 右挥 LED2灭

上挥 全亮, 下挥 全灭

逆时针 LED2闪烁,顺时针 LED1闪烁,下挥 全灭

挥手 LED流水闪烁

远离 全亮,靠近 全灭

源码

paj7620_9gestures.ino

/*Copyright (c) 2015 seeed technology inc.Website    : www.seeed.ccAuthor     : WuruibinModified Time: June 2015Description: This demo can recognize 9 gestures and output the result, including move up, move down, move left, move right,move forward, move backward, circle-clockwise, circle-counter clockwise, and wave.The MIT License (MIT)Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INTHE SOFTWARE.
*/#include <Wire.h>
#include "paj7620.h"/*Notice: When you want to recognize the Forward/Backward gestures, your gestures' reaction time must less than GES_ENTRY_TIME(0.8s).You also can adjust the reaction time according to the actual circumstance.
*/
#define GES_REACTION_TIME       500             // You can adjust the reaction time according to the actual circumstance.
#define GES_ENTRY_TIME          800             // When you want to recognize the Forward/Backward gestures, your gestures' reaction time must less than GES_ENTRY_TIME(0.8s).
#define GES_QUIT_TIME           1000#define ALL_OFF 0
#define ALL_ON 1
#define LED1_ON 2
#define LED1_OFF 3
#define LED2_ON 4
#define LED2_OFF 5
#define LED1_TWINKLE 6
#define LED2_TWINKLE 7
#define LED_FLOW 8int LED1 = 2; //LED1接主板的数字2口
int LED2 = 3; //LED2接主板的数字3口
// 模式
int mode = 0;void setup()
{pinMode(LED1, OUTPUT);//设置数字2 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。pinMode(LED2, OUTPUT);//设置数字3 口为输出接口uint8_t error = 0;Serial.begin(9600);Serial.println("\nPAJ7620U2 TEST DEMO: Recognize 9 gestures.");error = paj7620Init();          // initialize Paj7620 registersif (error){Serial.print("INIT ERROR,CODE:");Serial.println(error);}else{Serial.println("INIT OK");}Serial.println("Please input your gestures:\n");
}void loop()
{uint8_t data = 0, data1 = 0, error;uint8_t temp = 0;error = paj7620ReadReg(0x43, 1, &data);                // Read Bank_0_Reg_0x43/0x44 for gesture result.if (!error){switch (data)                                   // When different gestures be detected, the variable 'data' will be set to different values by paj7620ReadReg(0x43, 1, &data).{case GES_RIGHT_FLAG:delay(GES_ENTRY_TIME);paj7620ReadReg(0x43, 1, &data);if (data == GES_FORWARD_FLAG){Serial.println("Forward");mode = ALL_OFF;delay(GES_QUIT_TIME);}else if (data == GES_BACKWARD_FLAG){Serial.println("Backward");mode = ALL_ON;delay(GES_QUIT_TIME);}else{Serial.println("Right");temp = digitalRead(LED2);if(temp == 0) mode = LED2_OFF;else mode = LED2_ON;}break;case GES_LEFT_FLAG:delay(GES_ENTRY_TIME);paj7620ReadReg(0x43, 1, &data);if (data == GES_FORWARD_FLAG){Serial.println("Forward");mode = ALL_OFF;delay(GES_QUIT_TIME);}else if (data == GES_BACKWARD_FLAG){Serial.println("Backward");mode = ALL_ON;delay(GES_QUIT_TIME);}else{Serial.println("Left");temp = digitalRead(LED1);if(temp == 0) mode = LED1_OFF;else mode = LED1_ON;}break;case GES_UP_FLAG:delay(GES_ENTRY_TIME);paj7620ReadReg(0x43, 1, &data);if (data == GES_FORWARD_FLAG){Serial.println("Forward");mode = ALL_OFF;delay(GES_QUIT_TIME);}else if (data == GES_BACKWARD_FLAG){Serial.println("Backward");mode = ALL_ON;delay(GES_QUIT_TIME);}else{Serial.println("Up");mode = ALL_ON;}break;case GES_DOWN_FLAG:delay(GES_ENTRY_TIME);paj7620ReadReg(0x43, 1, &data);if (data == GES_FORWARD_FLAG){Serial.println("Forward");mode = ALL_OFF;delay(GES_QUIT_TIME);}else if (data == GES_BACKWARD_FLAG){Serial.println("Backward");mode = ALL_ON;delay(GES_QUIT_TIME);}else{Serial.println("Down");mode = ALL_OFF;}break;case GES_FORWARD_FLAG:Serial.println("Forward");mode = ALL_OFF;delay(GES_QUIT_TIME);break;case GES_BACKWARD_FLAG:Serial.println("Backward");mode = ALL_ON;delay(GES_QUIT_TIME);break;case GES_CLOCKWISE_FLAG:Serial.println("Clockwise");mode = LED1_TWINKLE;break;case GES_COUNT_CLOCKWISE_FLAG:Serial.println("anti-clockwise");mode = LED2_TWINKLE;break;default:paj7620ReadReg(0x44, 1, &data1);if (data1 == GES_WAVE_FLAG){Serial.println("wave");mode = LED_FLOW;}break;}}// LED工作模式switch (mode){case ALL_OFF:digitalWrite(LED1, HIGH);//熄灭LED1digitalWrite(LED2, HIGH);//熄灭LED2break;case ALL_ON:digitalWrite(LED1, LOW);//点亮LED1digitalWrite(LED2, LOW);//点亮LED2break;case LED1_ON:digitalWrite(LED1, LOW);//点亮LED1break;case LED1_OFF:digitalWrite(LED1, HIGH);//熄灭LED1break;case LED2_ON:digitalWrite(LED2, LOW);//点亮LED2break;case LED2_OFF:digitalWrite(LED2, HIGH);//熄灭LED2break;case LED1_TWINKLE:temp = digitalRead(LED1);// Serial.print("temp1:");// Serial.println(temp);temp = temp > 0 ? 0 : 1;digitalWrite(LED1, temp);break;case LED2_TWINKLE:temp = digitalRead(LED2);// Serial.print("temp2:");// Serial.println(temp);temp = temp > 0 ? 0 : 1;digitalWrite(LED2, temp);break;case LED_FLOW:temp = digitalRead(LED1);// Serial.print("temp3:");// Serial.println(temp);digitalWrite(LED2, temp);temp = temp > 0 ? 0 : 1;digitalWrite(LED1, temp);break;default:break;}delay(500);
}

paj7620.cpp

/*paj7620.cppA library for Grove-Guesture 1.0Copyright (c) 2015 seeed technology inc.Website    : www.seeed.ccAuthor     : Wuruibin & XiangnanModified Time: June 2015The MIT License (MIT)Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INTHE SOFTWARE.
*/#include <Wire.h>
#include "paj7620.h"
#include <Arduino.h>// PAJ7620U2_20140305.asc
/* Registers' initialization data */
unsigned char initRegisterArray[][2] = {   // Initial Gesture{0xEF, 0x00},{0x32, 0x29},{0x33, 0x01},{0x34, 0x00},{0x35, 0x01},{0x36, 0x00},{0x37, 0x07},{0x38, 0x17},{0x39, 0x06},{0x3A, 0x12},{0x3F, 0x00},{0x40, 0x02},{0x41, 0xFF},{0x42, 0x01},{0x46, 0x2D},{0x47, 0x0F},{0x48, 0x3C},{0x49, 0x00},{0x4A, 0x1E},{0x4B, 0x00},{0x4C, 0x20},{0x4D, 0x00},{0x4E, 0x1A},{0x4F, 0x14},{0x50, 0x00},{0x51, 0x10},{0x52, 0x00},{0x5C, 0x02},{0x5D, 0x00},{0x5E, 0x10},{0x5F, 0x3F},{0x60, 0x27},{0x61, 0x28},{0x62, 0x00},{0x63, 0x03},{0x64, 0xF7},{0x65, 0x03},{0x66, 0xD9},{0x67, 0x03},{0x68, 0x01},{0x69, 0xC8},{0x6A, 0x40},{0x6D, 0x04},{0x6E, 0x00},{0x6F, 0x00},{0x70, 0x80},{0x71, 0x00},{0x72, 0x00},{0x73, 0x00},{0x74, 0xF0},{0x75, 0x00},{0x80, 0x42},{0x81, 0x44},{0x82, 0x04},{0x83, 0x20},{0x84, 0x20},{0x85, 0x00},{0x86, 0x10},{0x87, 0x00},{0x88, 0x05},{0x89, 0x18},{0x8A, 0x10},{0x8B, 0x01},{0x8C, 0x37},{0x8D, 0x00},{0x8E, 0xF0},{0x8F, 0x81},{0x90, 0x06},{0x91, 0x06},{0x92, 0x1E},{0x93, 0x0D},{0x94, 0x0A},{0x95, 0x0A},{0x96, 0x0C},{0x97, 0x05},{0x98, 0x0A},{0x99, 0x41},{0x9A, 0x14},{0x9B, 0x0A},{0x9C, 0x3F},{0x9D, 0x33},{0x9E, 0xAE},{0x9F, 0xF9},{0xA0, 0x48},{0xA1, 0x13},{0xA2, 0x10},{0xA3, 0x08},{0xA4, 0x30},{0xA5, 0x19},{0xA6, 0x10},{0xA7, 0x08},{0xA8, 0x24},{0xA9, 0x04},{0xAA, 0x1E},{0xAB, 0x1E},{0xCC, 0x19},{0xCD, 0x0B},{0xCE, 0x13},{0xCF, 0x64},{0xD0, 0x21},{0xD1, 0x0F},{0xD2, 0x88},{0xE0, 0x01},{0xE1, 0x04},{0xE2, 0x41},{0xE3, 0xD6},{0xE4, 0x00},{0xE5, 0x0C},{0xE6, 0x0A},{0xE7, 0x00},{0xE8, 0x00},{0xE9, 0x00},{0xEE, 0x07},{0xEF, 0x01},{0x00, 0x1E},{0x01, 0x1E},{0x02, 0x0F},{0x03, 0x10},{0x04, 0x02},{0x05, 0x00},{0x06, 0xB0},{0x07, 0x04},{0x08, 0x0D},{0x09, 0x0E},{0x0A, 0x9C},{0x0B, 0x04},{0x0C, 0x05},{0x0D, 0x0F},{0x0E, 0x02},{0x0F, 0x12},{0x10, 0x02},{0x11, 0x02},{0x12, 0x00},{0x13, 0x01},{0x14, 0x05},{0x15, 0x07},{0x16, 0x05},{0x17, 0x07},{0x18, 0x01},{0x19, 0x04},{0x1A, 0x05},{0x1B, 0x0C},{0x1C, 0x2A},{0x1D, 0x01},{0x1E, 0x00},{0x21, 0x00},{0x22, 0x00},{0x23, 0x00},{0x25, 0x01},{0x26, 0x00},{0x27, 0x39},{0x28, 0x7F},{0x29, 0x08},{0x30, 0x03},{0x31, 0x00},{0x32, 0x1A},{0x33, 0x1A},{0x34, 0x07},{0x35, 0x07},{0x36, 0x01},{0x37, 0xFF},{0x38, 0x36},{0x39, 0x07},{0x3A, 0x00},{0x3E, 0xFF},{0x3F, 0x00},{0x40, 0x77},{0x41, 0x40},{0x42, 0x00},{0x43, 0x30},{0x44, 0xA0},{0x45, 0x5C},{0x46, 0x00},{0x47, 0x00},{0x48, 0x58},{0x4A, 0x1E},{0x4B, 0x1E},{0x4C, 0x00},{0x4D, 0x00},{0x4E, 0xA0},{0x4F, 0x80},{0x50, 0x00},{0x51, 0x00},{0x52, 0x00},{0x53, 0x00},{0x54, 0x00},{0x57, 0x80},{0x59, 0x10},{0x5A, 0x08},{0x5B, 0x94},{0x5C, 0xE8},{0x5D, 0x08},{0x5E, 0x3D},{0x5F, 0x99},{0x60, 0x45},{0x61, 0x40},{0x63, 0x2D},{0x64, 0x02},{0x65, 0x96},{0x66, 0x00},{0x67, 0x97},{0x68, 0x01},{0x69, 0xCD},{0x6A, 0x01},{0x6B, 0xB0},{0x6C, 0x04},{0x6D, 0x2C},{0x6E, 0x01},{0x6F, 0x32},{0x71, 0x00},{0x72, 0x01},{0x73, 0x35},{0x74, 0x00},{0x75, 0x33},{0x76, 0x31},{0x77, 0x01},{0x7C, 0x84},{0x7D, 0x03},{0x7E, 0x01},
};/****************************************************************Function Name: paj7620WriteRegDescription:  PAJ7620 Write reg cmdParameters: addr:reg address; cmd:function dataReturn: error code; success: return 0
****************************************************************/
uint8_t paj7620WriteReg(uint8_t addr, uint8_t cmd)
{char ret = 1;// 使用给定地址开始到I2C从设备的传输。随后,使用write()函数将字节排队以进行传输,并通过调用endTransmission()进行传输。Wire.beginTransmission(PAJ7620_ID);// 响应主设备的请求从 从设备写入数据,或排队等待从 主设备到从设备的传输(在调用beginTransmission()和endTransmission()之间)。Wire.write(addr);                     // send register addressWire.write(cmd);                        // send value to write/*结束到由beginTransmission()开始的从设备的传输,并传输由write()排队的字节。如果为true,endTransmission()在传输后发送停止消息,释放I2C总线。如果为false,则endTransmission()在传输后发送重新启动消息。总线不会被释放,这会阻止另一个主设备在消息之间传输。这允许一个主设备在控制中发送多个传输。*/ret = Wire.endTransmission();if (0 != ret){if (1 == ret){Serial.print("[paj7620WriteReg error] data too long to fit in transmit buffer\n");}else if (2 == ret){Serial.print("[paj7620WriteReg error] received NACK on transmit of address\n");}else if (3 == ret){Serial.print("[paj7620WriteReg error] received NACK on transmit of data\n");}else if (4 == ret){Serial.print("[paj7620WriteReg error] other error\n");}}return ret;
}/****************************************************************Function Name: paj7620ReadRegDescription:  PAJ7620 read reg dataParameters: addr:reg address;qty:number of data to read, addr continuously increase;data[]:storage memory start addressReturn: error code; success: return 0
****************************************************************/
uint8_t paj7620ReadReg(uint8_t addr, uint8_t qty, uint8_t data[])
{uint8_t ret;Wire.beginTransmission(PAJ7620_ID);Wire.write(addr);ret = Wire.endTransmission();if (0 != ret){if (1 == ret){Serial.print("[paj7620ReadReg error] data too long to fit in transmit buffer\n");}else if (2 == ret){Serial.print("[paj7620ReadReg error] received NACK on transmit of address\n");}else if (3 == ret){Serial.print("[paj7620ReadReg error] received NACK on transmit of data\n");}else if (4 == ret){Serial.print("[paj7620ReadReg error] other error\n");}return ret; //return error code}/* 主设备用于从设备请求字节。然后可以使用available()和read()函数检索字节。如果为true,则requestFrom()在请求后发送停止消息,释放I2C总线。如果为false,requestFrom()将在请求后发送重新启动消息。总线将不会被释放,这将阻止另一个主设备在消息之间进行请求。这允许一个主设备在控制中发送多个请求。  返回:字节,从 从设备返回的字节数。*/Wire.requestFrom((int)PAJ7620_ID, (int)qty);// 返回可通过read()检索的字节数。在调用requestFrom()之后,应该在主设备上调用此函数,或者在onReceive()处理程序中的从设备上调用此函数。while (Wire.available()){// 读取在调用requestFrom()后从 从设备传输到主设备的字节,或从 主设备传输到从设备的字节。read()继承自Stream实用程序类。*data = Wire.read();#ifdef debug    //debugSerial.print("addr:");Serial.print(addr++, HEX);Serial.print("  data:");Serial.println(*data, HEX);
#endifdata++;}return 0;
}/****************************************************************Function Name: paj7620SelectBankDescription:  PAJ7620 select register bankParameters: BANK0, BANK1Return: none
****************************************************************/
void paj7620SelectBank(bank_e bank)
{switch (bank) {case BANK0:paj7620WriteReg(PAJ7620_REGITER_BANK_SEL, PAJ7620_BANK0);break;case BANK1:paj7620WriteReg(PAJ7620_REGITER_BANK_SEL, PAJ7620_BANK1);break;default:break;}
}/****************************************************************Function Name: paj7620InitDescription:  PAJ7620 REG INITParameters: noneReturn: error code; success: return 0
****************************************************************/
uint8_t paj7620Init(void)
{//Near_normal_mode_V5_6.15mm_121017 for 940nmint i = 0;uint8_t error;uint8_t data0 = 0, data1 = 0;//wakeup the sensordelayMicroseconds(700);    //Wait 700us for PAJ7620U2 to stabilizeWire.begin();Serial.println("INIT SENSOR...");paj7620SelectBank(BANK0);paj7620SelectBank(BANK0);error = paj7620ReadReg(0, 1, &data0);if (error){Serial.println("read data0 error!");return error;}error = paj7620ReadReg(1, 1, &data1);if (error){Serial.println("read data1 error!");return error;}Serial.print("Addr0 =");Serial.print(data0 , HEX);Serial.print(",  Addr1 =");Serial.println(data1 , HEX);if ( (data0 != 0x20 ) || (data1 != 0x76) ){Serial.println("data0 or data1 error!");return 0xff;}if ( data0 == 0x20 ){Serial.println("wake-up finish.");}for (i = 0; i < INIT_REG_ARRAY_SIZE; i++){paj7620WriteReg(initRegisterArray[i][0], initRegisterArray[i][1]);}paj7620SelectBank(BANK0);  //gesture flage reg in Bank0Serial.println("Paj7620 initialize register finished.");return 0;
}

paj7620.h

/** paj7620.h* A library for Grove-Guesture 1.0** Copyright (c) 2015 seeed technology inc.* Website    : www.seeed.cc* Author     : Wuruibin & Xiangnan* Modified Time: June 2015** The MIT License (MIT)** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* THE SOFTWARE.*/#ifndef __PAJ7620_H__
#define __PAJ7620_H__// 定义debug则开启了debug调试
//#define debug 1#define BIT(x)  1 << x// REGISTER DESCRIPTION
#define PAJ7620_VAL(val, maskbit)       ( val << maskbit )
#define PAJ7620_ADDR_BASE               0x00// REGISTER BANK SELECT
#define PAJ7620_REGITER_BANK_SEL        (PAJ7620_ADDR_BASE + 0xEF) //W// DEVICE ID
#define PAJ7620_ID  0x73// REGISTER BANK 0
#define PAJ7620_ADDR_SUSPEND_CMD        (PAJ7620_ADDR_BASE + 0x3)  //W
#define PAJ7620_ADDR_GES_PS_DET_MASK_0      (PAJ7620_ADDR_BASE + 0x41) //RW
#define PAJ7620_ADDR_GES_PS_DET_MASK_1      (PAJ7620_ADDR_BASE + 0x42) //RW
#define PAJ7620_ADDR_GES_PS_DET_FLAG_0      (PAJ7620_ADDR_BASE + 0x43) //R
#define PAJ7620_ADDR_GES_PS_DET_FLAG_1      (PAJ7620_ADDR_BASE + 0x44) //R
#define PAJ7620_ADDR_STATE_INDICATOR    (PAJ7620_ADDR_BASE + 0x45) //R
#define PAJ7620_ADDR_PS_HIGH_THRESHOLD  (PAJ7620_ADDR_BASE + 0x69) //RW
#define PAJ7620_ADDR_PS_LOW_THRESHOLD   (PAJ7620_ADDR_BASE + 0x6A) //RW
#define PAJ7620_ADDR_PS_APPROACH_STATE  (PAJ7620_ADDR_BASE + 0x6B) //R
#define PAJ7620_ADDR_PS_RAW_DATA        (PAJ7620_ADDR_BASE + 0x6C) //R// REGISTER BANK 1
#define PAJ7620_ADDR_PS_GAIN            (PAJ7620_ADDR_BASE + 0x44) //RW
#define PAJ7620_ADDR_IDLE_S1_STEP_0     (PAJ7620_ADDR_BASE + 0x67) //RW
#define PAJ7620_ADDR_IDLE_S1_STEP_1     (PAJ7620_ADDR_BASE + 0x68) //RW
#define PAJ7620_ADDR_IDLE_S2_STEP_0     (PAJ7620_ADDR_BASE + 0x69) //RW
#define PAJ7620_ADDR_IDLE_S2_STEP_1     (PAJ7620_ADDR_BASE + 0x6A) //RW
#define PAJ7620_ADDR_OP_TO_S1_STEP_0    (PAJ7620_ADDR_BASE + 0x6B) //RW
#define PAJ7620_ADDR_OP_TO_S1_STEP_1    (PAJ7620_ADDR_BASE + 0x6C) //RW
#define PAJ7620_ADDR_OP_TO_S2_STEP_0    (PAJ7620_ADDR_BASE + 0x6D) //RW
#define PAJ7620_ADDR_OP_TO_S2_STEP_1    (PAJ7620_ADDR_BASE + 0x6E) //RW
#define PAJ7620_ADDR_OPERATION_ENABLE   (PAJ7620_ADDR_BASE + 0x72) //RW// PAJ7620_REGITER_BANK_SEL
#define PAJ7620_BANK0       PAJ7620_VAL(0,0)
#define PAJ7620_BANK1   PAJ7620_VAL(1,0)// PAJ7620_ADDR_SUSPEND_CMD
#define PAJ7620_I2C_WAKEUP  PAJ7620_VAL(1,0)
#define PAJ7620_I2C_SUSPEND PAJ7620_VAL(0,0)// PAJ7620_ADDR_OPERATION_ENABLE
#define PAJ7620_ENABLE      PAJ7620_VAL(1,0)
#define PAJ7620_DISABLE     PAJ7620_VAL(0,0)typedef enum {BANK0 = 0,BANK1,
} bank_e;#define GES_RIGHT_FLAG             PAJ7620_VAL(1,0)
#define GES_LEFT_FLAG               PAJ7620_VAL(1,1)
#define GES_UP_FLAG                 PAJ7620_VAL(1,2)
#define GES_DOWN_FLAG               PAJ7620_VAL(1,3)
#define GES_FORWARD_FLAG            PAJ7620_VAL(1,4)
#define GES_BACKWARD_FLAG           PAJ7620_VAL(1,5)
#define GES_CLOCKWISE_FLAG          PAJ7620_VAL(1,6)
#define GES_COUNT_CLOCKWISE_FLAG    PAJ7620_VAL(1,7)
#define GES_WAVE_FLAG               PAJ7620_VAL(1,0)/*
enum {// REGISTER 0GES_RIGHT_FLAG            = BIT(0),GES_LEFT_FLAG             = BIT(1),GES_UP_FLAG               = BIT(2),GES_DOWN_FLAG             = BIT(3),GES_FORWARD_FLAG      = BIT(4),GES_BACKWARD_FLAG         = BIT(5),GES_CLOCKWISE_FLAG        = BIT(6),GES_COUNT_CLOCKWISE_FLAG = BIT(7),//REGISTER 1GES_WAVE_FLAG     = BIT(0),
};
*/#define INIT_REG_ARRAY_SIZE (sizeof(initRegisterArray)/sizeof(initRegisterArray[0]))uint8_t paj7620Init(void);
uint8_t paj7620WriteReg(uint8_t addr, uint8_t cmd);
uint8_t paj7620ReadReg(uint8_t addr, uint8_t qty, uint8_t data[]);
void paj7620SelectBank(bank_e bank);#endif

参考图

原理图

架构框图

Pin定义

机械设计


其他











Arduino Uno + PAJ7620U2 实现手势识别控制LED灯工作相关推荐

  1. Arduino Uno + APDS9930 实现手势控制LED灯亮灭、调光等

    目录 前言 功能介绍: 1.靠近亮灯.距离保持约10cm常亮,远离延时熄灭 2.靠近点亮/熄灭LED,延时期间操作不响应 3.挥手点亮/熄灭LED,悬停进行非无极pwm调光 接线 效果图 源码 通用部 ...

  2. Arduino基础项目一:控制LED灯闪烁

    一.所需元件 1 × Arduino UNO R3(以及配套USB数据线) 1 × 面包板 2 × 彩色面包线 1 × 5mm LED灯 1 × 220欧电阻 二.硬件连接 三.软件代码 // 项目一 ...

  3. 【Arduino基础】倾斜开关控制led灯的亮灭

    实验现象 手拿着面包板,当倾斜到一定程度时,LED被点亮:没有倾斜时,led不亮. 理论学习 当开关一端低于水平位置倾斜,开关导通,模拟口电压值为5V左右 (数字二进制表示为1023),点亮led灯. ...

  4. Arduino基础入门篇10—电位器控制LED灯

    本篇介绍Arduino模拟输入功能,通过读取电位器输入的电压值来控制LED灯的亮度. 模拟输入引脚是带有ADC(Analog-to-Digital Converter,模数转换器)功能的引脚.它可以将 ...

  5. Arduino小白学习记录:用电位器控制LED灯的亮度

    Arduino小白的学习记录:用电位器控制LED灯的亮度 一.介绍 二.材料准备 三.实验原理 四.实验步骤 五.代码 六.效果展示 七.总结分析 我是一个纯Arduino小白,为了完成老师安排的一个 ...

  6. Arduino基础入门篇07—按键控制LED灯

    前面介绍了Arduino数字I/O,通过控制数字引脚输出来控制LED灯亮灭.本篇将介绍数字I/O的输入功能,通过检测按键状态来控制LED灯亮灭,把LED的亮灭变成人为可控制的. 1. 实验材料 Uno ...

  7. Arduino系列之米思齐旋钮控制LED灯亮度

    Arduino系列之旋钮控制LED灯亮度 实验原理 电位器的旋钮旋转时改变电阻从而控制LED灯的亮度! 实验所需材料 arduino开发板,LED灯,电位器,1602液晶显示器,杜班线很多根,公母线很 ...

  8. arduino 红外遥控器控制LED灯

    /* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件:跳线公公头 * 5led 220欧电阻红外接收管,红外遥控 接线:红外灯面向自己从左到右分别接 IO3 ,GND ...

  9. 红外控制LED灯的亮灭———Arduino

    Arduino的中文社区:https://www.arduino.cn/ \黑脸,今天烧坏一个二极管. 原因:正负极没反,没接电阻. 把自己头打烂了- 1. 所需硬件 开发板,led灯(多个),遥控器 ...

最新文章

  1. redis bind连不上的坑
  2. python【蓝桥杯vip练习题库】ADV-236林丹大战李宗伟
  3. gin 优雅重启或停止
  4. 我的WCF之旅(1):创建一个简单的WCF程序
  5. php 与 memcache 笔记
  6. Written English-书面-一般现在时
  7. 【多线程】Semaphore:实现快速限流器
  8. C语言字符串类型转换为整型,c语言中将一个字符串转换到整型数据类型的函数是什么?...
  9. 《Java就业培训教程》_张孝祥_书内源码_06
  10. 无法启动计算机上的服务msdtc,MSDTC服务无法启动解决方法
  11. 趣味项目—MyQQ机器人(二)关于python的pandas根据索引读写指定数据的方法实现签到功能
  12. linux usb有线网卡驱动_Linux系统安装R8169网卡驱动的方法
  13. 向量点乘(即内积)和叉乘(即外积、向量积)区别与意义分析
  14. 1709: 简小胡的背包
  15. 华硕 X542UQ REV:2.1
  16. 谢烟客---------Linux之深入理解anaconda使用
  17. 运维工程师主要做什么_网络工程师和网络运维工程师到底有什么不同?
  18. 电脑桌面加html格式壁纸,巧妙使用IDM获取精美电脑桌面壁纸
  19. 人在弥留之际的五大憾事
  20. 动画演示15年来编程语言的起起伏伏

热门文章

  1. html5的class属性值,HTML class 属性 | 菜鸟教程
  2. 【懒懒的Python学习笔记一】
  3. 深度学习图像算法在内容安全领域的应用
  4. 微带线特性阻抗计算公式_几种计算微带线特性阻抗的方法.pdf
  5. 学计算机做纸质笔记,详细图文教你康奈尔大学推荐的超级笔记法,只要一张A4纸张,你也可以做学霸...
  6. STM32F4系列定时器简介
  7. vb.net学习日记3.29
  8. 微信小程序开发者工具的使用
  9. 云脉文档管理小程序使办公更协同
  10. 【Android】常用重要的adb命令