// UCOK --------- 25 Oktober 2020 // int maxval = 0; uint32_t lastSample = 0; int period = 1000; unsigned long time_now = 0; boolean kecil_selesai; boolean sedang_selesai; boolean besar_selesai; #include Servo myservo; Servo myservo2; float databaru; float dataMax; float dataMin; #include #include int statusalat =0; //0 = Kosong, 1 = Kecil, 2 = Sedang, 3= Besar const int HX711_dout = A4; //mcu > HX711 dout pin const int HX711_sck = A5; //mcu > HX711 sck pin //HX711 constructor: HX711_ADC LoadCell(HX711_dout, HX711_sck); const int calVal_eepromAdress = 0; long t; boolean bol_terseleksi; float berat_terakhir =0; float berat_sekarang =0; /*define the sensor's pins*/ uint8_t trigPin = 3; uint8_t echoPin = 2; //pinMode(12, INPUT); //pinMode(11, INPUT); unsigned long timerStart = 0; int TIMER_TRIGGER_HIGH = 10; int TIMER_LOW_HIGH = 2; float timeDuration, distance; float tinggipermukaan = 10.50; /*The states of an ultrasonic sensor*/ enum SensorStates { TRIG_LOW, TRIG_HIGH, ECHO_HIGH }; SensorStates _sensorState = TRIG_LOW; void startTimer() { timerStart = millis(); } bool isTimerReady(int mSec) { return (millis() - timerStart) < mSec; } void setup() { sedang_selesai==true; besar_selesai==true; Serial.begin(57600); delay(10); Serial.println(); Serial.println("Starting..."); myservo.attach(10); myservo2.attach(9); pinMode(11, INPUT);// set pin as input pinMode(12, INPUT);// set pin as input pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); tutupservo1(); tutupservo2(); delay (1000); bukaservo1(); bukaservo2(); delay(1000); LoadCell.begin(); float calibrationValue; // calibration value (see example file "Calibration.ino") calibrationValue = 262.64; // uncomment this if you want to set the calibration value in the sketch #if defined(ESP8266)|| defined(ESP32) //EEPROM.begin(512); // uncomment this if you use ESP8266/ESP32 and want to fetch the calibration value from eeprom #endif EEPROM.get(calVal_eepromAdress, calibrationValue); // uncomment this if you want to fetch the calibration value from eeprom long stabilizingtime = 500; // preciscion right after power-up can be improved by adding a few seconds of stabilizing time boolean _tare = false; //set this to false if you don't want tare to be performed in the next step LoadCell.start(stabilizingtime, _tare); if (LoadCell.getTareTimeoutFlag()) { Serial.println("Timeout, check MCU>HX711 wiring and pin designations"); while (1); } else { LoadCell.setCalFactor(calibrationValue); // set calibration value (float) Serial.println("Startup is complete"); } LoadCell.tareNoDelay(); } void loop() { static boolean newDataReady = 0; const int serialPrintInterval = 500; //increase value to slow down serial print activity // check for new data/start next conversion: if (LoadCell.update()) newDataReady = true; // get smoothed value from the dataset: if (newDataReady) { if (millis() > t + serialPrintInterval) { float i = LoadCell.getData(); // Serial.print("Berat: "); // Serial.println(i); newDataReady = 0; berat_sekarang = i; Serial.print("Berat Sekarang: "); Serial.println(i); t = millis(); //============================================================================ int detect1 = digitalRead(11); if(detect1 == LOW){ bukaservo1(); bukaservo2(); Serial.print("Mulai Menimbang "); dataMax = berat_sekarang; Serial.print("Berat Awal: "); Serial.print(berat_sekarang); } int detect2 = digitalRead(12); if(detect2 == LOW){ if (berat_sekarang > dataMax) { dataMax = berat_sekarang; }else{ dataMax = dataMax; } Serial.println("Selesai Menimbang"); Serial.print("Berat Max :"); Serial.println(dataMax); if ((dataMax > 40) && (dataMax< 100)){ Serial.print ("Sedang: "); tutupservo2(); dataMax = 0; } if (dataMax > 100){ Serial.print ("Besar "); tutupservo1(); dataMax = 0; } } } // Akhir bagian timbangan ==================================================== // Akhir sensor Infra Red ======================================================= // Cek Serial Command if (Serial.available() > 0) { float i; char inByte = Serial.read(); if (inByte == 't') LoadCell.tareNoDelay(); if (inByte == 'a') bukaservo1(); if (inByte == 'b') tutupservo1(); if (inByte == 'c') bukaservo2(); if (inByte == 'd') tutupservo1(); } if (LoadCell.getTareStatus() == true) { Serial.println("Proses Kalibrasi Selesai"); } } // Akhir Pembacaan Timbangan } // Akhir Void Loop ============================= void bukaservo1(){ myservo.write(100); Serial.println ("Buka Servo_1"); } void tutupservo1(){ myservo.write(180); Serial.println ("Tutup Servo_1"); // delay(3000); // myservo.write(100); //besar_selesai= true; //sedang_selesai= true; } void bukaservo2(){ myservo2.write(100); Serial.println ("Buka Servo_2"); } void tutupservo2(){ myservo2.write(180); Serial.println ("Tutup Servo_2"); // delay(3000); // myservo2.write(100); // sedang_selesai= true; //besar_selesai= true; }