[RESOLVIDO] Lendo 256 Valores de Tensão Diferentes Através da Entrada Analógica do Arduino + Potênciometro Digital Microchip

Srs. Boa noite.

Estou quebrando a cabeça aqui.. preciso ler 256 valores de tensão diferentes através da entrada analógica do arduino.

Depois dessa leitura, preciso fazer uma comparação e tomar uma determinada ação.

Exemplo: Estou usando um potenciômetro digital. E através da entrada de tensão na entrada analógica, preciso disparar uma determinada informação para o Potenciômetro digital.

Não consigo pensar de nenhuma outra forma que não envolva 256 If's diferentes.. fazendo a comparação do valor de entrada, e setando uma informação.

Alguém poderia dar uma luz?

Agradeço desde já..

Exibições: 1273

Responder esta

Respostas a este tópico

Você pode criar um  array de 256 posições para guardar as leituras e, dentro de um loop, fazer apenas um if

int leitura[256]

Se você der mais detalhes sobre as ações que você quer tomar, é possível criar um segundo array e simplificar ainda mais o código

Não sei entendi, mas é possível construir um array dessa forma:

int leitura[] = {0,205,x,y,x,....1023};

e depois no loop do arduino:

 analogWrite(pino1,leitura[analogRead(pino2)])

Não sei se vai usar pwm com digitalWrite...

Mas se os valores crescem linearmente, então não precisa de array. É possível calcular os valores.

a função map faz isso 

https://www.arduino.cc/en/Reference/Map

Usando a função map sugerida pelo Flavio, não precisaria do array.

Seria assim:

int val = analogRead(pin1);
val = map(val, 1, 5, 205, 1023);
analogWrite(pin2, val);

Correto Flavio?

Mas os valores precisam crescer linearmente para dar certo.

Rafael, quais são os outros valores do array?

Já sabemos que 1 será mapeado para 205 e 5 para 1023.

Informe pelo menos os 10 primeiros valores para sabermos se a função vai funcionar corretamente, pois se tiverem valores repetidos, o map não dará certo.

Neste caso, acho que não dá pra usar a função map, pois a origem e o destino variam de forma diferente. Não dá pra calcular também, pois a variação não é linear. Mas não custa tentar

Só vejo a solução dos vetores mesmo. Talvez, você não precise do segundo vetor, pois ele decresce de forma homogênea e pode ser calculado.

int origem[]={205,208,211,214,...}

int destino = 0;

Depois no código:

destino = (255 - indice_do_vetor_origem);

Quando puder, post aqui parte do seu código para podermos te ajudar melhor.

Fiquei pensando, não daria para fazer um circuito analógico, talvez com saída mosfet e aplicar na entrada dessa controladora?

Oi RPB, boma dia.

Qual é a origem da voltagem que chega no pino analógico.

Ela não tem um crescimento linear?

O circuito ADC do arduino é linear, e se configurado para ir de 0 a 5V, cada incremento de 1 bit equivale à 

4,88mV.

Rui

Olá Rafael, Se está funcionando, beleza.

O única melhoria que faria seria excluir o vetor myBits, pois ele não é necessário. Economizaria digitação e memória.

A variável val poderia ser calculada como abaixo:

if ( (analog_sensor >= myBitspot[i]) && (analog_sensor <= myBitspot[i+1]) )    
    {
      val = 255 - i;
    }

Quanto à precisão, talvez pudesse ser melhorada, se você colocar um pequeno delay entre cada leitura, ou fazer uma função que efetue várias leituras para cada valor de i e calcule a média das leituras.

Abraço

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço