PAJ7620 gesture sensor problem & Arduino nano IoT

Hi everyone!

I've got a problem with the PAJ7620 gesture sensor in combination with an Arduino Nano IoT.

The sensor works perfectly when I upload the code to the Arduino, but won't work when I just start the Arduino (plug into power source), without uploading first. Also, when I press the reset button on the Arduino, the sensor works too. I just want it to work, without uploading first or pressing the reset button.

Somebody ran into this problem as well?

Code I used is the demo code from the Seeed library and the demo code from the RevEng_PAJ7620 library. Response is the same...

Anyone any idea what the problem might be?

Must be something to do with the power source and the plug. Why not disclose what you have and how you are connecting that power?
Paul

Hi Paul, thanks for your response!

Using this code as an example

#include <Wire.h>
#include "paj7620.h"

#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

void setup()
{
	uint8_t error = 0;

	Serial.begin(9600);
	Serial.println("\nPAJ7620U2 TEST DEMO: Recognize 9 gestures.");

	error = paj7620Init();			// initialize Paj7620 registers
	if (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;
	
	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");
					delay(GES_QUIT_TIME);
				}
				else if(data == GES_BACKWARD_FLAG) 
				{
					Serial.println("Backward");
					delay(GES_QUIT_TIME);
				}
				else
				{
					Serial.println("Right");
				}          
				break;
			case GES_LEFT_FLAG: 
				delay(GES_ENTRY_TIME);
				paj7620ReadReg(0x43, 1, &data);
				if(data == GES_FORWARD_FLAG) 
				{
					Serial.println("Forward");
					delay(GES_QUIT_TIME);
				}
				else if(data == GES_BACKWARD_FLAG) 
				{
					Serial.println("Backward");
					delay(GES_QUIT_TIME);
				}
				else
				{
					Serial.println("Left");
				}          
				break;
			case GES_UP_FLAG:
				delay(GES_ENTRY_TIME);
				paj7620ReadReg(0x43, 1, &data);
				if(data == GES_FORWARD_FLAG) 
				{
					Serial.println("Forward");
					delay(GES_QUIT_TIME);
				}
				else if(data == GES_BACKWARD_FLAG) 
				{
					Serial.println("Backward");
					delay(GES_QUIT_TIME);
				}
				else
				{
					Serial.println("Up");
				}          
				break;
			case GES_DOWN_FLAG:
				delay(GES_ENTRY_TIME);
				paj7620ReadReg(0x43, 1, &data);
				if(data == GES_FORWARD_FLAG) 
				{
					Serial.println("Forward");
					delay(GES_QUIT_TIME);
				}
				else if(data == GES_BACKWARD_FLAG) 
				{
					Serial.println("Backward");
					delay(GES_QUIT_TIME);
				}
				else
				{
					Serial.println("Down");
				}          
				break;
			case GES_FORWARD_FLAG:
				Serial.println("Forward");
				delay(GES_QUIT_TIME);
				break;
			case GES_BACKWARD_FLAG:		  
				Serial.println("Backward");
				delay(GES_QUIT_TIME);
				break;
			case GES_CLOCKWISE_FLAG:
				Serial.println("Clockwise");
				break;
			case GES_COUNT_CLOCKWISE_FLAG:
				Serial.println("anti-clockwise");
				break;  
			default:
				paj7620ReadReg(0x44, 1, &data1);
				if (data1 == GES_WAVE_FLAG) 
				{
					Serial.println("wave");
				}
				break;
		}
	}
	delay(100);
}

Powering as follows:

  • GND -> GND
  • VCC -> 3.3V Arduino Nano pin
  • SDA -> SDA
  • SCL -> SCL

Strange thing is that everything runs and works when the code is being uploaded, of when I press the reset button on the Arduino, but doesn't run when I normally power the Arduino (tried USB and powerbank).

I tried adding a delay in the setup(), but doesn't fix the problem.

There is also a Neopixel LED Ring wired to the Arduino, which also is wired to GND and 3.3V.

The IR LED in the sensor has a current need for 360ma, plus what ever the other stuff is using. Do you think the 3.3 volt from the Arduino can supply that? Try a separate 3.3 volt supply.
Paul

But how come it works when uploaded or reset then?

Perhaps it is NOT working at 3.3 volts when all I see is it is supposed to be at 5 volts.
Paul

Hi Paul,

Tried your suggestion, but the behaviour is still the same.