Olá,
Tenho andado a brincar com o lcd e então cá vai mais uma dessas brincadeiras
Desta vez estou a tentar fazer algo parecido com um osciloscópio. Ainda tem alguns erros e ainda está em desenvolvimento mas vou postando porque não sei quando voltarei a pegar nisto, tanto pode ser hoje como daqui a um mês
ExplicaçãoPara começar tem que se explicar que o LCD esta dividido em 6 linhas e cada linha tem 48 colunas e os dados são enviados para cada coluna de uma linha.
Nesta imagem podem ver os pixeis do LCD ao pormenor.
Quando convertemos um valor analógico em digital usando 10bits este é convertido num valor de 0 a 1023.
Por isso vamos ter que mapear este valor para o tamanho do lcd. Este processo vai ter que ser divido em vários passos pois não basta mapear o valor de 0 a 1023 num de 0 a 48 (altura do lcd) por que por exemplo para 1023 teríamos 48, mas não nos é permitido dizer ao lcd simplesmente liga o pixel 48 no eixo dos x.
Então vamos começar por mapear o valor lido de 0 a 5, isto é, vamos ver em que linha se encontra o valor lido.
int limiteInf = 0;
int limiteSup = 1023;
pot=analogRead(0);
yValueLine=map(pot,limiteInf,limiteSup,0,5);
Agora já sabemos em que linha se encontra o valor que lemos, já sabemos onde vamos ter que escrever o valor.
Agora vem o segundo passo, pois dentro da linha onde vamos escrever temos uma coluna com 8 bits, temos que saber a que bit esse valor corresponde.
Para este passo temos que saber como é que a função map divide os valores. Neste caso podemos ver que esse valor é 204, fazendo 1022/5 = 204,4 em que o inteiro é 204.
1022/5 porque só se obtém 5 depois do mapeamento quanto tempos o valor 1023 por isso só há uma hipótese para se obter o máximo(enquanto que para outros valores, o valor da saída do mapeamento corresponde a um intervalo de 204 valores).
Então depois de sabermos este valor vamos então calcular o valor a que corresponde a entrada na colunca de 8 bits da linha em cima calculada.
Para isso vamos pegar no valor lido(em baixo o pot) e a este valor vamos subtrair os valores que correspondem a colunas abaixo deste.
Para um valor lido de 500 podemos verificar que corresponde a linha 2, agora vamos tirar a estes 500 os valores da linha 0 e 1, isto é: 204*2 = 408 e ficamos com 500-408= 92.
Este valor, 92, vai ser agora mapeado nos 8 bits da coluna. O valor lido na linha pode ir de 0 a 203.
O código que se segue executa o que acabei de explicar.
yValueLine=map(pot,limiteInf,limiteSup,0,5);
tempTeste = abs(pot-204*(yValueLine));
yValue=map(tempTeste,0,203,1,8
O código todo encontra-se em anexo, aviso que isto está em desenvolvimento e que tem muitos erros e o código não está organizado.VídeoLiguei um gerador de sinais, com frequencia de 1Hz e fui alternando entre onda sinusoidal, triangular, quadrada, assim como aumentar e diminuir a amplitude do sinal.
Tópicos ImportantesArduino + LCD Nokia 3310! - PCD8544 / OM6206