Conflito teclado matrix com Ethernet

Olá, Estou fazendo um projeto e estou usando os seguintes componentes: 1- Arduino UNO R3 1- Teclado Membrana 4x5 1- LCD 20x4 conectado via I2C 1- Ethernet shield.

O problema é o seguinte: Quando eu inicializo o "Ethernet" através do comando "Ethernet.begin(mac, ip);" o teclado para de funcionar, mas somente na coluna 0 do teclado. Já alterei os endereços das portas do teclado, entretanto, independente da porta que uso o teclado, o conflito continua. Quando eu não inicializo o Ethernet, o teclado funciona normalmente.

Qual é o teclado que está a usar? É um teclado matricial ou tem algum interface série (por exemplo I2C)? Como estão ligados os vários shields ao Arduino?

Oi, é um teclado matricial.
O teclado é conectado nos pinos 2,3,4,5,6,7,8,9,10.
Quando eu inicialiso a Ethernet a “Coluna 0” do teclado para de funcionar, independente de em que pino ela esteja conectado. Já testei em todos os pinos do arduino, a a falha é a mesma.
Parece conflito entre as libraries <Keypad.h> e <Ethernet.h>.
Quando eu não inicialiso a Ethernet o teclado funciona, e no momento em que eu inicialiso, ele para de funcionar a coluna “Zero”.

O Ethernet Shield usa pelo menos o pino 4 (desse conjunto que aí tem) para comunicar com o Arduino. Tente trocar esse pino (se tiver espaço) e tente de novo.

Ele é o modelo Escudo, cobre todo o Arduino.

Penso que expliquei mal. Estava a falar de trocar, no teclado, o pino 4 (já que também está a ser usado pelo Ethernet Shield). Ou é o teclado que é um Shield?

Oi Luisilva, obrigado pelas suas dicas;

O escudo é a Ethernet, o teclado é membrana.

Veja o link: Ethenet: https://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=96 Teclado: http://pt-br.tinypic.com/view.php?pic=2rxv3u8&s=8#!

Mesmo não estando a Ethernet conectada no Arduino, quando eu inicialiso com o camando Ethernet.begin(mac, ip) a coluna "0" do teclado para de funcionar. Isso acontesse mesmo trocando os pinos de posição. Já testei vem varias posição, inclusive não usando os pinos 4,10

O que diz a página do Ethernet Shield é o seguinte:

O Arduino se comunida com o W5100 e o cartão micro-SD usando o bus SPI (através do ICSP). Isto significa os pinos digitais 11, 12 e 13 no UNO e pinos 50, 51 e 52 no MEGA. Nas três placas, o pino 10 é usado para selecionar o W5100 e o pino 4 para o cartão micro-SD. Portanto, estes pinos não podem ser usados como entradas/saídas gerais. No MEGA, o GND do Hardware no pino 53 não é usado para escolher entre o W5100 ou o micro-SD, mas é necessário manter como saída ou a interface SPI não vai funcionar.

Portanto, não podem ser usadas as entradas 11, 12 13 e 10. Se para além disso usar o cartão SD do shield, também não pode usar a entrada 4. Se o teclado só não funciona quando o módulo ethernet está "activado", isso significa que de alguma forma ele é a origem do problema, não é? Portanto a minha sugestão continua a ser a mesma. Deve fazer um teste sem usar estas entrada e tirar daí conclusões.

Então terei que mudar de Arduino, pois uso o Uno, e tem poucas entradas. O teclado usa 9 e eu não posso usar 5 do Arduino.

Vou comprar um Mega e testar. Se funcionar dou retorno.

Obrigado pela ajuda

CarlosC: Então terei que mudar de Arduino, pois uso o Uno, e tem poucas entradas. O teclado usa 9 e eu não posso usar 5 do Arduino.

Vou comprar um Mega e testar. Se funcionar dou retorno.

Obrigado pela ajuda

Não necessariamente. O UNO tem 13+5 entradas/saídas. 4 delas vão ser usadas para a ligação com o Ethernet Shield, 2 vão ser usadas para a ligação com o LCD, são necessárias 9 para o teclado. Isso dá um total de 15, portanto ainda sobram 3.

luisilva;

Funcionou. Usei as portas analógicas para as colunas e as digitais para as linhas, assim funcionou. Só notei que fica um pouco mais lento para inicializar o Arduino.

Valeu pela dica.

CarlosC:
(…)
Funcionou.
Usei as portas analógicas para as colunas e as digitais para as linhas, assim funcionou.
(…)

O problema tinha que ser esse.

CarlosC:
Só notei que fica um pouco mais lento para inicializar o Arduino.

Não há nada que nesta forma possa estar a fazer o sistema ser mais lento.

Também encontrei esse problema, resolvi passando pinos analógicos para digitais.

segue exemplo.

#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Ethernet.h>
#include <Wire.h>

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

byte pinosLinhas = {8,7,6,5};
byte pinosColunas = {14,15,16,17};

char teclas[4][4] =
{
{‘1’,‘2’,‘3’,‘A’},
{‘4’,‘5’,‘6’,‘B’},
{‘7’,‘8’,‘9’,‘C’},
{’*’,‘0’,’#’,‘D’},
};

Keypad teclado1 = Keypad(makeKeymap(teclas),pinosLinhas,pinosColunas,4,4);

void setup()
{
pinMode(14,OUTPUT);
pinMode(15,OUTPUT);
pinMode(16,OUTPUT);
pinMode(17,OUTPUT);
lcd.begin (16,2);
lcd.setBacklight(HIGH);

}

void loop()