LCD 16x4 , Type 1604A

Ik heb een simple sketch gemaakt en kom tot de ontdekking dat deze vreemd doet in row 3 en 4 ,
In Row 1 en 2 gaat alles nog goed namelijk !!
Ik moet nu de waarden negatief gaan maken wanneer ik de text in Row 3 en 4 gelijk met row 1 en 2 wil krijgen ,
Ik heb op twee manieren gekeken of het probleem lag aan de I2C , maar dat is niet zo ....
Heb dus een Test gedaan met een LCD I2C en een Test met de liquid crystal setup ( 6 draden )

Enig advies wat er mis gaat ?

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

LiquidCrystal_I2C lcd(0x27,16,3);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello, world!");
  lcd.setCursor(-4,3);
  lcd.print("Hello, world!");
  lcd.blink();
    lcd.setCursor(-4,2);
  lcd.print("Hello, world!");
  lcd.blink();
    lcd.setCursor(-4,1);
  lcd.print("Hello, world!");
  lcd.blink();
}

void loop()
{
}

Met oplossing:

http://arduinoforum.nl/viewtopic.php?f=6&t=1499&p=10285&hilit=16x4#p10285

Hi Nico,

Hartelijk bedankt voor de link ,
Ik zie dat je de Lib hiervoor hebt aangepast , dit is voor mij nog te hoog gegrepen .... :o

Maar fijn dat het voor mij nu zo is opgelost ... ga weer verder met experimenteren ....

Thanks

Patrick

Hi Nico,

ik heb nog eens zitten experimenteren maar krijg een foutmelding ?

het valt mij op dat hij de LiquidCrystal _16x4 niet herkent in de Library ?
LiguidCrystal wordt namelijk niet oranje bij mij ..... ??
En krijg hierdoor dus een foutmelding ....

bijgaand het testprogramma
cpp code

// include the library code:
#include "Arduino.h"
#include <LiquidCrystal_16x4.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 4);
// Print a message to the LCD.
lcd.setCursor(0,0);
lcd.print("Regel 1");
lcd.setCursor(0,1);
lcd.print("Regel 2");
lcd.setCursor(0,2);
lcd.print("Regel 3");
lcd.setCursor(0,3);
lcd.print("Regel 4");
}

void loop() {

}

En waar heb je die library dan gestopt? Want in de link staan 2 files toegevoegd die je in een library of zo moet zetten. Waar heb je die dan neergezet?

Of je past die libary liquidCrystal.cpp zelf ff aan.
Je komt daar een routine tegen als volgt:

void LiquidCrystal::setCursor(uint8_t col, uint8_t row)
{
  const size_t max_lines = sizeof(_row_offsets) / sizeof(*_row_offsets);
  if ( row >= max_lines ) {
    row = max_lines - 1;    // we count rows starting w/0
  }
  if ( row >= _numlines ) {
    row = _numlines - 1;    // we count rows starting w/0
  }
   
  command(LCD_SETDDRAMADDR | (col + _row_offsets[row]));
}

Die vervang je door

void LiquidCrystal::setCursor(uint8_t col, uint8_t row)
{
  uint8_t row_offsets[4];
 
  row_offsets[0]=0x00;
  row_offsets[1]=0x40;
  row_offsets[2]=row_offsets[0]+_numColumns;
  row_offsets[3]=row_offsets[1]+_numColumns;
 
  if ( row > _numlines ) {
    row = _numlines-1;    // we count rows starting w/0
  }
 
  command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}

En dan kun je weer gewoon liquidCrystal.h gebruiken,.

Hi Nico,

In de Folder :

C:\ELECTRONICS\Arduino_1.06\LIBRARIES ..... net als alle andere libraries .....

En daar zit dus de fout in.

Libraries die je download moet je plaatsen in een map (met de library naam) in de folder libraries in je sketchbook (waar je sketches dus staan, standaar \documents\Arduino). De folder lararies in de IDE is alleen voor de libraries die komen met de IDE.

Het oranje worden of niet heeft geen enkele betekenis voor de code. Dat is puur de IDE die sommige keywords een ander kleurtje maakt voor jou. Maar hij maakt gerust ook verkeerde dingen oranje. Enige wat geld is de error berichten tijdens compilen.

Overigens is 1.0.6 ondertussen wel een beetje oud... Ik zou de overstap maken naar een nieuwere. Okay, de laatste versies hebben soms ook wat problemen maar ben zelf tevreden over 1.6.4