Dúvida - Montagem de termômetro de Led's.

É o seguinte, ontem chegou meu primeiro arduino, comecei a testar, efeitos de leds, para me interar mais com a programação, e montagem do hardware, assim, fui implementando alguns projetos, como o que estou tentando fazer agora, que por enquanto alcancei digamos que um “meio sucesso”, estou fazendo um termômetro de Led’s, na protoboard cooloquei 10 LED’S, a cada 5 graus de temperatura acende um led, ou seja, se 1 LED acende, a temperatura esta entre 0<t e t<=5, 2 leds entre 5 e 10, enfim, so multiplicar o numero de leds ligado por 5 e a temperatura estará entre o valor da multiplicação com um devio padrão de até -5Celsius.

O problema é que, quando, dou verify, tudo ok… upload no arduino, okk… mas quando vou ver o monitor serial, ele so faz uma leitura, e para,ao invés de ficar fazendo varias… uma coisa que notei foi que , com a programação com while ou do while, acontece o que eu falei (ler a temperatura apenas uma vez), com o resultado de temperatura bem preciso por sinal, mas quando uso if ou if else, ele fica lendo a todo instante a temperatura, mas com muita oscilação na temperatura… ou seja um tipo de programação lê bem a temperatura mas so uma vez ate que eu feche e abra o monitor novamente, e o outro tipo (if) se as ‘várias’ ezes a temperatura, mas sem precisão, e com muita oscilação… Queria uma solução para ter várias leituras, e com precisão ou seja, as várias leituras que tenho no if, e a precisão que tenho no do/dowhile… me perdoem meu nivel de programação, sou iniciante, tenho uma programação muito intuitiva ainda, pouco técnica. abraço. Wink

HELP! Shocked
agradeço a ajuda desde já.

byte ledPin={4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int sensetemp = 0;
float S = 0;
float T = 0;
const float CELSIUS_BASE = 0.4887585532746823069403714565;

void setup (){
for (int x=0; x<10 ; x++) {
pinMode(ledPin, OUTPUT);
}
Serial.begin(9600);
Serial.println(“Lendo Temperatura”);
}

void loop(){
S = analogRead(sensetemp);//Lê porta analógica e armazena em S
T = (S * CELSIUS_BASE) ;//Conversão do sinal lido em Temperatura
Serial.print(T);//Imprime o valor de T (temperatura)
Serial.println(" C");//imprime em seguida
delay(500);
if(T <= 0 || T > 40){
for (int x=0; x<10 ; x++) {
digitalWrite(ledPin, LOW);
}
}
while(T > 0 && T<=5) {
funcum();
}

while(T > 5 && T<=10) {
funcdois();
}

while(T > 10 && T<=15) {
functres();
}

while(T > 15 && T<=20) {
funcquatro();
}

while(T > 20 && T<=25) {
funccinco();
}

while(T > 25 && T<=30) {
funcseis();
}

while(T > 30 && T<=35) {
funcsete();
}

while(T > 35 && T<=40){
funcoito();
}

while(T > 40 && T<=45) {
funcnove();
}

while(T > 45 && T<=50) {
funcdez();
}

}

void funcum(){
digitalWrite(ledPin[0], HIGH);
digitalWrite(ledPin[1], LOW);
digitalWrite(ledPin[2], LOW);
digitalWrite(ledPin[3], LOW);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcdois(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], LOW);
digitalWrite(ledPin[3], LOW);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}

void functres(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], LOW);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcquatro(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funccinco(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcseis(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcsete(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], HIGH);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcoito(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], HIGH);
digitalWrite(ledPin[7], HIGH);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcnove(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], HIGH);
digitalWrite(ledPin[7], HIGH);
digitalWrite(ledPin[8], HIGH);
digitalWrite(ledPin[9], LOW);
}
void funcdez(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], HIGH);
digitalWrite(ledPin[7], HIGH);
digitalWrite(ledPin[8], HIGH);
digitalWrite(ledPin[9], HIGH);
}

while(T > 0 && T<=5) {
  funcum();
}

while(T > 5 && T<=10) {
  funcdois();
}

while(T > 10 && T<=15) {
  functres();
}

Quando ele entra num while, ele sai direto pro outro, não executando o loop novamente e fica preso no while.

Pode trocar os whiles, pelo case:

Colocares a mesma questao duas vezes com palavras diferentes nao faz com que tenhas mais sucesso...

Queria uma solução para ter várias leituras, e com precisão ou seja, as várias leituras que tenho no if, e a precisão que tenho no do/dowhile

Usares o if ou o while não te da mais nem menos precisão na tua leitura!
Tu é que com o teu código ficas travado dentro dos whiles e te parece que apenas corre uma vez.
Se fores ver a verdadeira função do while verás que ele ira executar SEMPRE o que tem dentro da sua {} ate que a avaliação boleana (T > 0 && T<=5) seja falsa.
Ora isto:

while(T > 0 && T<=5) {
  funcum();//Vai estar a correr eternamente ate que a avaliaçao T > 0 && T<=5 seja falsa.O teu codigo fica travado aqui!
//Só apos ser falsa é que deixas este while!
}

A menos que consigas variar a temperatura de uma forma rápida o teu código fica travado dentro dos whiles ate que a temperatura mude.