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

Exibições: 9632

Responder esta

Respostas a este tópico

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

  1. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  2. int tempo = 0;
  3. int distancia = 50;
  4. float velocidade = 0;
  5. int ldr = 0 ,sensor = 0;
  6. const int trigPin=8, echoPin=9;
  7. void setup() {
  8. Serial.begin(9600);
  9. lcd.begin(16, 2); // Iniciando o objeto "lcd" de 2 linhas e 16 colunas
  10. pinMode(trigPin, OUTPUT);
  11. pinMode(echoPin, INPUT);
  12. }
  13. void loop() {
  14. digitalWrite (trigPin,LOW);
  15. delayMicroseconds(2);
  16. digitalWrite (trigPin,HIGH);
  17. delayMicroseconds(10);
  18. digitalWrite (trigPin,LOW);
  19. unsigned long duracao = pulseIn(echoPin, HIGH);
  20. int cm = duracao /58;
  21. // put your main code here, to run repeatedly:
  22. if (cm<=5)
  23. {
  24. tempo=tempo+0;
  25. velocidade=velocidade+0;
  26. }
  27. if (ldr<=15)
  28. {
  29. tempo = 0 ;
  30. }
  31. else {
  32. delay(1000);
  33. tempo ++;
  34. }
  35. //EXIBIR
  36. ldr = analogRead (sensor);
  37. Serial.print ("Tempo :");
  38. Serial.print (tempo);
  39. Serial.print ("s");
  40. velocidade = distancia/tempo;
  41. Serial.print (" Veloc.: ");
  42. Serial.print(velocidade);
  43. Serial.print (" LDR :");
  44. Serial.println(ldr);
  45. lcd.setCursor(0,0);
  46. lcd.print("Tempo :");
  47. lcd.print(tempo);
  48. lcd.print("s");
  49. }

más o programa não para quando a distância é menor que 5

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço