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á..
Tags:
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por