Unable to pinpoint error in program

Hello, I'm very new to Arduino and the Arduino IDE. I'm trying to figure out what the problem with this program is but I just cant. This program is a combination of two separate example programs for a temperature sensor. I was able to stitch these programs together and it worked successfully but then I moved the programs into one combined loop and now it doesn't compile. Any advice or help would be appreciated, thanks.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <DHT.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9 // Lower resolution
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;
DHT dht(DHTPIN, DHTTYPE);

int numberOfDevices;
char input;
char b;
char h;
char t;
 
void setup() {
    Serial.begin(9600);  

    Serial.println("Temp Probe");

    sensors.begin();
    dht.begin();
  
    numberOfDevices = sensors.getDeviceCount();
    
    Serial.print("Locating devices...");
    Serial.print("Found ");
    Serial.print(numberOfDevices, DEC);
    Serial.println(" devices.");
    Serial.print("Parasite power is: "); 
    if (sensors.isParasitePowerMode()) Serial.println("ON");
    else Serial.println("OFF");
  
    for(int i=0;i<numberOfDevices; i++)
    {
      if(sensors.getAddress(tempDeviceAddress, i))
    {
    Serial.print("Found device ");
    Serial.print(i, DEC);
    Serial.print(" with address: ");
    Serial.println();
    Serial.print("Setting resolution to ");
    Serial.println(TEMPERATURE_PRECISION, DEC);
    
    sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
    
    Serial.print("Resolution actually set to: ");
    Serial.print(sensors.getResolution(tempDeviceAddress), DEC); 
    Serial.println();
  }
    else{
      Serial.print("Found ghost device at ");
      Serial.print(i, DEC);
      Serial.print(" but could not detect address. Check power and cabling");
  }
  }
    Serial.println("Type something!");
}

void loop (DeviceAddress deviceAddress)
{

  if (input == t){
  
    Serial.print("Metal temp probe: ");
  
    float tempC = sensors.getTempC(deviceAddress);
    if(tempC == DEVICE_DISCONNECTED_C) 
    {
      Serial.println("Error: Could not read temperature data");
      return;
    }
    Serial.print("Temp C: ");
    Serial.print(tempC);
    Serial.print(" Temp F: ");
    Serial.println(DallasTemperature::toFahrenheit(tempC));
  }


  else if (input == h){
    sensors.requestTemperatures();
  
    
    
    for(int i=0;i<numberOfDevices; i++)
    {
      if(sensors.getAddress(tempDeviceAddress, i))
    {
  
      loop (tempDeviceAddress);
    } 
    }
  
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    float f = dht.readTemperature(true);
  
    if (isnan(h) || isnan(t) || isnan(f)) {
      Serial.println(F("Failed to read from DHT sensor!"));
      return;
    }
  
  
    Serial.print("Temp + humidity sensor: ");
    Serial.print(F("Humidity: "));
    Serial.print(h);
    Serial.print(F("%  Temperature: "));
    Serial.print(t);
    Serial.print(F("°C "));
    Serial.print(f);
    Serial.println(F("°F"));
    Serial.println("///////////////////////////////////////////////////////////////////////////");
  }

  else
  {
    Serial.println("Input command");
  }
}

You can't pass anything to your loop function, that is what the compiler is complaining about.

1 Like

Thank you, how exactly can that be done?

Just save the number of devices and their addresses to global variables in setup().

Never call loop() from loop()!

You are never setting the following variables to anything but you are trying to use them in loop():

char input;
char b;
char h;
char t;

What did the two example programs do?

What is your combination of them supposed to do?

a7

Post the two working sketches.

You have not given the global variables 'input' or 't' a value so they will both be zero. No need to compare them. Just take out the 'if (input == t)'.

Same with the variables 'input' and 'h'. Just take out the 'else if (input == h)'.

If you do those, you will have to remove this part:

The two example programs I used are included below. They are supposed to control a temperature probe and a temp/humidity sensor. The example programs worked by constantly giving a stream of data. My program is supposed to work by polling data using T for only the temp probe, H for the temp/humidity sensor, and B for both.

Temp/humidity sensor example program

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include "DHT.h"

#define DHTPIN 2     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}

Temp probe code

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9 // Lower resolution

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

int numberOfDevices; // Number of temperature devices found

DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
  
  // Grab a count of devices on the wire
  numberOfDevices = sensors.getDeviceCount();
  
  // locate devices on the bus
  Serial.print("Locating devices...");
  
  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");

  // report parasite power requirements
  Serial.print("Parasite power is: "); 
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
  
  // Loop through each device, print out address
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
	{
		Serial.print("Found device ");
		Serial.print(i, DEC);
		Serial.print(" with address: ");
		printAddress(tempDeviceAddress);
		Serial.println();
		
		Serial.print("Setting resolution to ");
		Serial.println(TEMPERATURE_PRECISION, DEC);
		
		// set the resolution to TEMPERATURE_PRECISION bit (Each Dallas/Maxim device is capable of several different resolutions)
		sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
		
		Serial.print("Resolution actually set to: ");
		Serial.print(sensors.getResolution(tempDeviceAddress), DEC); 
		Serial.println();
	}else{
		Serial.print("Found ghost device at ");
		Serial.print(i, DEC);
		Serial.print(" but could not detect address. Check power and cabling");
	}
  }

}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  // method 1 - slower
  //Serial.print("Temp C: ");
  //Serial.print(sensors.getTempC(deviceAddress));
  //Serial.print(" Temp F: ");
  //Serial.print(sensors.getTempF(deviceAddress)); // Makes a second call to getTempC and then converts to Fahrenheit

  // method 2 - faster
  float tempC = sensors.getTempC(deviceAddress);
  if(tempC == DEVICE_DISCONNECTED_C) 
  {
    Serial.println("Error: Could not read temperature data");
    return;
  }
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
}

void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  
  
  // Loop through each device, print out temperature data
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
	{
		// Output the device ID
		Serial.print("Temperature for device: ");
		Serial.println(i,DEC);
		
		// It responds almost immediately. Let's print out the data
		printTemperature(tempDeviceAddress); // Use a simple function to print out the data
	} 
	//else ghost device! Check your power requirements and cabling
	
  }
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

What do you mean by this? You had a variable called input. Where was this input supposed to come from?

OK THX.

Now, ;ost your latest attempt at stitch together.

After considering the advices you have been given.

If it does not compile, you should be able to see why.

If it compiles and does not what you want, we can help with that, too, but these look kinda straight ahead so shouldn't be too hard.

a7

I was thinking that it could be sent from the serial terminal. Is that not how you're supposed to get user input?

That's fine. There was nothing to indicate it was "user" input so that is why I asked. Since you don't read the serial in your code and input, b, h, and t are never set to anything there was no way for me to know what you intended.

EDIT: Found the error, I misplaced a curly bracket

This is my latest attempt to stitch the code together. Its no longer giving the unable to compile to board error, but now its giving the expected unqualified-id before 'else' error. Any ideas where the source of the error could be? This code is very much spaghettified so i'm also going to try and straighten it out somehow.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <DHT.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9 // Lower resolution
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;
DHT dht(DHTPIN, DHTTYPE);

int numberOfDevices;

 
void setup() {
    Serial.begin(9600);  

    Serial.println("Temp Probe");

    sensors.begin();
    dht.begin();
  
    numberOfDevices = sensors.getDeviceCount();
    
    Serial.print("Locating devices...");
    Serial.print("Found ");
    Serial.print(numberOfDevices, DEC);
    Serial.println(" devices.");
    Serial.print("Parasite power is: "); 
    if (sensors.isParasitePowerMode()) Serial.println("ON");
    else Serial.println("OFF");
  
    for(int i=0;i<numberOfDevices; i++)
    {
      if(sensors.getAddress(tempDeviceAddress, i))
    {
    Serial.print("Found device ");
    Serial.print(i, DEC);
    Serial.print(" with address: ");
    Serial.println();
    Serial.print("Setting resolution to ");
    Serial.println(TEMPERATURE_PRECISION, DEC);
    
    sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
    
    Serial.print("Resolution actually set to: ");
    Serial.print(sensors.getResolution(tempDeviceAddress), DEC); 
    Serial.println();
  }
    else{
      Serial.print("Found ghost device at ");
      Serial.print(i, DEC);
      Serial.print(" but could not detect address. Check power and cabling");
  }
  }
    Serial.println("Type something!");
}

void loop (DeviceAddress deviceAddress)
{

   char b;
   char h;
   char t;
  Serial.read();
  
  if (Serial.available() == t){
  
    Serial.print("Metal temp probe: ");
  
    float tempC = sensors.getTempC(deviceAddress);
    if(tempC == DEVICE_DISCONNECTED_C) 
    {
      Serial.println("Error: Could not read temperature data");
      return;
    }
    Serial.print("Temp C: ");
    Serial.print(tempC);
    Serial.print(" Temp F: ");
    Serial.println(DallasTemperature::toFahrenheit(tempC));
  }


  else if (Serial.available() == h){
    sensors.requestTemperatures();
  
    
    
    for(int i=0;i<numberOfDevices; i++)
    {
      if(sensors.getAddress(tempDeviceAddress, i))
    {
  
      loop (tempDeviceAddress);
    } 
    }
  
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    float f = dht.readTemperature(true);
  
    if (isnan(h) || isnan(t) || isnan(f)) {
      Serial.println(F("Failed to read from DHT sensor!"));
      return;
    }
  
  
    Serial.print("Temp + humidity sensor: ");
    Serial.print(F("Humidity: "));
    Serial.print(h);
    Serial.print(F("%  Temperature: "));
    Serial.print(t);
    Serial.print(F("°C "));
    Serial.print(f);
    Serial.println(F("°F"));
    Serial.println("///////////////////////////////////////////////////////////////////////////");
  }

  else if (Serial.available() == b)
  {
        Serial.print("Metal temp probe: ");
  
    float tempC = sensors.getTempC(deviceAddress);
    if(tempC == DEVICE_DISCONNECTED_C) 
    {
      Serial.println("Error: Could not read temperature data");
      return;
    }
    Serial.print("Temp C: ");
    Serial.print(tempC);
    Serial.print(" Temp F: ");
    Serial.println(DallasTemperature::toFahrenheit(tempC));
    ///////////////////////////////////////////////////////
    sensors.requestTemperatures();
  
    
    
    for(int i=0;i<numberOfDevices; i++)
    {
      if(sensors.getAddress(tempDeviceAddress, i))
    {
  
      loop (tempDeviceAddress);
    } 
    }
  
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    float f = dht.readTemperature(true);
  
    if (isnan(h) || isnan(t) || isnan(f)) {
      Serial.println(F("Failed to read from DHT sensor!"));
      return;
    }
  
  
    Serial.print("Temp + humidity sensor: ");
    Serial.print(F("Humidity: "));
    Serial.print(h);
    Serial.print(F("%  Temperature: "));
    Serial.print(t);
    Serial.print(F("°C "));
    Serial.print(f);
    Serial.println(F("°F"));
    Serial.println("///////////////////////////////////////////////////////////////////////////");
  }
  }
  
  else
  {
    Serial.println("Input command");
  }

Your void loop() function seems to be being closed before the last "else" condition.

Instead of this:

Try this:

if (Serial.available()) {
   char input;
   input = Serial.read();
        if (input == 't'){
            //do all the stuff
        }

If you would use the auto format in the IDE you can identify your misplacement of brackets a lot easier. Why are you still trying to pass a parameter to loop()? The compiler is not going to like that either.

void loop (DeviceAddress deviceAddress)

And you are still trying to call loop():

loop (tempDeviceAddress);

Here is my new program. The error thats popping up now is "too few arguments to function 'void printTemperature(uint8_t*)' ". What does that mean and how can I fix it?

#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9 // Lower resolution
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;
DHT dht(DHTPIN, DHTTYPE);

int numberOfDevices;


void setup() {
  Serial.begin(9600);

  Serial.println("Temp Probe");

  sensors.begin();
  dht.begin();

  numberOfDevices = sensors.getDeviceCount();

  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");

  for (int i = 0; i < numberOfDevices; i++)
  {
    if (sensors.getAddress(tempDeviceAddress, i))
    {
      Serial.print("Found device ");
      Serial.print(i, DEC);
      Serial.print(" with address: ");
      Serial.println();
      Serial.print("Setting resolution to ");
      Serial.println(TEMPERATURE_PRECISION, DEC);

      sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);

      Serial.print("Resolution actually set to: ");
      Serial.print(sensors.getResolution(tempDeviceAddress), DEC);
      Serial.println();
    }
    else {
      Serial.print("Found ghost device at ");
      Serial.print(i, DEC);
      Serial.print(" but could not detect address. Check power and cabling");
    }
  }
  Serial.println("Type something!");
}

void loop() {

  //  humidityAndTemp;
  //  printTemperature;

  char input;
  char b;
  char h;
  char t;

  Serial.read();

  if (Serial.available() == h) {
    humidityAndTemp();
  }

  else if (Serial.available() == t) {
    printTemperature();
  }

  else if (Serial.available() == b) {
    hunidityAndTemp();
    printTemperature();
  }

  else{
    Serial.print("Input a command: ");
  }

}

void printTemperature(DeviceAddress deviceAddress)
{

  delay(10000);

  Serial.print("Metal temp probe: ");

  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == DEVICE_DISCONNECTED_C)
  {
    Serial.println("Error: Could not read temperature data");
    return;
  }
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.println(DallasTemperature::toFahrenheit(tempC));
}

void humidityAndTemp() {

  sensors.requestTemperatures();



  for (int i = 0; i < numberOfDevices; i++)
  {
    if (sensors.getAddress(tempDeviceAddress, i))
    {

      printTemperature(tempDeviceAddress);
    }
  }

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  Serial.print("Temp + humidity sensor: ");
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.println(F("°F"));
  Serial.println("///////////////////////////////////////////////////////////////////////////");
}

printTemperature requires an argument. Your printTemperature function is defined with a DeviceAddress parameter so you need to call it with a device address.

In your loop() function you never set input, b, h, or t to any values. Serial.available() only tells you how many characters are available in the serial buffer. Serial.read() is the function to read a byte from the serial interface.

void loop() {

  //  humidityAndTemp;
  //  printTemperature;

  char input;
  char b;
  char h;
  char t;

  Serial.read();

  if (Serial.available() == h) {
    humidityAndTemp();
  }

  else if (Serial.available() == t) {
    printTemperature();
  }

  else if (Serial.available() == b) {
    hunidityAndTemp();
    printTemperature();
  }

  else{
    Serial.print("Input a command: ");
  }

}

I've rebuilt the code, I believe that I am using the device addresses correctly. The code is still giving me an error saying that printTemp was not declared in the main loop, any ideas on what is going wrong?

#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9 // Lower resolution
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;
DHT dht(DHTPIN, DHTTYPE);

int numberOfDevices;


void setup() {
  Serial.begin(9600);

  Serial.println("Temp Probe");

  sensors.begin();
  dht.begin();

  numberOfDevices = sensors.getDeviceCount();

  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");

  for (int i = 0; i < numberOfDevices; i++)
  {
    if (sensors.getAddress(tempDeviceAddress, i))
    {
      Serial.print("Found device ");
      Serial.print(i, DEC);
      Serial.print(" with address: ");
      Serial.println();
      Serial.print("Setting resolution to ");
      Serial.println(TEMPERATURE_PRECISION, DEC);

      sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);

      Serial.print("Resolution actually set to: ");
      Serial.print(sensors.getResolution(tempDeviceAddress), DEC);
      Serial.println();
    }
    else {
      Serial.print("Found ghost device at ");
      Serial.print(i, DEC);
      Serial.print(" but could not detect address. Check power and cabling");
    }
  }
}

void loop()
{ 
if (Serial.available() > 0)
  {

    char ComReading;
    ComReading = Serial.read();
    Serial.print(char(ComReading));
    Serial.print("            ");
    Serial.println();

    if (ComReading == '1')
    {
      // if char recieved do this
      switch (ComReading)
      {
        case 'b':
          //Do what you need when b is pressed
          Serial.println(" b pressed");
          humidityAndTemp();
          break;
        case 'h':
          //Do what you need when h is pressed
          Serial.println(" h pressed");
            printTemp();
            break;
        case 't':
          //Do what you need when t is pressed
          Serial.println(" t pressed");
            humidityAndTemp();
            printTemp();
            break;
        default:
          // Do something when it is not one of the above three characters
          Serial.println(" another char pressed");
          break;
      }

    }
    if (ComReading == '0')
    {
      // if no char recieved do this
      Serial.println("No Char recieved");
    }
    delay(1);
  }
}
void printTemp (DeviceAddress 0x28, 0x5A, 0x4C, 0x05, 0x0D, 0x00, 0x00, 0xA6)
{
  Serial.print("Metal temp probe: ");

  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == DEVICE_DISCONNECTED_C)
  {
    Serial.println("Error: Could not read temperature data");
    return;
  }
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.println(DallasTemperature::toFahrenheit(tempC));
  return;
}

void humidityAndTemp() {

  sensors.requestTemperatures();

  for (int i = 0; i < numberOfDevices; i++)
  {
    if (sensors.getAddress(tempDeviceAddress, i))
    {

      deviceAddress(tempDeviceAddress);
    }
  }

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  Serial.print("Temp + humidity sensor: ");
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.println(F("°F"));
  Serial.println("///////////////////////////////////////////////////////////////////////////");
  return;
}

That's not how you declare a function. The declaration failed (check the rest of your error messages) and thus the function's name is "not declared in this (or any other) scope".

Try

void printTemp (DeviceAddress address)

and add:
const DeviceAddress myDeviceAddress = {0x28, 0x5A, 0x4C, 0x05, 0x0D, 0x00, 0x00, 0xA6};

and change:
printTemp();
to
printTemp(myDeviceAddress);