I2c display geeft geen weergave

Ik ben bezig met een weegschaal met 2 HX711 weegbalkjes, een arduino nano en een I2c lcd diplay om het zwaartepunt van mijn modelvliegtuigen te meten, ik heb deze sketch reeds geladen en met de serial monitor heb ik de weegschaal reeds juist ingesteld, echter krijg ik geen tekst te zien in de lcd ( enkel wel licht) ik heb met de i2c scanner het adres gezocht en is 0x27 ik weet echter niet waar in de sketch ik dit adress moet vermelden,
aub wie kan mij helpen?

alvast bedankt

upload je sketch, dan kunnen we aanwijzingen geven.
Hangt van je library en display af.

mogelijke voorbeelden:
LiquidCrystal_I2C lcd(0x27, 16, 2); // Zet het LCD adres 0x27 voor een 1602 display
LiquidCrystal_I2C lcd(0x27, 20, 4); // Zet het LCD adres 0x27 voor een 2004 display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define LCD_ADRES 0x27 // Zet hte LCD adres op 0x27
LiquidCrystal_I2C lcd(LCD_ADRES, 16, 2); // Voor een 1602 display

ok, bedankt alvast voor de snelle reactie, ik probeer hier de sketch te plaatsen,
het lukt me niet de sketch hier te plaatsen, blijkbaar te lang?`

ik probeer nog een keer een gedeelte van de sketch

#define LCD_LEN 16

//** i2c LCD librarys and declaration:
#ifdef USE_I2CDISP
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //can be installed from the library manager

//** declare i2c lcd object:
#ifdef USE_CUSTOM_I2C_PINS
//** declare custom pin i2c lcd object:
LiquidCrystal_I2C  lcdI2C(I2CDISP_ADR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
#else
//** declare standard pin i2c lcd object:
LiquidCrystal_I2C lcdI2C(I2CDISP_ADR, 16, 2);
#endif
#endif

byte seroutput = 0; //0: Serial LCD display, 1: Wt+CG+loadcell value, 2: other (calibration etc.)


//***
void setup() {
  Serial.begin(9600); //don't change if you use the serial LCD display option
  printMenu();
  setupLCD();
  setupLoadcells();

#ifdef USE_ZERO_BUTTON
  pinMode(zero_button_pin, INPUT_PULLUP); //optional led
#endif

#ifdef USE_LED
  pinMode(led_pin, OUTPUT); //optional led
  digitalWrite(led_pin, HIGH);
#endif
}


//***
void loop() {
  //** library function update() should be called at least as often as HX711 sample rate; >10Hz@10SPS, >80Hz@80SPS
  //** longer delay in sketch will reduce effective sample rate (so be careful with use of delay())
  if (LoadCell_1.update() || LoadCell_2.update()) {
    displayWeightAndCG();
  }

  // receive command from serial terminal
  if (Serial.available() > 0) {
    handleIncSerial();
  }

  displayVoltage();
  zeroButton();
  flashLED();
}


//*** set up LCD:
void setupLCD() {
#ifdef USE_I2CDISP
  lcdI2C.begin(16, 2);
  lcdI2C.setBacklight(1);
#endif

  char lcdtext[LCD_LEN + 1] = {"F3X COG scale   "};

Heb je geprobeerd het contrast aan te passen met de potentiometer op de I2C print?

In de IDE

  1. Tools -> autoformat
  2. Edit -> copy for forum

Vervolgens hier in een antwoord plakken.

Het gedeelte dat je getoond hebt is zeker niet te lang, zelfs niet als dat slechts 50% is. De limiet is iets in de geest van 100.000 karakters in een antwoord.

zet ergens bovenaan

#define I2CDISP_ADR 0x27 // Zet het LCD adres op 0x27

En.... wat sterretje zeer terecht opmerkte; zoek met draaien aan de potentiometer naar het goede contrast.

Ik ga morgen weer aanneemt slag
Grts

Ik heb die weegschaal een paar jaar geleden ook gebouwd.
ALs je een I2C display gebruikt moet je de bodem van het kastje iets dieper printen op je 3D printer.
Ik heb ook de houders wat breder gemaakt, zodat er een wat bredere romp in kan. Op de foto ligt er een 3 meter zwever op. 3d bestanden die ik heb aangepast zitten in de zipfile.


CG_scale_aanpassingen.zip (108.0 KB)

Mooi dat er nog een modelbouwer is die wil bijstaan, weet jij nog welke sketch u gebruikt heeft?, ik zit zelf in een beginfase met arduino, ik heb inmiddels een sketch geladen en deze werkt momenteel , ik heb echter geen 3 d printer, en zou de weegschaal constructie met hout willen maken. Ik heb 2 loadcellen van 5 kg genomen daar ik ook zwevers heb van 5 meter en 6,5 kg.
Op het lcd schermpje verschijnt bij het opstarten eerst een tekst, ik denk dat het Zweeds is, dat wil ik er nog afhalen, moet alleen nog zoeken waar dit deel in de sketch vernoemd word. Daarna beslis ik pas hoe ik ga opbouwen.
Ik heb ook nog een 2de weegschaal met 3 weegcellen en Esp 8266 en OLED display op stapel staan, maar dat wordt een winter projectje.

Mvg

Gilbert

Ik heb denk ik dezelfde sketch gebruikt van Olav Kallhovd.

Let op dat je nog wel het I2C adres moet wijzigen in dat van jouw display.

/*
   CG scale for F3F & F3B models
   Olav Kallhovd 2016-2017

   CG Scale main components:
   1 pc load sensor front YZC-133 2kg
   1 pc load sensor rear YZC-133 3kg
   2 pc HX711 ADC, one for each load sensor (128bit resolution)
   1 pc Arduino Pro for the scale
   1 pc Arduino Pro for the Serial display
   1 pc 16*2 HD44780 LCD for the Serial display
   3D printed parts

   Max model weight with sensors above: 4 to 4,5kg depending on CG location

*/

#include <HX711_ADC.h> //https://github.com/olkal/HX711_ADC can be installed from the library manager
//Number of samples and some filtering settings can be adjusted in the HX711_ADC.h library file
//The best RATE setting is usually 10SPS, see HX711 data sheet (HX711 pin 15, can usually be set by a solder jumper on the HX711 module)
//RATE 80SPS will also work fine, but conversions will be more noisy, so consider increasing number of samples in HX711_ADC.h

//HX711 constructor (dout pin, sck pint):
HX711_ADC LoadCell_1(A2, A3); //HX711 pins front sensor (DOUT, PD_SCK)
HX711_ADC LoadCell_2(A0, A1); //HX711 pins rear sensor (DOUT, PD_SCK)


// I²C-Display, if available
// Enable I²C-Display?
#define I2CDISP
#ifdef I2CDISP
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x3F or 0x27 for a 16 chars and 2 line display
#endif

byte ledPin = 13;
byte batRefPin = A6;
char toLCD[20];
byte output;
boolean ledState;
long t1;
long t2;

const int printInterval = 500; // LCD/Serial refresh interval

//*** configuration:
//*** set dimensional calibration values:
const long WingPegDist = 1200; //calibration value in 1/10mm, projected distance between wing support points, measure with calliper
const long LEstopperDist = 300; //calibration value 1/10mm, projected distance from front wing support point to leading edge (stopper pin), measure with calliper
//*** set scale calibration values (best to have the battery connected when doing calibration):
const float ldcell_1_calfactor = 778.0; // user set calibration factor load cell front (float)
const float ldcell_2_calfactor = 871.0; // user set calibration factor load cell rear (float)
//***
const long stabilisingtime = 3000; // tare precision can be improved by adding a few seconds of stabilising time
//***
const long CGoffset = ((WingPegDist / 2) + LEstopperDist) * 10;

void setup() {
  //***
  // 0: Serial-Console (Your PC); 
  // 1: Serial-LCD (2nd Arduino with SimpleSerialDisplay)
  // 2: I2C-LCD (define I2CDISP above!)
  output = 2;
  //***
  
  Serial.begin(9600);
//  Serial.write(254);
//  Serial.write(128);
  Serial.println(F("F3X COG scale"));
//  Serial.write(254);
//  Serial.write(192);
  Serial.print(F("Bat:"));
  int batval = readBattVoltage();
  Serial.write((char)(batval / 1000) + 48);
  Serial.print(F("."));
  Serial.write((char)((batval % 1000) / 100) + 48);
  Serial.write((char)((batval % 100) / 10) + 48);
  Serial.println(F("V"));
  if (output == 0) { //if output to serial terminal
    Serial.println();
    Serial.println(F("Wait for stabilising and tare..."));
  }
#ifdef I2CDISP
  if (output != 2)
    Serial.println(F("You have I2CDISP defined, but output is not 2. Are you sure thats right?"));

  Serial.println(F("Initializing I2C-Display"));
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print(F("F3X COG scale,"));
  lcd.setCursor(0, 1);
  lcd.print(F("at your service!"));
#endif


  LoadCell_1.begin();
  LoadCell_2.begin();
  byte loadcell_1_rdy = 0;
  byte loadcell_2_rdy = 0;
  while ((loadcell_1_rdy + loadcell_2_rdy) < 2) { //run startup, stabilisation and tare, both modules simultaneously
    if (!loadcell_1_rdy) loadcell_1_rdy = LoadCell_1.startMultiple(stabilisingtime);
    if (!loadcell_2_rdy) loadcell_2_rdy = LoadCell_2.startMultiple(stabilisingtime);
  }
  LoadCell_1.setCalFactor(ldcell_1_calfactor); // set calibration factor
  LoadCell_2.setCalFactor(ldcell_2_calfactor); // set calibration factor

  pinMode(ledPin, OUTPUT); //led
  digitalWrite(ledPin, HIGH);

  if (output == 1) { //if output to LCD
    Serial.write(254);
    Serial.write(127); // clear lcd
  }
}

int readBattVoltage() { // read battery voltage
  long battvalue = 0;
  battvalue += analogRead(batRefPin);
  battvalue += analogRead(batRefPin);
  battvalue *= 4883L; // analog reading * (5.00V*1000000)/1024 (adjust value if VCC is not 5.0V)
  battvalue /= 640L; // this number comes from the resistor divider value ((R2/(R1+R2))*1000)/noof analogreadings (adjust value if required)
  //Serial.println(battvalue);
  if (battvalue < 7500) { //
    //low bat warning code goes here, not implemented
  }
  return battvalue;
}

void flashLED() {
  if (t2 < millis()) {
    if (ledState) {
      t2 = millis() + 2000;
      ledState = 0;
    }
    else {
      t2 = millis() + 100;
      ledState = 1;
    }
    digitalWrite(ledPin, ledState);
  }
}

void loop() {
  //library function update() should be called at least as often as HX711 sample rate; >10Hz@10SPS, >80Hz@80SPS
  //longer delay in scetch will reduce effective sample rate (be careful with delay() in loop)
  LoadCell_1.update();
  LoadCell_2.update();

  // calculate CG and update serial/LCD
  if (t1 < millis()) {
    t1 = millis() + printInterval;
    float a = LoadCell_1.getData();
    float b = LoadCell_2.getData();
    long weightAvr[3];
    float CGratio;
    long CG;
    weightAvr[0] = a * 100;
    weightAvr[1] = b * 100;
    long weightTot = weightAvr[0] + weightAvr[1];

    if (weightAvr[0] > 500 && weightAvr[1] > 500) {
      long a = weightAvr[1] / 10;
      long b = weightAvr[0] / 10;
      CGratio = (((a * 10000) / (a + b))); 
      CG = ((((WingPegDist) * CGratio) / 1000) - ((WingPegDist * 10) / 2) + CGoffset);
    }
    else {
      CG = 0;
    }
    // if output = 0: print result to serial terminal:
    if (output == 0) {
      for (byte a = 0; a < 2; a++) {
        Serial.print(F("weight_LdCell_"));
        Serial.print(a + 1);
        Serial.print(F(": "));
        long i = weightAvr[a];
        if (i < 0) {
          Serial.print('-');
          i = ~weightAvr[a];
        }
        Serial.print(i / 100);
        Serial.print('.');
        if ((i % 100) < 10) {
          Serial.print(F("0"));
        }
        Serial.print(i % 100);
        Serial.print(F("      "));
      }
      Serial.print(F("CG:"));
      Serial.print(CG / 100);
      Serial.print('.');
      Serial.println(CG % 100);
    } else if (output == 1) { //if output = 1: print to serial LCD
      toLCD[0] = 254;
      toLCD[1] = 192;
      toLCD[2] = 'W';
      toLCD[3] = 't';
      toLCD[4] = ':';
      if (weightTot < 0 && weightTot >= - 100) {
        weightTot = 0;
      }
      if (weightTot < -100) {
        toLCD[5] = 'E';
        toLCD[6] = 'r';
        toLCD[7] = 'r';
        toLCD[8] = '.';
      }
      else {
        toLCD[5] = (char)(weightTot / 100000) + 48;
        toLCD[6] = (char)((weightTot % 100000) / 10000) + 48;
        toLCD[7] = (char)((weightTot % 10000) / 1000) + 48;
        toLCD[8] = (char)((weightTot % 1000) / 100) + 48;
      }
      toLCD[9] = ' ';
      if (CG != 0) {
        toLCD[10] = 'C';
        toLCD[11] = 'G';
        toLCD[12] = ':';
        toLCD[13] = (char)(CG / 10000) + 48;
        toLCD[14] = (char)((CG % 10000) / 1000) + 48;
        toLCD[15] = (char)((CG % 1000) / 100) + 48;
        toLCD[16] = '.';
        toLCD[17] = (char)((CG % 100) / 10) + 48;
      }
      else {
        for (byte s = 10; s < 18; s++) {
          toLCD[s] = ' ';
        }
      }
      toLCD[18] = ';';
      for (byte i = 0; i < sizeof(toLCD) - 1; i++) {
        Serial.write(toLCD[i]);
      }
    } else if (output == 2) { //if output = 2: print to I2C LCD
      #ifdef I2CDISP
      lcd.clear();
      // 1st Line: Weight
      lcd.setCursor(0, 0);
      if (weightTot < 0 && weightTot >= - 100)
        weightTot = 0;
      if (weightTot < -100)
        lcd.print("Wt: Error!");
      else {
        sprintf(toLCD, "Wt: %ug", weightTot/100);
        lcd.print(toLCD);
      }
      // 2nd Line: CG
      lcd.setCursor(0, 1);
      if (CG == 0)
        lcd.print("CG: Error!");
      else {
        sprintf(toLCD, "CG: %ld.%ldmm", CG/100, CG%100);
        lcd.print(toLCD);
      }
      #endif
    }
    readBattVoltage();
  }
  flashLED();
}

Bouwen in hout kan natuurlijk prima.

Dat is nu net dat ik niet weet waar in de sketch ik dat moet aanpassen, ik weet dat het adres 0x27 is

De sketch die ik nu gebruik is een door iemand anders aangepaste sketch en deze werkt bijna 100% naar mijn zin;

Grts

Hier

0x3F is het adres.

OK ik probeer straks nog wat

thanks

Verzonden vanuit Mail voor Windows

aan de poti.meter heb ik reeds gedraaid , nadat ik de I2c scanner gebruikt had zag ik dat mijn adr. 0x27 is, ik heb vervolgens uw sketch gckopieerd en het I2c adres van U gewijzigd naar 0x27 en zie daar het werkt nu.

Iedereen bedankt voor de hulp, ik weer effe verder,

Hoi, de sketch van u werkt, toch nog even een vraag, bebruikt u ook een 9volt batterij, en is in de sketch voorzien dat ik het voltage kan aflezen, want dat heb ik dus nog niet, kan u mijn uw aansluitschema bezorgen,
alvast bedankt

Je praat tegen de verkeerde persoon :slight_smile: Ik vermoed dat je de vraag aan @hmeijdam wilde stellen.

Wat voor 9V batterij? Als het een PP3 is zul je wat anders moeten verzinnen want die kunnen slechts voor een zeer korte tijd genoeg stroom leveren.

hoi, ik heb alles werkende maar ik kan het voltage niet aflezen van de batterij? moet ik daarvoor in de sketch nog iets activeren?
kan u mij uw aansluitschema even doorsturen indien mogelijk
kan u iemand die de kunstof delen kan 3D printen ik heb wel 2x 5kg loadcellen en zou dan ook grote beugels moeten hebben,

grts

sorry sorry

Maak je geen zorgen.

Ik sluit de 9 volt batterij aan op de "raw" ingang van de Arduino (pro mini in mijn geval). Voltage indicatie gebruik ik niet. Ik zet het apparaat aan als ik een model wil wegen en daarna zet ik het weer uit. Voltage indicatie heb ik niet nodig. Zodra hij niet meer werkt, stop ik er een nieuw batterijtje in, maar dat is na 5 jaar nog niet het geval.
Het is nou niet dat je hem dagalijks gebruikt.

Ik zou hem in jouw geval lekker van hout maken. Dan ben je een pak sneller klaar dan wanneer je het 3D geprint wil hebben.