#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "HX711.h"
#include <Keypad.h>
#define Pin_VOLT_SIG1 1
#define Pin_VOLT_SIG2 11
#define Pin_VOLT_SIG3 17
#define Pin_AMP_SIG1 3
#define Pin_AMP_SIG2 4
#define Pin_AMP_SIG3 5
#define Pin_AMP_SIG4 6
#define Pin_AMP_SIG5 7
#define Pin_AMP_SIG6 12
#define Pin_HX711_SCK 20
#define Pin_HX711_DT 21
#define Pin_BUTTON 26
#define Pin_KEYPAD_Itr 36
uint8_t Pin_KEYPAD_Row[4] = {41, 40, 39, 38};
uint8_t Pin_KEYPAD_Col[4] = {33, 34, 35, 36};
// HX711 load cell and sensors calibration setting
const int C[8] = {0, 50, 2100, 12, 8191, 30, 8191, 0};
const char Keys[4][4] =
{{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }};
int Bit[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int Mode[8] = {0, 0, 0, 0, 0, 0, 0, 0};
float Data[20] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
HX711 HX711;
Keypad KEYPAD(makeKeymap(Keys), Pin_KEYPAD_Row, Pin_KEYPAD_Col, 4, 4);
void setup() {
Serial.begin(9600);
pinMode(Pin_BUTTON, INPUT);
LCD.init();
LCD.backlight();
print_LCD_text(2, "Welcome MMU !!!", 0, 0, 0);
print_LCD_text(2, "Starting .....", 0, 0, 1);
delay(3000);
print_LCD_text(4, "", 0, 0, 1);
HX711.begin(Pin_HX711_DT, Pin_HX711_SCK);
set_HX711_reading();
attachInterrupt(Pin_KEYPAD_Itr, get_KEYPAD_selection, HIGH);
}
void loop() {
read_VOLT_data();
read_AMP_data();
read_HX711_data();
if (Mode[0] == 0) {set_LCD_load();} // A
if (Mode[0] == 1) {set_LCD_volt();} // B
if (Mode[0] == 2) {set_LCD_amp();} // C
if (Mode[0] == 3) {set_HX711_reading();} // D
}
void print_LCD_text(int type, char* text, float value, int column, int row) {
LCD.setCursor(column, row);
switch (type) {
case 1: LCD.println(value, DEC); break;
case 2: LCD.println(text); break;
case 3: LCD.clear(); LCD.println(text); break;
case 4: LCD.clear(); break;
}}
void get_KEYPAD_data() {
int j = 4;
while (j < 8) {
char keyin = KEYPAD.getKey();
Data[j] = 0 - 48 + int(keyin);
if (keyin) {
print_LCD_text(3, "Press 4x", 0, 0, 0);
j++;
}}}
void get_KEYPAD_selection() {
int j = 0;
while (j < 1) {
char keyin = KEYPAD.getKey();
Data[j] = 0 - 48 + int(keyin);
if (keyin) {
j++;
}}
if (Data[0] == 17) {Mode[0] = 0;}
if (Data[0] == 18) {Mode[0] = 1;}
if (Data[0] == 19) {Mode[0] = 2;}
if (Data[0] == 20) {Mode[0] = 3;}
return;
}
void read_HX711_data() {
Data[11] = HX711.get_units(10);
Data[12] = C[1]*(Data[11] - Data[10])/C[2];
}
void set_LCD_load() {
print_LCD_text(2, "HX711 reading ", 0, 0, 0);
print_LCD_text(1, "", Data[12], 9, 1);
print_LCD_text(2, " N", 0, 14, 1);
}
void set_LCD_amp() {
LCD.clear();
print_LCD_text(1, "", Data[4], 0, 0);
print_LCD_text(2, " ", 0, 4, 0);
print_LCD_text(1, "", Data[5], 5, 0);
print_LCD_text(2, " ", 0, 9, 0);
print_LCD_text(1, "", Data[6], 10, 0);
print_LCD_text(2, " A", 0, 14, 0);
print_LCD_text(1, "", Data[7], 0, 1);
print_LCD_text(2, " ", 0, 4, 1);
print_LCD_text(1, "", Data[8], 5, 1);
print_LCD_text(2, " ", 0, 9, 1);
print_LCD_text(1, "", Data[9], 10, 1);
print_LCD_text(2, " A", 0, 14, 1);
}
void set_LCD_volt() {
LCD.clear();
print_LCD_text(1, "", Data[1], 0, 0);
print_LCD_text(2, " ", 0, 4, 0);
print_LCD_text(1, "", Data[2], 5, 0);
print_LCD_text(2, " ", 0, 9, 0);
print_LCD_text(1, "", Data[3], 10, 0);
print_LCD_text(2, " V", 0, 14, 0);
}
void read_VOLT_data() {
Data[1] = analogRead(Pin_VOLT_SIG1);
Data[2] = analogRead(Pin_VOLT_SIG2);
Data[3] = analogRead(Pin_VOLT_SIG3);
Data[1] = Data[1]*C[3]/C[4];
Data[2] = Data[2]*C[3]/C[4];
Data[3] = Data[3]*C[3]/C[4];
}
void read_AMP_data() {
Data[4] = analogRead(Pin_AMP_SIG1);
Data[5] = analogRead(Pin_AMP_SIG2);
Data[6] = analogRead(Pin_AMP_SIG3);
Data[7] = analogRead(Pin_AMP_SIG4);
Data[8] = analogRead(Pin_AMP_SIG5);
Data[9] = analogRead(Pin_AMP_SIG6);
Data[4] = Data[4]*C[5]/C[6];
Data[5] = Data[5]*C[5]/C[6];
Data[6] = Data[6]*C[5]/C[6];
Data[7] = Data[7]*C[5]/C[6];
Data[8] = Data[8]*C[5]/C[6];
Data[9] = Data[9]*C[5]/C[6];
}
void set_HX711_reading() {
print_LCD_text(3, "Press button to", 0, 0, 0);
print_LCD_text(2, "reset ...", 0, 0, 1);
for (int i = 0; i <= 9; i++) {
print_LCD_text(1, "", 9 - i, 15, 1);
delay(990);
}
Bit[0] = digitalRead(Pin_BUTTON);
if (Bit[0] == HIGH) {
print_LCD_text(3, "Resetting ...", 0, 0, 0);
Data[10] = HX711.get_units(10);
delay(2000);
}
if (Bit[0] == LOW) {
print_LCD_text(3, "HX711 not reset", 0, 0, 0);
delay(2000);
}
Mode[0] = 0;
}
esp:0
esp:1
esp:2
esp:3
esp:4
esp:5
esp:6
esp:7
esp:8
esp:9
esp:10
esp:11
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:20
esp:21
esp:26
esp:33
esp:34
esp:35
esp:36
esp:37
esp:38
esp:39
esp:40
esp:41
esp:42
esp:45
esp:46
esp:3V3
esp:5V
esp:GND.1
esp:TX
esp:RX
esp:RST
esp:GND.2
cell1:VCC
cell1:DT
cell1:SCK
cell1:GND
pot1:GND
pot1:SIG
pot1:VCC
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
pot2:GND
pot2:SIG
pot2:VCC
pot3:GND
pot3:SIG
pot3:VCC
pot4:GND
pot4:SIG
pot4:VCC
pot6:GND
pot6:SIG
pot6:VCC
pot7:GND
pot7:SIG
pot7:VCC
pot8:GND
pot8:SIG
pot8:VCC
pot9:GND
pot9:SIG
pot9:VCC
pot10:GND
pot10:SIG
pot10:VCC
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
vcc1:VCC
gnd1:GND
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r