#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
typedef struct {
String cd;
uint32_t t1;
uint32_t t2;
uint8_t p1;
uint8_t p2;
} CodeVal;
constexpr uint8_t NUM_READS = 100;
CodeVal codeVals[NUM_READS];
char *Lables[10];
String lblRead;
uint8_t pwRead;
uint32_t tmRead;
int aryPtr = 0;
bool isNewLbl = true;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Hello... ");
fillArray();
}
void loop() {
// put your main code here, to run repeatedly:
delay(50); // this speeds up the simulation
isNewLbl = true;
int btn = digitalRead(4);
if (btn == 1) {
lblRead = Lables[random(0, 10)];
pwRead = random(1, 10);
tmRead = millis();
Serial.println("lblRead=" + lblRead + " pwRead=" + pwRead + " tmRead=" + tmRead);
LCD.setCursor(0, 1);
LCD.print("LBL: " + lblRead);
for (int i = 0; i < NUM_READS; i++) {
if (codeVals[i].cd == lblRead) {
//pw1 is max and pw0 is min
if (pwRead < codeVals[i].p1) {
codeVals[i].p1 = pwRead;
codeVals[i].t1 = tmRead;
} else if (pwRead > codeVals[i].p2) {
codeVals[i].p2 = pwRead;
codeVals[i].t2 = tmRead;
}
isNewLbl = false;
printArray(i);
break;
}
}
if (isNewLbl) {
aryPtr++;
if (aryPtr > 99) {
aryPtr = 0;
}
codeVals[aryPtr].cd = lblRead;
codeVals[aryPtr].t1 = tmRead;
codeVals[aryPtr].t2 = tmRead;
codeVals[aryPtr].p1 = pwRead;
codeVals[aryPtr].p2 = pwRead;
printArray(aryPtr);
}
}
delay(500);
}
void fillArray() {
for (int i = 0; i < NUM_READS; i++) {
codeVals[aryPtr] = {"", 0, 0, 0};
}
Lables[0] = "AB1";
Lables[1] = "AB2";
Lables[2] = "AB3";
Lables[3] = "AB4";
Lables[4] = "AB5";
Lables[5] = "CD1";
Lables[6] = "CD2";
Lables[7] = "CD3";
Lables[8] = "CD4";
Lables[9] = "CD5";
}
void printArray(int idx) {
Serial.print("idx:");
Serial.print(idx);
Serial.print(" code:");
Serial.print(codeVals[idx].cd);
Serial.print(" time0:");
Serial.print(codeVals[idx].t1);
Serial.print(" pw0:");
Serial.print(codeVals[idx].p1);
Serial.print(" time1:");
Serial.print(codeVals[idx].t2);
Serial.print(" pw1:");
Serial.println(codeVals[idx].p2);
Serial.println("------------------------------");
}