Hallo zusammen,
Ich verwende in meinem Projekt einen Adafruit APDS9960 Gestensensor. Mit diesem kann ich eine Schiebetür öffnen und schliessen. Das funktioniert erstmals Tip top.
Jetzt möchte jedoch eine Gestenverschlüsselung einbauen, sprich die Türe darf nur bei einem gewissen
Gestenmuster geöffnet werden.
Als Beispiel:
if(gesture == APDS9960_RIGHT,UP,LEFT,UP,RIGHT) //Öffne Türe
Mein Problem ist es nun, dass ich diese Befehle (RIGHT,UP, usw. ) nicht so in den Sketch einbauen kann.
Darum möchte ich fragen ob sich jemand mit dem Sensor auskennt, mir einen Tipp oder evt. eine Lösung geben kann ?
Besten Dank im Voraus
Mavic
Mein Sketch
//////////////////////////// HARDWARE INCLUDED /////////////////////////////////////
//Hardware einlesen
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *LED = AFMS.getMotor(1);
Adafruit_DCMotor *Motor = AFMS.getMotor(2);
#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;
//Taster definieren
const int DIC = 2;
const int DIO = 4;
int buttonstate1 = 0;
int buttonstate2 = 0;
//Positive Flanke Links
bool posFlankeL(const bool value)
{
static bool merker = true; // default, wg. Pullup
if(merker == value) return false; // kein Flankenwechsel
merker = value;
if(value) return true; // positiver Flankenwechsel
return false; // negativer Flankenwechsel
}
//Positive Flanke Rechts
bool posFlankeR(const bool valueR)
{
static bool merkerR = true; // default, wg. Pullup
if(merkerR == valueR) return false; // kein Flankenwechsel
merkerR = valueR;
if(valueR) return true; // positiver Flankenwechsel
return false; // negativer Flankenwechsel
}
//////////////////////////// VOID SETUP /////////////////////////////////////
// Setup function runs once when you press reset or power the board
void setup() {
// Taster Einlesen:
pinMode(DIC,INPUT);
pinMode(DIO,INPUT);
//Motorshield einlesen:
AFMS.begin();
//Monitor starten
Serial.begin(115200);
//Gestensensor einlesen:
if(!apds.begin()){
Serial.println("failed to initialize device! Please check your wiring.");
}
else Serial.println("Device initialized!");
//gesture mode will be entered once proximity mode senses something close
apds.enableProximity(true);
apds.enableGesture(true);
}
//////////////////////////// VOID LOOP /////////////////////////////////////
// the loop function runs over and over again forever
void loop() {
//Taster Status abfragen
buttonstate1 = digitalRead(DIC);
buttonstate2 = digitalRead(DIO);
//Positive Flanke stoppt Motor
if (posFlankeL(digitalRead(DIC))) Serial.println ("Endschalter Links"),Motor->run(RELEASE);
if (posFlankeR(digitalRead(DIO))) Serial.println ("Endschalter Rechts"),Motor->run(RELEASE);
//Gesten des Gestensensores einlesen:
{
uint8_t gesture = apds.readGesture();
if(gesture == APDS9960_DOWN) Serial.println("LED Aus"),LED->run(RELEASE);
if(gesture == APDS9960_UP) Serial.println("LED Ein"),LED->setSpeed(255), LED->run(FORWARD);
if((gesture == APDS9960_LEFT)& buttonstate2==HIGH) Serial.println("Türe schliesst"),Motor->run(RELEASE),delay(1000),Motor->setSpeed(255),Motor->run(BACKWARD);
if((gesture == APDS9960_RIGHT)& buttonstate1==HIGH) Serial.println("Türe öffnet"),Motor->run(RELEASE),delay (1000),Motor->setSpeed(255),Motor->run(FORWARD);
}
}
Arduino_Projekt.ino (2.85 KB)