Galera, boa tarde
Gostaria da ajuda de vocês, estou fazendo um projeto com os seguintes sensores ( 03 ds18b20 e 2 swits )
Eu quero criar 3 floats para tempS1,S2,S3(probe01 , probe02 e probe 03 ) e estabelecer uma condição que :
Vocês sabem me dizer como fazer isso atraves do deviceaddress ? os valores já estao sendo plotados em tempo real no display, ou seja, o codigo até ai está ok,
só preciso fazer esse tipo de comparação..
Tags:
Na hipótese de ter 3 variaveis (S1 ,S2 ,S3).
Caso queira verificar se algumas delas é maior que 25,proceda:
if ( (S1) | | (S2) | | (S3) > 25 ) //somente se ALGUMA DELAS for maior que 25
{
faça();
}
Caso deseja que somente quando todas sejam maior que 25,proceda:
if ( (S1) && (S2) && (S3) > 25 ) //somente se TODAS forem maior que 25
{
nao_faça();
}
visite meus projetos em http://adltecnologia.blogspot.com.br
Almir, primeiramente gostaria de lhe agradeçer pela sua contribuíçao , a condição sitada eu estou ciente, porém preciso armazenar esses valores antes, para posteriormente compara-los, esse codigo que postei acredito que ele faz a leitura da temperatura e printa na tela ( somente )..
O que preciso é de criar 3 variaaveis tipo float temps1 , temps2, temps3 e obter as temperaturas de probe01 para temps1 , probe02 para temps2 e etc,
Essa parte é que estou meio perdido.. Desde já agradeço sua contribuição e de quem mais quiser contribuir,
Obrigado
André sempre que você estiver utilizando um código que você não tenha escrito é muito importante que você entenda cada instrução dentro desse código. Digo isso pois o que você quer ja está dentro do seu código, você só precisa "tirar de um lugar e colocar no outro".
A sua função displayTemperature possui na variável tempC o valor da temperatura correspondente ao deviceAddress que você envia como paramento. O que você pode fazer para salvar esse dado em outra variável e ter ele como um retorno, para isso substitua o 'void' da sua função por 'float' (já que esse é o tipo da variável que você quer usar) e no final do código da função coloque return tempC;
Para chamar a função, substitua o displayTemperature(Probe01); por temps1 = displayTemperature(Probe01); (claro, faça o mesmo para temps2 e temps3 utilizando Probe02 e Probe03)
Explicação rapida: void significa função sem retorno, ao substituir por float significa que sua função passa a ter um retorno do tipo float. A instrução return tempC indica que ao finalizar a sua função ela irá retornar o valor contido em tempC (que é um float). Ao utilizar temps1 = displayTemperature(Probe01); você define que a variável temps1 irá receber o retorno da função displayTemperature(Probe01), que é o valor de tempC
João, peço desculpas pela minha ignorância.
Traduzindo o que você falou , ficaria assim ?
float loop() /****** LOOP: RUNS CONSTANTLY ******/
{
sensors.requestTemperatures(); // Send the command to get temperatures
lcd.clear(); // Reset the display
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("1:");
temps1 = displayTemperature(Probe01);
lcd.setCursor(9,0); //Start at character 0 on line 1
lcd.print("2:");
temps2 = displayTemperature(Probe02);
lcd.setCursor(0,1); //Start at character 0 on line 1
lcd.print("3:");
temps3 = displayTemperature(Probe03);
return tempC;
delay(2000);
Obrigado desde já
Não precisa pedir desculpa, aqui é um lugar para aprender mesmo.
As alterações de void para float e o return tempC deve ser feitas na função displayTemperatura e não na função loop.
A parte do temps1, temps2 e temps3 estão corretas
No link abaixo fiz as alterações no seu código original, da uma olhada e se tiver alguma duvida pode perguntar
Obs.: não testei o código, caso apresente algum erro me avisa.
João , compilou e carregou normal
Porém a função abaixo esta funcionando ( quando s3 atinge mais de 26 ele ja ativa, mesmo quando s1 e s2 esteja abaixo desse valor ) , amanhã vou verificar com mais calma ...
if( (temps1)&&(temps2)&&(temps3) > 26 ) {
digitalWrite( pinobuzzer, HIGH );
delay(2000);
digitalWrite( pinobuzzer, LOW );
}
else {
digitalWrite( pinobuzzer, LOW );
}
delay(50);
Mas acredito que você me ajudou muito , obrigado mesmo .
não está funcionando **
Pessoal esse IF está errado. Não se pode fazer desse jeito. É um erro grave. Vai dar certo em alguns casos por coincidência.
if( (temps1)&&(temps2)&&(temps3) > 26 )
O certo é fazer assim:
if( (temps1 > 26) && (temps2 > 26) && (temps3 > 26) )
O uso dos parênteses internos é opcional.
Nesse caso, se as 3 temperaturas forem maiores que 26, a expressão vai ser verdadeira.
Se você quiser que apenas uma já satisfação a condição, então deve ser feito assim:
if( (temps1 > 26) || (temps2 > 26) || (temps3 > 26) )
Jose Augusto Cintra e João Arthur Arcângelo Alonso , agradeço demais a ajuda de vocês, quando eu finalizar 100% do projeto coloco por aqui e você saberão que fizeram parte dele. Desde já meus sinceros agradecimentos
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por