Aruduino R3 / Lcd I2C

Olá a todos, sou novo por estas bandas e no que respeita a arduinos. No entanto estou a experimentar arduino com um LCD com ligação I2C 16/2.

Fiz as ligações como é motrado em vários sitios,5 V, GND, SDA(4) e SCL ao 5.

Não consigo enviar qualquer texto para o lcd, será que alguém me pode ajudar a entender o que se passa?

O meu código :

//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

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

void setup()
{
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(3,0);
lcd.print(“Hello, world!”);
lcd.setCursor(2,1);
lcd.print(“Ywrobot Arduino!”);
lcd.setCursor(0,2);
lcd.print(“Arduino LCM IIC 2004”);
lcd.setCursor(2,3);
lcd.print(“Power By Ec-yuan!”);
}

void loop()
{
}

O contraste está ajustado correctamente? O que significa "Não consigo enviar qualquer texto para o lcd"? O LCD é inicializado ou continua com uma linha preenchida e uma linha em branco? O endereço do seu LCD é o 0x27 (conforme aparece no código)?

O contraste ajustei pelo menos penso que esta bem, vejo 16 quadrados.

O Lce é já com o módulo icc incorporado:

I2C Address: 0x27 (I2C Address: 0X20~0X27 (the original address is 0X27,you can change it yourself)

Por exemplo, é um igual

http://www.electrofun.pt/arduino-eletronica/73-interface-display-lcd-1602-para-comunicacao-i2c-iic.html

Agora também poderá ser das bibliotecas, eu ando a experimentar umas e outras mas nada. Onde poderei usar uma que me de mais certezas?

Nunca usei esse dispositivo (e consequentemente essa biblioteca), no entanto, costumo ver essa biblioteca no exemplos que aparecem espalhados pela net. Qual é o Arduino que está a usar? É o UNO?

Sim, arduino uno R3.

Experimente esta linha de código em substituição à sua.

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Em relação ao problema em questão tenho mais 2 perguntas:

  1. Porque é que repete a inicialização do LCD? (se houver algum problema, não é repetir essa inicialização que o vai resolver)
  2. Qual é a biblioteca que está a usar (de onde descarregou a biblioteca)?

silvaa:
Fiz as ligações como é motrado em vários sitios,5 V, GND, SDA(4) e SCL ao 5.

Importas-te de clarificar se ligaste aos pinos D4 e D5 ou aos pinos A4 e A5???

As ligações I2C são feitas nos pinos A4 e A5. Isso pode ser um dos teus problemas.

As ligações do módulo para o LCD estão correctas?

Olá a todos, sim o programa até poderia ser só :

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

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

void setup()
{
// initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(3,0);
lcd.print(“Hello, world!”);
}

void loop()
{
}

Uma vez que apenas quero apenas uma mensagem.

A biblioteca tirei em :

https://tkkrlab.nl/wiki/Arduino_LCD_1602_11C

Quanto ás ligações o i2c tem 4 ligações:

gnd,vcc,sda e scl.

O sda está ligado ao a4 e o scl ao a5 das analogicas in no arduino, claro mais o gnd e vcc respetivos, penso que não tem muito que errar, mas sou novo nestas andanças e nunca se sabe.

Quanto á linha do Jose Claudio:

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Dá como mensagem :

POSITIVE, não foi declarado.

Deverá ser preciso declarar, mas nao sei o porque tambem do positive.

Boas Segue

abaixo um código tirado da net que funciona no meu arduino com o LCD I2C

/*
** NOTE: Tested on Arduino Uno whose I2C pins are A4==SDA, A5==SCL
*/
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x27 // <<----- Add your address here.  Find it from I2C Scanner
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

int x = 0;
int y = 0;
//int n = 1;
int row = 16; //  <<----- My LCD was 16x2
int column = 2; //  <<----- My LCD was 16x2

LiquidCrystal_I2C   lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
  lcd.begin (row,column);
// Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home ();                   // go home
}

void loop()
{
  if(x >= row ){ //move a character across all spaces
    x = 0;
    y++;
  }
  if(y >= column ) y = 0;
  lcd.clear();
  lcd.setCursor (x,y);
  lcd.print("Atencao");
  delay(250);
  x++;
}

Outra questão. O backlight do LCD acende? Para mim, não há grandes dúvidas que o problema está nas ligações, no entanto não sei em quais. Se o backlight acender o problema é devido às ligações entre o módulo I2C e o próprio LCD. Se não, o problema está nas ligações I2C. Pode ser uma soldadura mal feita, pode ser um fio que não está em encaixado, etc. Há uma pequena hipótese que o endereço I2C não seja o que realmente aquele que está a pensar. Tem um integrado na placa do módulo I2C. Qual é a referencia que lá existe? O que está ligado nos componentes A0, A1 e A2?

A linha que o joseclaudiogon forneceu não funciona porque é para outra biblioteca.

@flybull: qual é a biblioteca que está usar? É a mesma que a do OP? Eu penso que não. Sendo assim, não acha que deveria fornecer um link para essa biblioteca?

Então:

O código fornecido pelo flyBull foi muito bom.

Á primeira não deu. Como já tinha verificado o endereço nas indicações do fornecedor e estava confiante que era o 0x27.

Pesquisei e fiquei na dúvida, e se não for. Bem fiz o find adress :

#include <Wire.h>

void setup()
{
Wire.begin();

Serial.begin(9600);
Serial.println("\nI2C Scanner");

}

void loop()
{
byte error, address;

int nDevices;

Serial.println(“Scanning…”);

nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();

if (error == 0)
{
Serial.print(“I2C device found at address 0x”);
if (address<16)
Serial.print(“0”);
Serial.print(address,HEX);
Serial.println(" !");

nDevices++;
}

else if (error==4)

{
Serial.print(“Unknow error at address 0x”);
if (address<16)
Serial.print(“0”);
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println(“No I2C devices found\n”);
else
Serial.println(“done\n”);

delay(1000);
}

Abri o monitor e vi que era 0x3F.

Alterei o adress do codigo do flyBull para 0x3F e já funcionou.

Bem, foi óptimo a colaboração de todos. Consegui.

Obrigado a todos.

Ok

Gosto em ajudar

Já agora, só por curiosidade, o programa inicial com o endereço 0x3F também funcionaria, certo? Também não compreendo como é que o código funcionou se é para uma biblioteca diferente da que estava a usar.

Aqui és capaz de encontrar o que precisas.