Untitled
user_6434122
plain_text
2 years ago
14 kB
14
Indexable
#include <CMBMenu.hpp>
#include <LiquidCrystal_I2C.h>
#include "HX711.h"
#define LCDPINSCL A5
#define LCDPINSDA A4
#define BUTTON_PIN1 2
#define BUTTON_PIN2 3
#define BUTTON_PIN3 4
#define BUTTON_PIN4 5
// #define RESET_BUTTON 6
bool HOLD_BUTTON = 0;
//displaying text
const char MenuMain_[] PROGMEM = {"PROJECT"};
//displaying menu 1
const char MenuHitung_[] PROGMEM = {"1. Hitung"};
const char MenuHitungA_[] PROGMEM = {"1.1 Berat"};
const char MenuHitungB_[] PROGMEM = {"1.2 Panjang"};
const char MenuHitungC_[] PROGMEM = {"1.3 Volume"};
const char MenuHitungD_[] PROGMEM = {"1.4 Massa Jenis"};
//displaying menu 2
const char MenuKalibrasi_[] PROGMEM = {"2. Kalibrasi"};
const char MenuKalibrasiA_[] PROGMEM = {"2.1 S. HCSR04"};
const char MenuKalibrasiB_[] PROGMEM = {"2.2 S. HX711"};
const char MenuKalibrasiC_[] PROGMEM = {"2.3 Massa Wadah"};
//displaying menu 3
//define function IDs
enum MenuFID {
MenuDummy,
MenuMain,
MenuHitung,
MenuHitungA,
MenuHitungB,
MenuHitungC,
MenuHitungD,
MenuKalibrasi,
MenuKalibrasiA,
MenuKalibrasiB,
MenuKalibrasiC
};
enum KeyType {
KeyNone,
KeyLeft,
KeyRight,
KeyEnter,
KeyExit,
KeyUp, // Special
KeyTurn,
};
// KeyType key = KeyNone;
//custom character:
const uint8_t Left[] = {
B00001,
B00011,
B00111,
B01111,
B00111,
B00011,
B00001,
B00000
};
const uint8_t Right[] = {
B10000,
B11000,
B11100,
B11110,
B11100,
B11000,
B10000,
B00000
};
const uint8_t Enter[] = {
B00001,
B00001,
B00101,
B01101,
B11111,
B01100,
B00100,
B00000
};
const uint8_t Exit[] = {
B00000,
B10001,
B01010,
B00100,
B01010,
B10001,
B00000,
B00000
};
const uint8_t Up[] = {
B00000,
B00100,
B01110,
B11111,
B00000,
B11111,
B01110,
B00100
};
//declaring libraries and function
CMBMenu<100> Menu;
LiquidCrystal_I2C lcd(0x27, 16 ,2);
HX711 scale;
//HCSR04 WORK
const uint8_t trigPin = 10;
const uint8_t echoPin = 9;
long duration;
float distanceCm;
float CalFactor_HCSR04;
float value_HCSR04 = 0;
//HX711 WORK
#define KNOWN_WEIGHT 100
#define LOADCELL_DOUT_PIN 12
#define LOADCELL_SCK_PIN 13
double CalFactor_HX711 = 0;
long LOADCELLVAL1;
long LOADCELLVAL2;
double WeightTare;
//VOLUME WORK
double VOLUME_OBJECT;
float Panjang = 14.50; //cm
float Lebar; //cm
float Tinggi; //cm
//MASSA JENIS WORK
static double Massa_Wadah = 0;
void setup() {
pinMode(LCDPINSCL, OUTPUT);
pinMode(LCDPINSDA, OUTPUT);
pinMode(BUTTON_PIN1, INPUT_PULLUP);
pinMode(BUTTON_PIN2, INPUT_PULLUP);
pinMode(BUTTON_PIN3, INPUT_PULLUP);
pinMode(BUTTON_PIN4, INPUT_PULLUP);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
int fid = 0;
KeyType key = KeyNone;
Serial.begin(9600);
lcd.begin();
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
Serial.println("LABEL,Date,Tinggi(cm),Berat(g),Volume(cm^3),Massa Jenis(g/cm^3)");
//CreateChar
lcd.createChar(0, Left);
lcd.createChar(1, Right);
lcd.createChar(2, Enter);
lcd.createChar(3, Exit);
lcd.createChar(4, Up);
lcd.backlight();
lcd.clear();
lcd.setCursor(3,0);
lcd.print("UAS FISIKA");
lcd.setCursor(3,1);
lcd.print("-PRAKTIKUM");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Oleh:");
lcd.setCursor(0,1);
lcd.print("Pramuditya AR");
delay(2000);
lcd.clear();
lcd.print("Oleh:");
lcd.setCursor(0,1);
lcd.print("Enrico Fran G");
delay(2000);
lcd.clear();
lcd.print("Oleh:");
lcd.setCursor(0,1);
lcd.print("Aldo Dzar A.");
delay(2000);
lcd.clear();
lcd.print("Oleh:");
lcd.setCursor(0,1);
lcd.print("Indyash Maryuba");
delay(2000);
lcd.clear();
lcd.print("Oleh:");
lcd.setCursor(0,1);
lcd.print("Ketut Widya A.");
delay(2000);
lcd.clear();
lcd.print("Oleh:");
lcd.setCursor(0,1);
lcd.print("Ni Wayan Lina S.");
delay(2000);
Menu.addNode(0, MenuHitung_, MenuHitung);
Menu.addNode(1, MenuHitungA_, MenuHitungA);
Menu.addNode(1, MenuHitungB_, MenuHitungB);
Menu.addNode(1, MenuHitungC_, MenuHitungC);
Menu.addNode(1, MenuHitungD_, MenuHitungD);
Menu.addNode(0, MenuKalibrasi_, MenuKalibrasi);
Menu.addNode(1, MenuKalibrasiA_, MenuKalibrasiA);
Menu.addNode(1, MenuKalibrasiB_, MenuKalibrasiB);
Menu.addNode(1, MenuKalibrasiC_, MenuKalibrasiC);
const char* info;
Menu.buildMenu(info);
Menu.printMenu();
printMenuEntry(info, fid, key);
}
void loop() {
int fid = 0;
// int holdfid;
//HCSR04
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * 0.034 / 2;
const char* info;
bool layerChanged=false;
lcd.setCursor(9,1);
lcd.write(byte(0));
lcd.setCursor(11,1);
lcd.write(byte(1));
lcd.setCursor(13,1);
lcd.write(byte(2));
lcd.setCursor(15,1);
lcd.write(byte(3));
KeyType key = getKey();
switch(key) {
case KeyExit:
Menu.exit();
break;
case KeyEnter:
Menu.enter(layerChanged);
break;
case KeyRight:
Menu.right();
break;
case KeyLeft:
Menu.left();
break;
default:
break;
}
if(KeyNone != key) {
fid = Menu.getInfo(info);
// holdfid = fid;
// Serial.println(fid);
// Serial.println(holdfid);
printMenuEntry(info, fid, key);
}
if((0 != fid) && (KeyEnter == key) && (!layerChanged)) {
switch (fid){
case MenuHitungA:
HitungA(CalFactor_HX711);
break;
case MenuHitungB:
HitungB(CalFactor_HCSR04, distanceCm);
break;
case MenuHitungC:
HitungC(CalFactor_HCSR04, distanceCm);
break;
case MenuHitungD:
HitungD(CalFactor_HX711, CalFactor_HCSR04, distanceCm);
break;
case MenuKalibrasiA:
KalibrasiA(distanceCm);
break;
case MenuKalibrasiB:
KalibrasiB();
break;
case MenuKalibrasiC:
KalibrasiC(CalFactor_HX711);
break;
default:
break;
}
}
}
void printMenuEntry(const char* f_info, int f_fid, int f_key){
String info_s;
MBHelper::stringFromPgm(f_info, info_s);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(info_s);
}
KeyType getKey(){
KeyType key = KeyNone;
// while(Serial.available() > 0){
// String Key_s = Serial.readString();
// Key_s.trim();
// Serial.println("");
// if(Key_s.equals("l")){
// key = KeyLeft;
// Serial.println("<left>");
// } else if(Key_s.equals("r")){
// key = KeyRight;
// Serial.println("<right>");
// } else if(Key_s.equals("e")){
// key = KeyEnter;
// Serial.println("<enter>");
// } else if(Key_s.equals("x")){
// key = KeyExit;
// Serial.println("<exit>");
// }
// }
if ((HOLD_BUTTON == LOW) && (digitalRead(BUTTON_PIN1) == LOW)){
key = KeyLeft;
Serial.print("<left>");
HOLD_BUTTON == HIGH;
delay(1000);
} else if ((HOLD_BUTTON == LOW) && (digitalRead(BUTTON_PIN2) == LOW)){
key = KeyRight;
Serial.print("<right>");
HOLD_BUTTON == HIGH;
delay(1000);
} else if ((HOLD_BUTTON == LOW) && (digitalRead(BUTTON_PIN3) == LOW)){
key = KeyEnter;
Serial.print("<enter>");
HOLD_BUTTON == HIGH;
delay(1000);
} else if ((HOLD_BUTTON == LOW) && (digitalRead(BUTTON_PIN4) == LOW)){
key = KeyExit;
Serial.print("<exit>");
HOLD_BUTTON == HIGH;
delay(1000);
}
return key;
}
void HitungA(long calFactor_f){ // Hitung Berat
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Berat: ");
// scale.tare();
scale.set_scale(calFactor_f);
WeightTare = (scale.get_units(50));
double WEIGHT_OBJECT = WeightTare - Massa_Wadah;
Serial.print("\t| average:\t");
Serial.println(WEIGHT_OBJECT);
// lcd.print((WeightTare));
if (WEIGHT_OBJECT < -3.50){
lcd.setCursor(0,0);
lcd.print("Kalibrasi ...");
lcd.setCursor(0,1);
lcd.print("dahulu");
} else if(WEIGHT_OBJECT < 0.40) {
lcd.print(WEIGHT_OBJECT - WEIGHT_OBJECT);
lcd.print("g");
} else {
lcd.print(WEIGHT_OBJECT);
lcd.print("g");
}
}
void HitungB(float CalFactor_HCSR04_f, float distanceCm_f){ // Hitung Panjang
value_HCSR04 = CalFactor_HCSR04_f - distanceCm_f;
lcd.setCursor(0, 0);
lcd.print("Panjang: ");
Serial.print("\t| panjangDumb:\t");
Serial.println(value_HCSR04);
if(value_HCSR04 < -1.50){a
lcd.setCursor(0,0);
lcd.print("Kalibrasi ...");
lcd.setCursor(0,1);
lcd.print("dahulu");
} else if(value_HCSR04 < 0.50) {
lcd.print(distanceCm_f - distanceCm_f);
lcd.print("cm");
} else {
lcd.print(value_HCSR04);
lcd.print("cm");
}
}
void HitungC(float CalFactor_HCSR04_f, float distanceCm_f){ // Hitung Volume
//FIX SHAPE
value_HCSR04 = CalFactor_HCSR04_f - distanceCm_f;
// Lebar = 7.36; //cm
Tinggi = value_HCSR04; //cm
if(Tinggi > -1 && Tinggi < 0){
Tinggi = 0;
}
VOLUME_OBJECT = Panjang/2 * (3.14*3.14) * Tinggi ;
Serial.print("VOLUME: ");
Serial.println(VOLUME_OBJECT);
Serial.print("Tinggi ");
Serial.println(Tinggi);
if(VOLUME_OBJECT < -1.5){
lcd.setCursor(0,0);
lcd.print("Kalibrasipanjang");
lcd.setCursor(0,1);
lcd.print("dahulu");
} else if(VOLUME_OBJECT < 0.5){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("V: ");
lcd.print(VOLUME_OBJECT - VOLUME_OBJECT);
lcd.print("cbc");
lcd.setCursor(0,1);
lcd.print("t: ");
lcd.print(Tinggi);
lcd.print("cm");
} else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("V: ");
lcd.print(VOLUME_OBJECT);
lcd.print("cbc");
lcd.setCursor(0,1);
lcd.print("t: ");
lcd.print(Tinggi);
lcd.print("cm");
}
}
void HitungD(long calFactor_f, float CalFactor_HCSR04_f, float distanceCm_f){ // Hitung Massa Jenis
lcd.clear();
scale.set_scale(calFactor_f);
WeightTare = (scale.get_units(50));
double WEIGHT_OBJECT = WeightTare - Massa_Wadah;
value_HCSR04 = CalFactor_HCSR04_f - distanceCm_f;
//cm
// Lebar = 7.36; //cm
Tinggi = value_HCSR04; //cm
if(Tinggi > -1 && Tinggi < 0.08){
Tinggi = 0;
}
VOLUME_OBJECT = Panjang/2 * (3.14*3.14) * (Tinggi);
if (WEIGHT_OBJECT < -1.50 || VOLUME_OBJECT < -1.5){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Kalibrasi ...");
lcd.setCursor(0,1);
lcd.print("dahulu");
}
if(WEIGHT_OBJECT < 0.08 && WeightTare > -100) {
WeightTare = 0;
}
if(VOLUME_OBJECT < 0.5 && VOLUME_OBJECT > -0.1){
VOLUME_OBJECT = 0;
}
Serial.print("\t| average:\t");
Serial.println(WEIGHT_OBJECT);
Serial.print("\t| Volume:\t");
Serial.println(VOLUME_OBJECT);
Serial.print("\t| Tinggi:\t");
Serial.println(Tinggi);
if (WEIGHT_OBJECT == 0 || VOLUME_OBJECT == 0 ){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MJ = ");
lcd.print(0);
Serial.println((String) "DATA,DATE," + Tinggi + "," + WEIGHT_OBJECT + "," + VOLUME_OBJECT + "," + ((WEIGHT_OBJECT) / VOLUME_OBJECT));
} else if(WeightTare > 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MJ = ");
lcd.print((WEIGHT_OBJECT) / VOLUME_OBJECT);
Serial.println((String) "DATA,DATE," + Tinggi + "," + WEIGHT_OBJECT + "," + VOLUME_OBJECT + "," + ((WEIGHT_OBJECT) / VOLUME_OBJECT));
}
}
void KalibrasiA(float distanceCm_f){ // Kalibrasi HCSR04
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Kosongkan ...");
delay(5000);
CalFactor_HCSR04 = distanceCm_f;
Serial.print(CalFactor_HCSR04);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kalibrasi ...");
lcd.setCursor(0,1);
lcd.print("selesai");
delay(1000);
}
void KalibrasiB(){ // Kalibrasi HX711
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Siapkan Beban...");
lcd.setCursor(0, 1);
lcd.print("100 & 50 g");
delay(5000);
scale.tare();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Letakkan ....");
lcd.setCursor(0, 1);
lcd.print("Beban 50g");
delay(5000);
LOADCELLVAL1 = scale.get_units(50) * 2;
Serial.print("\nValue1: ");
Serial.println(LOADCELLVAL1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Angkat Beban ....");
lcd.setCursor(0, 1);
lcd.print(LOADCELLVAL1);
delay(5000);
scale.tare();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Letakkan ....");
lcd.setCursor(0, 1);
lcd.print("Beban 100g");
delay(5000);
LOADCELLVAL2 = scale.get_units(50);
Serial.print("\nValue2: ");
Serial.println(LOADCELLVAL2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Angkat Beban ....");
lcd.setCursor(0, 1);
lcd.print(LOADCELLVAL2);
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kalibrasi ...");
lcd.setCursor(0,1);
lcd.print("selesai");
CalFactor_HX711 = (((LOADCELLVAL1 + LOADCELLVAL2)/2)/KNOWN_WEIGHT);
Serial.print("CalFactor: ");
Serial.println(CalFactor_HX711);
delay(1000);
}
void KalibrasiC(float calFactor_f){
lcd.clear();
lcd.setCursor(0,0);
// scale.tare();
scale.set_scale(calFactor_f);
Serial.print("\t| average:\t");
Serial.println(WeightTare);
// lcd.print((WeightTare));
if (WeightTare < -1.50){
lcd.setCursor(0,0);
lcd.print("Kalibrasi HX711");
lcd.setCursor(0,1);
lcd.print("dahulu");
} else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Taruh wadah");
delay(10000);
WeightTare = (scale.get_units(50));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kalibrasi ...");
lcd.setCursor(0,1);
lcd.print("selesai");
delay(1000);
if(WeightTare < 1){
Massa_Wadah = 0;
} else {
Massa_Wadah = WeightTare;
}
Serial.print("Massa Wadah: ");
Serial.println(Massa_Wadah);
}
}
Editor is loading...
Leave a Comment