Probleem LCD I2C library met lcdbargraph

LCM1602 IIC A0 A1 A2

Goedendag,

Ik heb een scherm gekocht met achterop bovenstaand I2c print achterop, ik kreeg er met de standaard lcd I2c library geen leven in en na enig zoeken vond ik een library van F Malpartida, perfect het werkte. arduino-info - LCD-Blue-I2C

Alleen wil ik nu een bargraph weergeven op mijn scherm en na heel veel uren worstelen heb ik nog steeds geen resultaat.

Dit is exact wat ik wil laten draaien. Deze meneer heeft LcdBarGraph draaien op een I2C scherm. Ben dagen bezig geweest maar krijg het niet voor elkaar.

Nu ben ik met de concurent van LcdBarGraph aan het stoeien geweest LcdBarCenterZero die wel een I2C library heeft maar ik loop weer helemaal vast. Blijkbaar heeft mijn LcdI2C library net even andere commando's als de standaard en dat gaat boven mijn pet.

Beide bargraph's hebben lcd commando's die blijkbaar anders zijn.
Zit er al over te denken om gewoon maar een ander scherm aan te schaffen.
Als iemand me een setje in de goede richting kan geven.......

groeten sababennie

Tja het is niet erg als je hulp vraagt, maar dan moet je wel meer info geven zoals de code die je gebruikt, de libraries, eventuele boodschappen in de IDE etc. De libraries op de Arduino zijn gewoon c++ bestnades die je gewoon kan bekijken. Dus dat hele andere commando's verhaal gaat er bij mij nog ff niet in.
Eerst laten zien wat je gedaan hebt en dan kan er een ander naar kijken. Nu is het een beetje gokken en dat doe je op een andere plek :slight_smile:

alvast bedankt voor de reactie,hier komt wat knip en plak werk.

//
C:\Program Files (x86)\Arduino\libraries\LcdBarCentreZero_I2C\LcdBarCentreZero_I2C.cpp: In member function 'void LcdBarCentreZero_I2C::drawBar(int, byte, byte, byte)':
C:\Program Files (x86)\Arduino\libraries\LcdBarCentreZero_I2C\LcdBarCentreZero_I2C.cpp:179: error: call of overloaded 'write(int)' is ambiguous
C:\Program Files (x86)\Arduino\libraries\liquidcristal/LCD.h:505: note: candidates are: virtual size_t LCD::write(uint8_t)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:49: note: size_t Print::write(const char*)

//

Dit zijn de fout codes bij het compilen, als ik de bovenste regel opzoek in de library kom ik terecht bij;

//

void LcdBarCentreZero_I2C::drawBar( int value, byte maxbars, byte centre, byte line ) {

byte _neg;
byte _colsToBlank;

// clear entire display area of any previous bars
_colsToBlank = ( ( maxbars+1 )/3 ) * 2 + 1;
_lcdi2c->setCursor( centre - _colsToBlank/2, line );
_lcdi2c->leftToRight( );
for( byte i=0; i<_colsToBlank; i++ ) _lcdi2c->write( ' ' );

_lcdi2c->setCursor( centre, line );
if( value < 0 ) {
_lcdi2c->rightToLeft( );
_neg = 1;
value = -value;
} else {
_lcdi2c->leftToRight( );
_neg = 0;
}
if( value > (int)maxbars ) value = (int)maxbars;
if( value == 0 ) {
_lcdi2c->write( 1 ); // only put centre marker
}
if( value > 0 ) {
if( _neg ) {
_lcdi2c->write( 3 );
} else { //centre plus one bar
_lcdi2c->write( 2 );
}
value -= 1;
} // if value > 0

byte _num3bar = value/3; // number of 3 bar characters
for( byte i=0; i < _num3bar; i++ ) {
_lcdi2c->write( 0 );
}
if( value - _num3bar * 3 == 1 ) {
if( _neg ) {
_lcdi2c->write( 5 );
} else {
_lcdi2c->write( 4 );
}
} // if leftover number = 1
if( value - _num3bar * 3 == 2 ) {
if( _neg ) {
_lcdi2c->write( 7 );
} else {
_lcdi2c->write( 6 );
}
} // if leftover number = 2

} // drawBar

//

Ik vat dit op als dat de compiler zegt dat er in die void van de lybrarie onzin staat.

Heb alle lybraries uitgeprint en naast elkaar gelegd om de verschillen te zoeken maar op een gegeven moment verzuip ik erin.

Ik heb een shield van het open energie platform om 3 fasen krachtstroom te meten werkend, de heer op het youtube filmpje heeft hier een kleine aanpassing op gemaakt zodat het ook op een lcd scherm te bewonderen is. Hij gebruikt hiervoor een I2C scherm tezamen met lcdbargraph, omdat ik na dagen stoeien dit niet aan de gang kreeg heb ik nu het geprobeerd met LcdCentreBarZero_I2C met vergelijkbaar resultaat en foutcodes. Als je de lybraries doorleest van beide bargraphs zie je dat ze op een paar details na nagenoeg hetzelfde zijn.

Ik hoop dat het zo iets duidelijker is,

Vr Gr Sababennie

Jouw conclusies zijn onjuist. Maar ik heb wel jouw programma ook hier nodig om te kijken hoe jij eea aanroept. En zet deze graag tussen de code tags. Dat leest beter.

Dit is het bargraph programma, ik stuur in volgend bericht het liquid cristal library.

four_barsI2C.pde (1.88 KB)

LcdBarCentreZero_I2C.cpp (4.11 KB)

LcdBarCentreZero_I2C.h (1.6 KB)

Even in twee keer, ging een paar keer mis.

Grote klasse dat u er naar wil kijken, heb er al heel wat uurtjes inzitten.

Gebruik het voorbeeld programma van LcdBarCentreZero als dat een keer werkt kan ik het in werkelijke sketch verweven.

Alvast bedankt

LiquidCrystal_I2C.cpp (7.89 KB)

LiquidCrystal_I2C.h (8.04 KB)

LCD.cpp (9.51 KB)

LCD.h (17.5 KB)

Geef de links ff waar je die libraries van hebt.... Ik mis eea....

Hey jongens, even iets trager graag... :slight_smile:

Is dit een opstelling waarbij je alle gegevens van een "elektriciteitsleiding" kan controleren?
Op een driefasig netwerk van een huisinstallatie bijvoorbeeld?

Waar je dan allerhande berekeningen kan mee maken? (the limit is de sky, en omgekeerd)
Je kan zien of de belasting van je verbruikers evenredig gespreid is?
Etc?

Dan zou ik het erg appreciëren indien daarvoor enige voorbeelden, linken of iets dergelijks kan worden getoond.
Ik ben namelijk per direct verkocht....

Alvast bedankt Ivan

Ivan
Het lijkt er nu op dat hij allerlei zaken door elkaar gegooid heeft. Dus dat moet eerst uitgezocht worden. Vwb. het meten van stromen maak je gewoon gebruik van de ACS712 (tot 30A). dat zijn hall sensoren waardoor je geïsoleerd de stromen kan meten. Ik werk zelf met de ACS758-100 (tot 100A). Die dingen geven gewoon een spanning af in mV/A. Dus het enige wat je hoeft te doen is die dingen meten en dan naar een display sturen. Bij deze PCB's meet ik tot 50A DC (en regel ik het trouwens ook :)).
Op de kleine print zit de ACS758. Die sampled constant de stroom door de schakeling.
![](http://www.verelec.com/tijdelijk/images/HHO installation.jpg)

Een hele summiere beschrijving zou zijn:

Dergelijke sensors aan een (analoge) input schakelen, en uitlezen.
Om dan in detail de datasheet te bestuderen, en daaruit het correct programma te schrijven.

Zoiets?

Dan maken we (of bestaat er zoiets als) een draad daarover? meer uitleg en dergelijke.

Zo eenvoudig is het. En of je daar een draad erover wilt maken. Er zal er vast wel ergens eentje zijn :grin:

Persoonlijk kan ik slechts SCT-013-000

Data Sheet
Dit wegens plaats gebrek.

Hoe dan ook, ik kijk verder uit.

Alvast bedankt.

Voor de geintereseerden hier heb ik mijn shield gekocht die officieel alleen voor de Uno geschikt is. Zit ook een forum bij beschrijvingen etc en alles is open platform.

Nog een "kleine" kantekening bij de bestanden die ik bijgevoegd had. De sketch met een voorbeeld van LcdBarCentreZero is de originele sketch. Ik heb hier mijn settings ingezet anders krijg ik helemaal geen beeld natuurlijk

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LcdBarCentreZero_I2C.h>

#define MAXBARS 9 //if this is bigger on 16 col display, see
// interference between adjacent bargraphs

//LiquidCrystal lcd( 12, 11, 5, 4, 3, 2 ); // create LCD instance
LiquidCrystal_I2C lcd( 0x38, 16, 2 ); // create IC2 LCD instance
LcdBarCentreZero_I2C zcb( &lcd ); // create bar graph instance

Ik vervang de LiquidCristal lcd voor de voor mijn scherm werkende,

/-----( Declare objects )-----/
// set the LCD address to 0x27 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

Dit komt uit bijgevoegd bestand werkte perfect op mijn scherm.

Groeten Sababennie

voorbeeld_ic2_lcd.ino (2.49 KB)

Begrijp ik dat als je het 2e stukje neemt dan werkt het wel?

Nee helaas,

Ik kreeg mijn scherm met de "standaard"library niet aan de praat en na flink googelen vond ik via het engelstalig gedeelte van deze site dat ik niet de enigste was en dat bijgevoegd library en voorbeeld de oplossing was en inderdaad mijn scherm kwam tot leven.
echter als ik dan een bestaande sketch wil aanpassen aan mijn scherm loopt het spaak.

Ik begrijp dat het een beetje warrig overkomt, met mijn beperkte kennis probeer ik van alles om het geheel tot leven te krijgen.
Tot nu toe vaak gelukt maar deze keer niet.

Groeten Sababennie

Ik zou eerst eens een stap terug doen:
a) opnieuw de I2C library downloaden. In de .h van de library staan alle functies die deze class ondersteund.
b) gewoon eerst een hello world voorbeeld aan de praat krijgen
c) pas dan kijken of je de bar sketch erin kan verwerken.

Bedankt voor de suggesties maar natuurlijk werkt mijn scherm goed, zowel met de hello world(die bij dit scherm hoort) alswel met eigengemaakte sketches.
Het is alleen ik een sketch heb waar al I2C in is verwerkt krijg ik die conflicten volgens mij omdat waarschijnlijk kleine verwijzingen of commando's net even anders zijn .

Volgens de in het eerste bericht genoemde website zijn er drie schermen in omloop,
NOTE! THERE ARE THREE (or More??) VERSIONS OF THE 2 and 4 LINE DISPLAYS. Check the small "backpack" interface board on the back.

LCD Version 1 - Marked "YwRobot Arduino LCM1602 IIC V1"
LCD Version 2 - Marked "Arduino-IIC-LCD GY-LCD-V1"
LCD Version 3 - Marked "LCM1602 IIC A0 A1 A2"

Ik heb nu de laatste en ik denk dat ik gewoon de eerste eens ga proberen(aanschaffen ) met een andere library .Als ik de youtube video bekijk gebruikt de heer van de 3fase meting ook de eerste.
Daar gaat alleen even een tijd overheen vanwege werk in het buitenland.

vr gr sababennie

Dit kun je zelf (en ij alleen, niet wij) uitvinden.
Je hebt een werkend display/sketch combinatie.
Ergens in die sketch staat beschreven hoe de I2C chip met de parallelle interface van de display is verbonden.
Want dat is waarin deze modules van elkaar verschillen.
Dus zoek op in jouw sketch die werkt waar die beschrijving staat (of zet die sketch nog eens in een aparte bijlage).
Dan ga je in de sketch die je werkend wil krijgen op zoek naar dezelfde regel, maar waar andere getallen of in ieder geval in een andere volgorde genoemd worden.
Die regel voorzie je dan van //commentaar, en op de volgende regel zet je een kopie van de regel uit de werkende sketch.
Daarna zou dit moeten werken.
Als dat niet zo is, haal je de nieuwe regel en het //commentaar weer weg en kun je verder speuren.

Ik zie net dat je dat al gedaan had.
Enige dat ik me dan kan voorstellen is dat je een I2C conflict hebt, waarbij het eerste is dat je naar het adres moet kijken.
Is er een ander I2C onderdeel dat ook aanspraak maakt op 0x27 ?
De meeste (maar niet alle) modules laten het toe dat je het adres aanpast middels (soldeer) jumpers.

Kan het zijn dat je hier de sketch vandaan haalde?
Klik

Wat ik begrijp is dat als hij die standaard lib gebruikt werkt het gewoon. Dus de I2C werkt. Je kan ook overwegen om eens wat energie te steken in die bars library om te kijken hoe dat werkt. Zo ingewikkeld zag het er toen niet uit toen ik er ff naar keek. Zo maar in elkaar schuiven is in ieder geval de goden verzoeken maar ik denk niet dat het aan I2C problemen zelf ligt daar je nu nog compiler fouten hebt. En zolang die niet opgelost zijn krijg je niet eens een sketch geladen in de Arduino.