Untitled
user_6434122
plain_text
a year ago
14 kB
5
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