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(" "); }}In qualità di Affiliato Amazon riceviamo un guadagno dagli acquisti idonei