Hey Leute!
Ich bin Produktdesign-Student in Weimar und beschäftige mich gerade mit einem Gestaltungskonzept einer Lampe.
Diese Lampe soll mittels des MPU6050 geschaltet werden. Die Nutzung der Lampe geschtaltet sich wie folgt: Wenn man die Lampe nutzt kann man sie in verschiedene Richtungen neigen, um verschiedene Farben zu aktivieren. Beispielweise Links->Blau, Rechts->Gelb, etc.
Die Programmierung dafür habe schon hinbekommen.
Ich komme also zum Problem. Und zwar soll die Lampe, wenn man sie um 180 Grad auf den Kopf dreht sich ausschalten, bzw am liebsten in einen gedimmten Modus, schalten. Sie wird auf dem Kopf an ein Magnetkabel gehängt und so geladen. Dabei soll die Lampe nur ganz schwach gedimmt Leuchten.
Das zu programmieren gelingt mir nicht. Ich würde eigentlich gerne mittels einer If: Bedingung die anderen Leuchtbefehle ausschalten, solange die Lampe auf dem Kopf ist und sobald die Lampe wieder richtig herum ist in den normalen Kipp-Betrieb umschalten. Ich würde gerne ein Schaltbild von meinem ADAFruit GEMMA M0 angefügen, darf aber keine Datei hochladen ( ich bin neu hier)
Hier einmal mein Code:
#include<Wire.h>
int16_t GyX, GyY, GyZ;
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel RING = Adafruit_NeoPixel(12, 1, NEO_GRB + NEO_KHZ800); // 12: Anzahl LEDs, 1: DataPinNr
void setup() {
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);
RING.begin();
RING.show();
}
void loop() {
Wire.beginTransmission(0x68);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(0x68, 14, true);
GyY = Wire.read() << 8 | Wire.read();
GyX = Wire.read() << 8 | Wire.read();
GyY = GyY / 100;
GyX = GyX / 100;
Serial.print(" Y "); Serial.print(GyY);
Serial.print(" X "); Serial.print(GyX);
Serial.println();
//GELB LEUCHTEN
if (GyY > 95 && GyX < 130)
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 255, 150, 0);
//BLAU LEUCHTEN
if (GyY <-95&& GyX > -130 )
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 0, 150, 255);
//ROT LEUCHTEN
if (GyX >95 && GyX < 130)
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 255, 40, 0);
//Standby
if (GyX < -95 && GyX > -130)
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 0, 0, 0);
// AUSSCHALTEN (GEDIMMTER ZUSTAND
if (GyY > 160 )
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 0, 0, 10);
RING.show();
delay(50);
Wie ihr sehen könnt ist eine Ausschalt-Bedingung schon hinzugefügt, jedoch bewegt sich der Bereich des Gyro-Sensor ab ca 90 Grad wieder zurück zu Null, weshalb die Lampe natürlich wieder anschaltet, und das würde ich gerne verhindern!
Ich wäre MEGA froh, meine Projekt-Patnerinnen natürlich auch, wenn jemand mir dabei helfen könnte. Ich habe schon viel rumprobiert und habe leider keine Lösung gefunden.
Schöne Grüße!
Michel