Boa noite pessoal!
Como faço para retirar um valor de uma função void e calcular em outra?
exemplo:
void loop(){
if(A > B){
faça alguma coisa
}
}
void 2(){
A
}
void 3 (){
B
}
Obrigado
Tags:
void significa que a função não tem retorno, para uma função ter retorno ela tem que ser tipificada (void é um tipo, mas que existe apenas para esse fim, identificar um função sem retorno).
O que você quer fazer que não tá dando para entender, suas funções chamam 2 e 3 e você chama A e B no IF.
Funções tem que iniciar com um carácter alfa.
Macelo, quero pegar um valor que está que esta na void relógio e comparar com outra na void loop
não tem referencia nenhuma a relógio.
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
const int botaoSel=5; //botao e pino
void setup()
{
Wire.begin();
Serial.begin(9600);
pinMode(botaoSel,INPUT); //
digitalWrite(botaoSel, HIGH); // ativando resistor PULL-UP
}
void loop()
{
if(digitalRead(botaoSel)== LOW){
SelecionaDataeHora(); //Ativa a funçao para ajuste de data hora
}
Mostrarelogio();
delay(1000);
}
///////////////////////Ajusta data e hora /////////////////////////////////////
void SelecionaDataeHora() //Seta a data e a hora do DS1307
{
byte segundos = 0; //Valores de 0 a 59
byte minutos = 37; //Valores de 0 a 59
byte horas = 1; //Valores de 0 a 23
byte diadasemana = 3; //Valores de 0 a 6 - 0=Domgino, 1 = Segunda, etc.
byte diadomes = 18; //Valores de 1 a 31
byte mes = 9; //Valores de 1 a 12
byte ano = 13; //Valores de 0 a 99
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
//As linhas abaixo escrevem no CI os valores de data e hora que foram colocados nas variaveis acima
Wire.write(ConverteParaBCD(segundos));
Wire.write(ConverteParaBCD(minutos));
Wire.write(ConverteParaBCD(horas));
Wire.write(ConverteParaBCD(diadasemana));
Wire.write(ConverteParaBCD(diadomes));
Wire.write(ConverteParaBCD(mes));
Wire.write(ConverteParaBCD(ano));
Wire.write(zero); //Start no CI
Wire.endTransmission();
}
//////////////////////////////////////////////////////////////////////
byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD
return ( (val/10*16) + (val%10) );
}
byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal
return ( (val/16*10) + (val%16) );
}
void Mostrarelogio(){
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read());
int minutos = ConverteparaDecimal(Wire.read());
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
int diadasemana = ConverteparaDecimal(Wire.read());
int diadomes = ConverteparaDecimal(Wire.read());
int mes = ConverteparaDecimal(Wire.read());
int ano = ConverteparaDecimal(Wire.read());
//Mostra a data no Serial Monitor
Serial.print("Data: ");
Serial.print(diadomes);
Serial.print("/");
Serial.print(mes);
Serial.print("/");
Serial.print(ano);
Serial.print(" ");
Serial.print("Hora : ");
Serial.print(horas);
Serial.print(":");
Serial.print(minutos);
Serial.print(":");
Serial.print(segundos);
switch(diadasemana)
{
case 0:Serial.println(", Domingo");
break;
case 1:Serial.println(", Segunda");
break;
case 2:Serial.println(", Terca");
break;
case 3:Serial.println(", Quarta");
break;
case 4:Serial.println(", Quinta");
break;
case 5:Serial.println(", Sexta");
break;
case 6:Serial.println(", Sabado");
}
}
Quero pegar o valor minutos e horas que estão em void Mostrarelogio() e fazer um comparação
Não é o melhor meio, mas seria criar duas variaveis globais e jogar o valor nelas e comparar.
Ou
Passar para a função MostraRelógio dois parâmetros por referência.
void loop()
{
int Minutos, Horas;
if(digitalRead(botaoSel)== LOW){
SelecionaDataeHora(); //Ativa a funçao para ajuste de data hora
}
Mostrarelogio(Minutos, Horas);
delay(1000);
}
void Mostrarelogio(int &rMinutos, int &rHoras) // parâmetros passados por referência
{
.
.
.
.
int minutos = ConverteparaDecimal(Wire.read());
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
rHoras = horas;
rMinutos = minutos;
}
Obrigado Marcelo vou tenta, boa noite
Marcelo funcionou, só não declarei rHoras e rMinutos dentro da função void que deu conflito com a biblioteca Wire. Declarei as variáveis antes do void setup e mantive as duas do jeito que você colocou no final em void Mostrarelogio.
Obrigado
#include <LiquidCrystal.h> // declara a utilização da biblioteca LiquidCrystal
más o programa não para quando a distância é menor que 5
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por