Hi there :
,
I'm struggling to improve the code of this project. The input of sensors is processed in an Arduino Micro and displayed on a Nextion Display. The GUI offers a settings menu.
Feel free to let me know anything that could be improved for efficiency and spee. Is everything "good practise"?
Thx in advance.
#include <EEPROM.h>
bool beepSwitchOn = EEPROM.read(1);
bool debugSwitchOn = EEPROM.read(2);
unsigned long previousRefreshMillis = 0;
const unsigned long refreshIntervalBattery = 600000;
const float calibrationalConstant = 190;
const int minimum = 10;
const int batteryPin = A5;
const int buzzerPin = 5
const float batteryMaxVoltage = 4.2;
const float batteryMinVoltage = 3.0;
int batteryInput = 860;
int batteryPercentage = 100;
const int batteryLevelLow = (batteryMinVoltage / 5) * 1023;
const int batteryLevelHigh = (batteryMaxVoltage / 5) * 1023;
float sensorData[4][4] = {};
int8_t incomingByte = 0;
void setup() {
 Serial.begin(9600);
 Serial1.begin(9600);
 pinMode(buzzerPin, OUTPUT);
 sensorData[0][0] = A0;
 sensorData[1][0] = A1;
 sensorData[2][0] = A2;
 sensorData[3][0] = A3;
 switchSetup();
 updateBatteryPercentage();
}
void loop() {
 updateSensorValues();
 switchLoop();
 if(debugSwitchOn) {
  debugMode();
 }
 returnData();
}
void switchSetup() {
 if(beepSwitchOn) {
  Serial1.print("bt0.picc=4");
  Serial1.write(0xff)
  Serial1.write(0xff)
  Serial1.write(0xff);
  Serial1.print("ref bt0");
  Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
  beepbeep();
 } else {
  Serial1.print("bt0.picc=3");
  Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
  Serial1.print("ref bt0");
  Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 }
 if(debugSwitchOn) {
  Serial1.print("bt1.picc=4");
  Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
  Serial1.print("ref bt1");
  Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 } else {
  Serial1.print("bt1.picc=3");
  Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
  Serial1.print("ref bt1");
  Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 }
}
void switchLoop(){
 if(Serial1.available() > 0) {
  delay(200);
  incomingByte = Serial1.read();
  Serial.println(incomingByte);
  if(incomingByte == 2) {
   beepSwitchOn = !beepSwitchOn;
   EEPROM.write(1, beepSwitchOn);
  }
  if(incomingByte == 3) {
   debugSwitchOn = !debugSwitchOn;
   EEPROM.write(2, debugSwitchOn);
  }
 }
}
void updateSensorValues() {
 for (int i = 0; i <= 3; i++) {
  sensorData[i][1] = analogRead(sensorData[i][0]);
  sensorData[i][2] = sensorData[i][1] * (calibrationalConstant / 1023);
  if (sensorData[i][2] > sensorData[i][3] && sensorData[i][2] >= minimum) {
   sensorData[i][3] = sensorData[i][2];
  }
 }
}
void returnData() {
 Serial1.print("t1.txt=");
 Serial1.print("\"");Serial1.print(String(sensorData[0][2], 1));Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 Serial1.print("t2.txt=");
 Serial1.print("\"");Serial1.print(String(sensorData[0][3], 1));Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 Serial1.print("t5.txt=");
 Serial1.print("\"");Serial1.print(String(sensorData[1][2], 1));Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 Serial1.print("t6.txt=");
 Serial1.print("\"");Serial1.print(String(sensorData[1][3], 1));Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 Serial1.print("t3.txt=");
 Serial1.print("\"");Serial1.print(String(sensorData[2][2], 1));Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 Serial1.print("t4.txt=");
 Serial1.print("\"");Serial1.print(String(sensorData[2][3], 1));Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 Serial1.print("t7.txt=");
 Serial1.print("\"");Serial1.print(String(sensorData[3][2], 1));Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 Serial1.print("t8.txt=");
 Serial1.print("\"");Serial1.print(String(sensorData[3][3], 1));Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 if (millis() - previousRefreshMillis >= refreshIntervalBattery) {
  updateBatteryPercentage();
  previousRefreshMillis = millis();
 }
}
void updateBatteryPercentage() {
 batteryInput = constrain(analogRead(batteryPin), batteryLevelLow, batteryLevelHigh);
 batteryPercentage = map(batteryInput, batteryLevelLow, batteryLevelHigh, 0, 100);
 Serial1.print("j0.val=");
 Serial1.print(batteryPercentage);
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
 Serial1.print("t0.txt=");
 Serial1.print("\"");Serial1.print(batteryPercentage);Serial1.print("\"");
 Serial1.write(0xff);Serial1.write(0xff);Serial1.write(0xff);
}
void debugMode() {
 for (int i = 0; i <= 3; i++) {
  Serial.print("SENSOR ");
  Serial.print(i+1);Serial.print("\t \t");
  Serial.print(sensorData[i][1]);Serial.print("\t \t");
  Serial.print(sensorData[i][2]);Serial.print("\t \t");
  Serial.println(sensorData[i][3]);
 }
}
void beepbeep() {
 digitalWrite(5, HIGH);
 delay(350);
 digitalWrite(5, LOW);
}