How do I use variables from another function?

Hi, I want to use variables (all the floats) from the "void loop" function in the "void temperatuur_actie"

Because when I compile it now it says thath the variables are not declared

#include <Wire.h>
#include <DS3232RTC.h>  
#include <dht.h>
#include <Stepper.h>
#include <TimeLib.h>

#define DHT11_PIN 7

int val;

const int relais_warmte = 6; 

const int stappen_per_draai = 285; // 1000 stappen = 3,5 toeren -> 1 toer = 285 stappen

byte stappen_teller = 0;

Stepper myStepper(stappen_per_draai, 8, 9, 10, 11);
dht DHT;

void setup() {

  Serial.begin(9600);

  myStepper.setSpeed(30); 
  pinMode(relais_warmte, OUTPUT);

  RTC.set(now());
  
  setSyncProvider(RTC.get);   
    if(timeStatus() != timeSet) 
        Serial.println("Unable to sync with the RTC");
    else
       Serial.println("RTC has set the system time");   
       
}
void loop() {
 
 if ( val >= 5 && val <= 19){

    float VerwarmingLaagsteTemp = 18.7;
    float VerwarmingHoogsteTemp = 19.3;
    float RaamLaagsteTemp = 25.7;
    float RaamHoogsteTemp = 26.3;

    temperatuur_actie();
 }
 
   else{
    
    float VerwarmingLaagsteTemp = 12.7;
    float VerwarmingHoogsteTemp = 13.3;
    float RaamLaagsteTemp =18.7;
    float RaamHoogsteTemp = 19.3;

    temperatuur_actie();
  } 
  
}

void temperatuur_actie(){

    int chk = DHT.read11(DHT11_PIN); //Er wordt gelezen vanuit de sensor welke temperatuur het is
    Serial.print("Temperatuur = "); // Temperatuur = x
    Serial.println(DHT.temperature); 
    delay(1000); //Wacht 1 second
    
    if (chk < VerwarmingLaagsteTemp) {

      digitalWrite(relais_warmte, HIGH);
      
    }

    if (chk > VerwarmingHoogsteTemp) {

      digitalWrite(relais_warmte, LOW);
    }

    if (chk > RaamHoogsteTemp) {

      myStepper.step(stappen_per_draai);
      stappen_teller = 1;
    }

    if (chk < RaamLaagsteTemp) {

      myStepper.step(-stappen_per_draai);
      stappen_teller = 0;
      
    }

you can make them global and then you see them everywhere or modify the function to pass them as parameters

global:

#include <Wire.h>
#include <DS3232RTC.h>
#include <dht.h>
#include <Stepper.h>
#include <TimeLib.h>

#define DHT11_PIN 7

int val;

float VerwarmingLaagsteTemp;
float VerwarmingHoogsteTemp;
float RaamLaagsteTemp;
float RaamHoogsteTemp;


const int relais_warmte = 6;

const int stappen_per_draai = 285; // 1000 stappen = 3,5 toeren -> 1 toer = 285 stappen

byte stappen_teller = 0;

Stepper myStepper(stappen_per_draai, 8, 9, 10, 11);
dht DHT;

void setup() {

  Serial.begin(9600);

  myStepper.setSpeed(30);
  pinMode(relais_warmte, OUTPUT);

  RTC.set(now());

  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet)
    Serial.println("Unable to sync with the RTC");
  else
    Serial.println("RTC has set the system time");

}
void loop() {

  if ( val >= 5 && val <= 19) {

    VerwarmingLaagsteTemp = 18.7;
    VerwarmingHoogsteTemp = 19.3;
    RaamLaagsteTemp = 25.7;
    RaamHoogsteTemp = 26.3;

    temperatuur_actie();
  }

  else {

    VerwarmingLaagsteTemp = 12.7;
    VerwarmingHoogsteTemp = 13.3;
    RaamLaagsteTemp = 18.7;
    RaamHoogsteTemp = 19.3;

    temperatuur_actie();
  }

}

void temperatuur_actie() {

  int chk = DHT.read11(DHT11_PIN); //Er wordt gelezen vanuit de sensor welke temperatuur het is
  Serial.print("Temperatuur = "); // Temperatuur = x
  Serial.println(DHT.temperature);
  delay(1000); //Wacht 1 second

  if (chk < VerwarmingLaagsteTemp) {

    digitalWrite(relais_warmte, HIGH);

  }

  if (chk > VerwarmingHoogsteTemp) {

    digitalWrite(relais_warmte, LOW);
  }

  if (chk > RaamHoogsteTemp) {

    myStepper.step(stappen_per_draai);
    stappen_teller = 1;
  }

  if (chk < RaamLaagsteTemp) {

    myStepper.step(-stappen_per_draai);
    stappen_teller = 0;

  }
}

if you want a function with parameters

#include <Wire.h>
#include <DS3232RTC.h>
#include <dht.h>
#include <Stepper.h>
#include <TimeLib.h>

#define DHT11_PIN 7

int val;

const int relais_warmte = 6;

const int stappen_per_draai = 285; // 1000 stappen = 3,5 toeren -> 1 toer = 285 stappen

byte stappen_teller = 0;

Stepper myStepper(stappen_per_draai, 8, 9, 10, 11);
dht DHT;

void setup() {

  Serial.begin(9600);

  myStepper.setSpeed(30);
  pinMode(relais_warmte, OUTPUT);

  RTC.set(now());

  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet)
    Serial.println("Unable to sync with the RTC");
  else
    Serial.println("RTC has set the system time");

}
void loop() {
  if ( val >= 5 && val <= 19) {
    temperatuur_actie(18.7, 19.3, 25.7, 26.3);
  } else {
    temperatuur_actie(12.7, 13.3, 18.7, 19.3);
  }

}

void temperatuur_actie(float VerwarmingLaagsteTemp, float VerwarmingHoogsteTemp, float RaamLaagsteTemp, float RaamHoogsteTemp) {

  int chk = DHT.read11(DHT11_PIN); //Er wordt gelezen vanuit de sensor welke temperatuur het is
  Serial.print("Temperatuur = "); // Temperatuur = x
  Serial.println(DHT.temperature);
  delay(1000); //Wacht 1 second

  if (chk < VerwarmingLaagsteTemp) {

    digitalWrite(relais_warmte, HIGH);

  }

  if (chk > VerwarmingHoogsteTemp) {

    digitalWrite(relais_warmte, LOW);
  }

  if (chk > RaamHoogsteTemp) {

    myStepper.step(stappen_per_draai);
    stappen_teller = 1;
  }

  if (chk < RaamLaagsteTemp) {

    myStepper.step(-stappen_per_draai);
    stappen_teller = 0;

  }
}

of course all this is totally useless as val is not really defined and as global will be 0, so your loop will never enter the first if and will always execute the second part.

J-M-L:
you can make them global and then you see them every where or modify the function to pass them as parameters

global:

#include <Wire.h>

#include <DS3232RTC.h>
#include <dht.h>
#include <Stepper.h>
#include <TimeLib.h>

#define DHT11_PIN 7

int val;

float VerwarmingLaagsteTemp;
float VerwarmingHoogsteTemp;
float RaamLaagsteTemp;
float RaamHoogsteTemp;

const int relais_warmte = 6;

const int stappen_per_draai = 285; // 1000 stappen = 3,5 toeren -> 1 toer = 285 stappen

byte stappen_teller = 0;

Stepper myStepper(stappen_per_draai, 8, 9, 10, 11);
dht DHT;

void setup() {

Serial.begin(9600);

myStepper.setSpeed(30);
 pinMode(relais_warmte, OUTPUT);

RTC.set(now());

setSyncProvider(RTC.get);
 if (timeStatus() != timeSet)
   Serial.println("Unable to sync with the RTC");
 else
   Serial.println("RTC has set the system time");

}
void loop() {

if ( val >= 5 && val <= 19) {

VerwarmingLaagsteTemp = 18.7;
   VerwarmingHoogsteTemp = 19.3;
   RaamLaagsteTemp = 25.7;
   RaamHoogsteTemp = 26.3;

temperatuur_actie();
 }

else {

VerwarmingLaagsteTemp = 12.7;
   VerwarmingHoogsteTemp = 13.3;
   RaamLaagsteTemp = 18.7;
   RaamHoogsteTemp = 19.3;

temperatuur_actie();
 }

}

void temperatuur_actie() {

int chk = DHT.read11(DHT11_PIN); //Er wordt gelezen vanuit de sensor welke temperatuur het is
 Serial.print("Temperatuur = "); // Temperatuur = x
 Serial.println(DHT.temperature);
 delay(1000); //Wacht 1 second

if (chk < VerwarmingLaagsteTemp) {

digitalWrite(relais_warmte, HIGH);

}

if (chk > VerwarmingHoogsteTemp) {

digitalWrite(relais_warmte, LOW);
 }

if (chk > RaamHoogsteTemp) {

myStepper.step(stappen_per_draai);
   stappen_teller = 1;
 }

if (chk < RaamLaagsteTemp) {

myStepper.step(-stappen_per_draai);
   stappen_teller = 0;

}
}




if you want a function with parameters


#include <Wire.h>
#include <DS3232RTC.h>
#include <dht.h>
#include <Stepper.h>
#include <TimeLib.h>

#define DHT11_PIN 7

int val;

const int relais_warmte = 6;

const int stappen_per_draai = 285; // 1000 stappen = 3,5 toeren -> 1 toer = 285 stappen

byte stappen_teller = 0;

Stepper myStepper(stappen_per_draai, 8, 9, 10, 11);
dht DHT;

void setup() {

Serial.begin(9600);

myStepper.setSpeed(30);
 pinMode(relais_warmte, OUTPUT);

RTC.set(now());

setSyncProvider(RTC.get);
 if (timeStatus() != timeSet)
   Serial.println("Unable to sync with the RTC");
 else
   Serial.println("RTC has set the system time");

}
void loop() {
 if ( val >= 5 && val <= 19) {
   temperatuur_actie(18.7, 19.3, 25.7, 26.3);
 } else {
   temperatuur_actie(12.7, 13.3, 18.7, 19.3);
 }

}

void temperatuur_actie(float VerwarmingLaagsteTemp, float VerwarmingHoogsteTemp, float RaamLaagsteTemp, float RaamHoogsteTemp) {

int chk = DHT.read11(DHT11_PIN); //Er wordt gelezen vanuit de sensor welke temperatuur het is
 Serial.print("Temperatuur = "); // Temperatuur = x
 Serial.println(DHT.temperature);
 delay(1000); //Wacht 1 second

if (chk < VerwarmingLaagsteTemp) {

digitalWrite(relais_warmte, HIGH);

}

if (chk > VerwarmingHoogsteTemp) {

digitalWrite(relais_warmte, LOW);
 }

if (chk > RaamHoogsteTemp) {

myStepper.step(stappen_per_draai);
   stappen_teller = 1;
 }

if (chk < RaamLaagsteTemp) {

myStepper.step(-stappen_per_draai);
   stappen_teller = 0;

}
}




of course all this is totally useless as val is not really defined and as global will be 0, so your loop will never enter the first if and will always execute the second part.

Thank you! And yes val is currently useless but I need to add val = (hour()); to change the value of val.

Happy if it helps

you might want to read about variable scope to understand this better

have fun