Void(void)

Das "void" als Parameter bedeutet, das diese Funktion keine Parameter übergeben bekommt, es kann auch weggelassen werden.
Das "void" vor einer Funktion bedeutet, das diese Funktion nichts zurück liefert.

Zu Deinem Problem mit den zwei Werten die Du zurück liefern willst. Hier gibt es mehrere Möglichkeiten.
Die einfachste, aber nicht sehr saubere Methode ist die Variablen "temp1 und temp2" als globale Variablen zu deklarieren. Das machst Du, indem Du die Variablen außerhalb einer Funktion deklarierst. z.B. vor dem setup() { ... }. Damit kannst Du temp1 und temp2 innerhalb aller Funktionen in Deinem Programm verwenden und verändern.
Aber aufpassen! Wenn Du innerhalb einer Funktion nochmal Variablen temp1 und temp2 deklarierst, dann "verdecken" diese lokalen (nur innerhalb der Funktion vorhandenen) Variablen die globalen. Die lokalen temp1 und temp2 sind dann nicht die gleichen Variablen wie die globalen temp1 und temp2.

Du kannst einer Funktion auch Referenzen oder Zeiger auf Variablen übergeben.

void temperatur( int *temp1, int* temp2) { 
...
    *temp1 = ...
}

Dadurch das Du nicht die Werte für temp1 und temp2 selbst übergibst, sondern nur die Adresse, wo die Daten im Speicher stehen, kannst Du den Inhalt in der Funktion verändern und die Änderungen sind auch außerhalb der Funktion sichtbar.

Als dritte Variante kannst Du einen komplexen Datentyp zurückliefern:

//Datentyp für Temperatur
struct temperatur {
  int temp1;
  int temp2;
};

void setup() {
 
}

void loop() {
  //Funktion aufrufen und zwei Werte bekommen
  struct temperatur my_temp = lese_temp();
  Serial.println( my_temp.temp1);
  Serial.println( my_temp.temp2);
}

//Funktion die zwei Werte in einem struct zurückliefert
struct temperatur lese_temp() {
 struct temperatur t;
 t.temp1 = 42;
 t. temp2 = 4711;
 return t; 
  
}