Indice
Descrizione
In questo episodio della serie dedicata ai sensori, impareremo a utilizzare il sensore di gesti APDS9960 con Arduino. Vedremo come creare il circuito e scrivere lo sketch per riconoscere i movimenti della mano.
Inoltre scopriremo come sfruttare altre funzionalità come il riconoscimento della luce, del colore e della prossimità.
#include <Adafruit_APDS9960.h>
#include <LiquidCrystal_I2C.h>
Adafruit_APDS9960 apds;
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool change = false;
unsigned long lastChange = 0;
void setup() {
apds.begin();
apds.enableProximity(true);
apds.enableGesture(true);
lcd.init();
lcd.backlight();
updateDisplay(0);
}
void loop() {
int gesture = apds.readGesture();
if (gesture) {
updateDisplay(gesture);
change = true;
lastChange = millis();
}
if (change && (millis() - lastChange) > 1000) {
updateDisplay(0);
change = false;
}
delay(1);
}
void updateDisplay(int gesture) {
lcd.clear();
switch (gesture) {
case APDS9960_UP:
lcd.setCursor(7, 0);
lcd.print("SU");
break;
case APDS9960_DOWN:
lcd.setCursor(6, 1);
lcd.print("GIU'");
break;
case APDS9960_LEFT:
lcd.setCursor(0, 1);
lcd.print("SINISTRA");
break;
case APDS9960_RIGHT:
lcd.setCursor(10, 1);
lcd.print("DESTRA");
break;
default:
lcd.setCursor(3, 0);
lcd.print("Attesa del");
lcd.setCursor(4, 1);
lcd.print("gesto...");
break;
}
}
#include <Adafruit_APDS9960.h>
#include <LiquidCrystal_I2C.h>
Adafruit_APDS9960 apds;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
apds.begin();
apds.enableColor(true);
lcd.init();
lcd.backlight();
}
void loop() {
uint16_t red, green, blue, light;
while (!apds.colorDataReady()) {
delay(5);
}
apds.getColorData(&red, &green, &blue, &light);
String color = mainColor(red, green, blue);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LUMINOSITA': " + String(light));
lcd.setCursor(0, 1);
lcd.print("COLORE: " + color);
delay(500);
}
String mainColor(uint16_t red, uint16_t green, uint16_t blue) {
String color = "bianco";
if (red > (green + blue) * 2) {
color = "rosso";
} else if (green > (red + blue) * 0.8) {
color = "verde";
} else if (blue > (red + green) * 2.5) {
color = "blu";
} else if ((red + green) > blue * 1.3) {
color = "giallo";
} else if ((red + blue) > green * 5) {
color = "magenta";
} else if ((green + blue) > red * 5) {
color = "ciano";
}
return color;
}
#include <Adafruit_APDS9960.h>
#include <LiquidCrystal_I2C.h>
Adafruit_APDS9960 apds;
LiquidCrystal_I2C lcd(0x27, 16, 2);
int lastState = 0;
void setup() {
apds.begin();
apds.enableProximity(true);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("PROSSIMITA'");
updateDisplay(0);
}
void loop() {
int proximity = apds.readProximity();
int state = round(proximity / 16.0);
if (state != lastState) {
updateDisplay(state);
lastState = state;
}
delay(1);
}
void updateDisplay(int state) {
lcd.setCursor(0, 1);
for (int i = 0; i < state; i++) {
lcd.print(char(0xFF));
}
for (int i = state; i < 16; i++) {
lcd.print(" ");
}
}