// ---------------------------------------- // Programm: M5_Stick_Wasserwaage.ino // Aufgabe: Lagesensor als Neigungsanzeige // Autor: R. Hoermann m5.8266.de // inspiriert von draeger-it.blog/eine-digitale-wasserwaage-mit-dem-m5stickc // Version: 2021-01-05 // Hardware: M5-Stick C mit MPU6886 // +----------------------+ // |ESP32 +-------------+ | // | | LCD 160x80 | | // |BtnA | 64k Farben | | // | +-------------+ | // | BtnB | // +----------------------+ // ---------------------------------------- #include// Bibliothek einbinden #define i_yc 40 // Y-Koordinate des Kreises=Halbe LCD Hoehe #define radius 28 // Radius der Bubble #define INTERVAL 250 // Update-Interval in Millisec #define col_bg GREEN // Hintergrundfarbe #define col_bubble WHITE // Bubble-Farbe float f_accX=0, f_accY=0, f_accZ=0; //FliesskommaVariblen fuer Sensorwerte int i_xcold=80; // Alte x-Position des Bubble-Kreises long l_mslast=0; // Zeitpunkt des Letzten Updates der Sensordaten void update_Bubble() // Sensorwerte einlesen und Bubble neu zeichnen { M5.MPU6886.getAccelData(&f_accX, &f_accY, &f_accZ); int i_xcnew=round(f_accY * 1000) + 80; M5.Lcd.fillCircle(i_xcold,i_yc,radius,col_bg); M5.Lcd.fillCircle(i_xcnew,i_yc,radius,col_bubble); M5.Lcd.drawLine( 50, 0, 50, 80, BLACK); M5.Lcd.drawLine(110, 0, 110, 80, BLACK); String s=String(f_accY*90,1); while(s.length()<6){s=" "+s;} M5.Lcd.drawRightString(s,160,0,1); // Anzeige der Neigung -90 .. +90 i_xcold=i_xcnew; l_mslast=millis(); } void setup() { M5.begin(); // Den M5-Stick initialisieren M5.Lcd.setRotation(3); // Displays um 90° drehen M5.MPU6886.Init(); // Den 6 Achsenlagesensor MPU6886 initalisieren M5.Lcd.drawCentreString("Wasserwaage",80,30,4); M5.Lcd.drawCentreString("Version 2021-01-05",80,60,2); while(millis()<5000) // nach 5 sec gehts weiter oder durch Tastendruck { M5.update(); if( M5.BtnA.wasPressed() || M5.BtnB.wasPressed() ){break;} } M5.Lcd.fillScreen(col_bg); // Hintergrundfarbe fuer Bildschirm M5.Lcd.setTextColor(BLACK,col_bg); // Textfarbe,Hintergrundfarbe } void loop() { if(millis()-l_mslast>INTERVAL){update_Bubble();} }