Load Cell with servo control

I have a loadcelll, 2 LCD I2C, ISL29125 sensor, HX711, and servo with button without keypad. When I can to detect from ISL29125 sensor, they will be classification in true or false then value ISL visible after push the button 5 times and average the value.
I want float z read from the classification, with the result that z will open and close the servo in condition 200 gr, 175 gr, 150 gr, 125 gr, etc.

What can I do with the code ?

load_cell.ino (10.1 KB)

@Chasni2218, do not hijack. Do not cross-post. Other post removed.

Chasni2218:
What can I do with the code ?

You can post it in code tags. I can't open .ino on my phone.

I’m sorry, i’m a newbie in here !! :sweat_smile:

#include <Wire.h>                  // deklarasi program
#include <LCD.h>                   // deklarasi lcd
#include <LiquidCrystal_I2C.h>     // deklarasi I2C
#include "SFE_ISL29125.h"          // deklarasi sensor ISL29125

#include "HX711.h"                  // deklarasi Load cell
#include <Servo.h>                  // deklarasi servo

#define DOUT A1
#define CLK A0

HX711 scale(DOUT, CLK);
Servo myservo;
LiquidCrystal_I2C   lcd1(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);       // Masukkan alamat Device 0x27, ukuran LCD 16x2 (dengan 16 pin)
LiquidCrystal_I2C   lcd2(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);       // Masukkan alamat Device 0x27, ukuran LCD 16x2 (dengan 16 pin)


const int  tombol1 = 8;    // Tombol Counter
const int  tombol2 = 9;    // Tombol Reset
const int  tombol3 = 13;     // Tombol Buka
const int  tombol4 = 12;     // Tombol Tutup
const int  tombol5 = 11;     // Tombol Reset
int freq = 0;
int ratarata = 0;

int CounterTbl = 0;    
int STombol1 = 0;         
int STombol2 = 0;
int STombol3 = 0;
int STombol4 = 0;
int STombol5 = 0;

int STerakhir = 0; 
float z;
Int pos = 0;
float calibration_factor = 225.5; //This value is obtained using the SparkFun_HX711_Calibration sketch

SFE_ISL29125 RGB_sensor;
int Red = 0;
int Green = 0;
int Blue = 0;

unsigned int frequency = 0;
int data1 = 0;
int data2 = 0;
int data3 = 0;
int data4 = 0;
int data5 = 0;
int counter = 0;
boolean bhasil;


unsigned long i,                       // premenna cyklu
              cislo=2,                 // cislo, ktore testujeme, ci je prvocislo
              n=1;                     // poradie vypisovaneho prvocisla

boolean prime=1;                       // 0-false, 1-true

void setup() {
  bhasil = false;
  pinMode(tombol1, INPUT);
  pinMode(tombol2, INPUT);
  pinMode(tombol3, INPUT);
  pinMode(tombol4, INPUT);
  pinMode(tombol5, INPUT);
  
  lcd1.begin(16,2);                    // lcd.setBacklightPin(3, POSITIVE);
  lcd1.setBacklight(HIGH);
  lcd2.begin(16,2);
  lcd2.setBacklight(HIGH); 


  myservo.attach(10);
  
    lcd1.setCursor(0,0);
    lcd1.print("    V-Macfer     ");
    lcd1.setCursor(0,1);
    lcd1.print("     READY!     ");
    delay(2000);

    scale.set_scale(calibration_factor);       
    scale.tare();                             
    lcd2.setCursor(3,0);
    lcd2.print("Berat(gr)");
    

    //-------------------------->>>> RGB Sensor
    RGB_sensor.init();

Reply #3 has a large and unweildy loop() function and nothing else. Reply #4 has only part of the setup() function.

Use the control-T auto format before posting again.

Are there someone can help my script problem, please

}

void loop() { 
  
  z = (scale.get_units());          // nilai z merupakan "nilai berat"
  
  scale.set_scale(calibration_factor);
  lcd2.setCursor(3,0);
  lcd2.print("Berat(gr)");
  lcd2.setCursor(5,1);
  lcd2.print(scale.get_units()); 
           
          //--------------------------->>>> Read sensor values (16 bit integers)
                  unsigned int Red = RGB_sensor.readRed();
                  unsigned int Green = RGB_sensor.readGreen();
                  unsigned int Blue = RGB_sensor.readBlue();
                  
                  float R = RGB_sensor.readRed();
                  float G = RGB_sensor.readGreen();
                  float B = RGB_sensor.readBlue();       
                  
                  frequency = G-R;             // reading frequency
               
           if (bhasil == false){
                    lcd1.clear();
                    lcd1.print("GREEN:"); 
                    lcd1.setCursor(8, 0);
                    lcd1.print(frequency);     // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.print(CounterTbl);
                    lcd1.setCursor(0, 1);
                    lcd1.print(" AVG :"); 
                    lcd1.setCursor(7, 1);                           
                    lcd1.print(ratarata);

                    Serial.println ("Mode Monitoring");

                 if (frequency <= 15 || frequency >= 70) {   // 8  1700-200 Kg/Ha                                         
                      lcd1.clear();
                      lcd1.setCursor(0, 0);
                      lcd1.print("Letakkan Daun" );// printing GREEN color frequency
                      lcd1.setCursor(0, 1);
                      lcd1.print("Pada Sensor.....");// printing GREEN color frequency
                 }
           }

 
  // Baca Status Tombol
  STombol1 = digitalRead(tombol1);
  STombol2 = digitalRead(tombol2);  
  // Jika Tombol Reset maka reset Counter
  if (STombol2 == HIGH) {
    Serial.println("Reset Data");
    delay(250);
    CounterTbl = 0;
    freq = 0;
    ratarata = 0;
    bhasil = false;
    lcd1.clear();
  }

  //------------------------------->>> Baca Status Tombol Terbuka
  STombol3 = digitalRead(tombol3);
  
   if (STombol3 == HIGH) {
      myservo.write(90);
      myservo.write(0);
      }
      
//------------------------------->>> Baca Status Tombol Tertutup
  STombol4 = digitalRead(tombol4);
  
   if (STombol4 == HIGH) {
      
      myservo.write(0);
      myservo.write(90);
      }

//------------------------------->>> Baca Status Tombol Reset
  STombol5 = digitalRead(tombol5);
  
   if (STombol5 == HIGH) {
      lcd2.clear();
      delay(250);
      scale.tare(); 
      }

  if (STombol1 == HIGH )  {
       CounterTbl++;
       freq = freq + frequency;
       ratarata= freq/CounterTbl;
       delay(250);
   }
  
  if (STombol1 != STerakhir) {
     if (CounterTbl >= 5) { 
         ratarata = freq/5 ;
         Pos;
         bhasil= true;
         }
         STerakhir = STombol1;
         }
         
         delay(500);        

          if (bhasil == true){
                 

                 
                if (ratarata  >=15  and ratarata <= 23)  {         // <1 1700-200 Kg/Ha
                    
                    lcd1.setCursor(0,0);
                    lcd1.print("AVG GREEN:"); 
                    lcd1.setCursor(12, 0);
                    lcd1.print(ratarata);         // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.setCursor(0, 1);
                    lcd1.print("P: 200 gram");
                    pos = 0;
                    myservo.write(pos);
                    If (z >= 200) { myservo.write(90) }
                    
                    
                } else if (ratarata >=24  and ratarata <= 28) {   // 2  1700-200 Kg/Ha
                
                    lcd1.setCursor(0,0);
                    lcd1.print("AVG GREEN:");
                    lcd1.setCursor(12, 0);
                    lcd1.print(ratarata);         // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.setCursor(0, 1);
                    lcd1.print("P: 175 gram");
                    pos = 0;
                    myservo.write(pos);
                    If (z >= 175) { myservo.write(90) }

                    
                } else if (ratarata >= 29 and ratarata <= 33) {   // 3 1700-200 Kg/Ha
                    
                    lcd1.setCursor(0,0);
                    lcd1.print("AVG GREEN:");
                    lcd1.setCursor(12, 0);
                    lcd1.print(ratarata);         // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.setCursor(0, 1);
                    lcd1.print("P: 150 gram");
                    pos = 0;
                    myservo.write(pos);
                    If (z >= 150) { myservo.write(90) }

                    
                } else if (ratarata >= 34 and ratarata <= 38) {   // 4  1700-200 Kg/Ha
                 
                    lcd1.setCursor(0,0);
                    lcd1.print("AVG GREEN:"); 
                    lcd1.setCursor(12, 0);
                    lcd1.print(ratarata);         // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.setCursor(0, 1);
                    lcd1.print("P: 125 gram");
                    pos = 0;
                    myservo.write(pos);
                    If (z >= 125) { myservo.write(90) }

                    
                } else if (ratarata >= 39 and ratarata <= 43) {   // 5  1700-200 Kg/Ha
                    
                    lcd1.setCursor(0,0);
                    lcd1.print("AVG GREEN:"); 
                    lcd1.setCursor(12, 0);
                    lcd1.print(ratarata);         // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.setCursor(0, 1);
                    lcd1.print("P: 100 gram");
                    pos = 0;
                    myservo.write(pos);
                    If (z >= 100) { myservo.write(90) }

                    
                } else if (ratarata >= 44 and ratarata <= 48) {   // 6  1700-200 Kg/Ha
                    
                    lcd1.setCursor(0,0);
                    lcd1.print("AVG GREEN:"); 
                    lcd1.setCursor(12, 0);
                    lcd1.print(ratarata);        // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.setCursor(0, 1);
                    lcd1.print("P: 75 gram");
                    pos = 0;
                    myservo.write(pos);
                    If (z >= 75) { myservo.write(90) }

                    
                } else if (ratarata >= 49 and ratarata <= 52) {       
                    lcd1.setCursor(0,0);
                    lcd1.print("AVG GREEN:");
                    lcd1.setCursor(12, 0);
                    lcd1.print(ratarata);        // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.setCursor(0, 1);
                    lcd1.print("P: 50 gram");
                    pos = 0;
                    myservo.write(pos);
                    If (z >= 50) { myservo.write(90) }


                    } else if (ratarata >= 53 and ratarata <= 70) {       
                    lcd1.setCursor(0,0);
                    lcd1.print("AVG GREEN:");
                    lcd1.setCursor(12, 0);
                    lcd1.print(ratarata);        // printing GREEN color frequency
                    lcd1.setCursor(15, 0);
                    lcd1.setCursor(0, 1);
                    lcd1.print("P: 25 gram");
                    pos = 0;
                    myservo.write(pos);
                    If (z >= 25) { myservo.write(90) }

  
               } 
                CounterTbl = 0;
                freq = 0;
                ratarata=0;
        }


}

MorganS:
You can post it in code tags. I can't open .ino on my phone.

Can you help me, please ?

Why the servo is not move close or detect ratarata ?

const int  tombol1 = 8;    // Tombol Counter

const int  tombol2 = 9;    // Tombol Reset
const int  tombol3 = 13;    // Tombol Buka
const int  tombol4 = 12;    // Tombol Tutup
const int  tombol5 = 11;    // Tombol Reset

Don't use numbers. Use names. Use the names you used in the comments on the right.

  z = (scale.get_units());          // nilai z merupakan "nilai berat"

scale.set_scale(calibration_factor);
  lcd2.setCursor(3,0);
  lcd2.print("Berat(gr)");
  lcd2.setCursor(5,1);
  lcd2.print(scale.get_units());

You read z from the scale and then you change the calibration on the scale and read it again to print a different value. So you have no idea what is in z.

Do you ever change the calibration back before the next reading of z?

                  frequency = G-R;             // reading frequency

if (bhasil == false){
                    lcd1.clear();
                    lcd1.print("GREEN:");

You read the color sensor and do some calculation with green and red. Then you examine the value of another variable unrelated to that calculation and print a color? I could not find where bhasil was given any value.

The code is still too fragmented to do much analysis. These 3 things are not the only problems.