A small project demonstrating how to use the MPU6050 accelerometer and send values to Nextion's waveform and progress bar.
/* * Waveform.ino - Simple example code for EasyNextionLibrary * Copyright (c) 2020 Athanasios Seitanis < seithagta@gmail.com >. * All rights reserved. EasyNextionLibrary is licensed under the MIT License * https://opensource.org/licenses/MIT */ /* This project aims to show how to manage waveforms, * how to send different data on Nextion and how to process them */ #include "EasyNextionLibrary.h" // Include EasyNextionLibrary EasyNex myNex(Serial); // Create an object of EasyNex class with the name < myNex > // Set as parameter the Serial you are going to use #define DATA_REFRESH_RATE 500 // The time between each Data refresh of the page // Depending on the needs of the project, the DATA_REFRESH_RATE can be set // to 50ms or 100ms without a problem. In this example, we use 1000ms, unsigned long pageRefreshTimer = millis(); // Timer for DATA_REFRESH_RATE //-------------------------------------------------------------------------------- //_________ MPU6050 Accelerometer and Magnetometer sensor Configuration //-------------------------------------------------------------------------------- #include <MPU6050_tockn.h> // MPU6050_tockn Library // Get the library HERE: https://github.com/tockn/MPU6050_tockn // or from Library manager on Arduino IDE <MPU6050_tockn> #include <Wire.h> // Connect SCL to D21 pin SDA to D20 for Mega // Connect SCL to A5 pin SDA to A4 for UNO - Nano MPU6050 mpu6050(Wire); // create an object of MPU6050_tockn library with the name <mpu6050> so that we can access functions related to it float accelerationX = 0; float accelerationY = 0; float accelerationZ = 0; float lastSentAccelerationX = 0; float lastSentAccelerationY = 0; float lastSentAccelerationZ = 0; float angleX = 0; float angleY = 0; float angleZ = 0; float lastSentAngleX = 0; float lastSentAngleY = 0; float lastSentAngleZ = 0; #define PIN_CALIBRATION_MPU6050 10 // when D10 is LOW with a switch on GND. MPU6050 NOT calibrating on start up // the INPUT_PULLUP is going to activated later #define MPU6050_GET_DATA_EVERY 400 // request data from sensor every 400ms unsigned long mpu6050Timer = millis(); void setup(){ //__________ Nextion setup myNex.begin(9600); // Begin the object with a baud rate of 9600 // If no parameter was given in the begin(), the default baud rate of 9600 will be used //-------------------------------------------------------------------------------- //_________ MPU6050 Accelerometer and Magnetometer sensor setup //-------------------------------------------------------------------------------- pinMode(PIN_CALIBRATION_MPU6050, INPUT_PULLUP); Wire.begin(); mpu6050.begin(); if(digitalRead(PIN_CALIBRATION_MPU6050) == HIGH) { mpu6050.calcGyroOffsets(true); } } void loop(){ mpu6050GetData(); refreshNextion(); } void mpu6050GetData() { if((millis()-mpu6050Timer) > MPU6050_GET_DATA_EVERY){ mpu6050.update(); if((millis()-mpu6050Timer) > (MPU6050_GET_DATA_EVERY + 10)){ accelerationX = mpu6050.getAccX(); accelerationY = mpu6050.getAccY(); accelerationZ = mpu6050.getAccZ(); angleX = mpu6050.getAngleX(); angleY = mpu6050.getAngleY(); angleZ = mpu6050.getAngleZ(); mpu6050Timer = millis(); } } } void refreshNextion() { if((millis()-pageRefreshTimer) > DATA_REFRESH_RATE){ if(lastSentAccelerationX != accelerationX){ int accelerationXInt = accelerationX*10; // multiply x10 and convert it to int myNex.writeNum("accelX.val", accelerationXInt); // accelX is a variable that we have create on Nextion lastSentAccelerationX = accelerationX; } if(lastSentAccelerationY != accelerationY){ int accelerationYInt = accelerationY*10; myNex.writeNum("accelY.val", accelerationYInt); // accelY is a variable that we have create on Nextion lastSentAccelerationY = accelerationY; } if(lastSentAccelerationZ != accelerationZ){ int accelerationZInt = accelerationZ*10; myNex.writeNum("accelZ.val", accelerationZInt); // accelZ is a variable that we have create on Nextion lastSentAccelerationZ = accelerationZ; } if(lastSentAngleX != angleX){ int angleXInt = angleX*10; myNex.writeNum("angleX.val", angleXInt); // angleX is a variable that we have create on Nextion lastSentAngleX = angleX; } if(lastSentAngleY != angleY){ int angleYInt = angleY*10; myNex.writeNum("angleY.val", angleYInt); // angleY is a variable that we have create on Nextion lastSentAngleY = angleY; } if(lastSentAngleZ != angleZ){ int angleZInt = angleZ*10; myNex.writeNum("angleZ.val", angleZInt); // angleZ is a variable that we have create on Nextion lastSentAngleZ = angleZ; } pageRefreshTimer = millis(); } }
The .zip file contains:
507
times.