#include <AM2302-Sensor.h>
#include <float16.h>
constexpr unsigned int SENSOR_PIN{ A12 };
AM2302::AM2302_Sensor am2302{ SENSOR_PIN };
// int checksum_err{ 0 }, timeout_err{ 0 }, read_freq_err{ 0 };
auto status = 0;
float16 temperature;
float16 humidity;
char text[19];
// void ReadAM2302(char *buffer, float &DHT22temp = 0.0, float &DHT22humid = 0.0);
void setup() {
Serial.begin(115200);
while (!Serial) {
yield();
}
Serial.print(F("\n >>> AM2302-sensor Health Check <<<\n\n"));
// put your setup code here, to run once:
// set pin and check for sensor
if (!am2302.begin()) {
Serial.println(F("Error sensor check!"));
} else {
Serial.println(F("Sensor initialized."));
}
delay(3000);
Serial.println(F("\nTemperature,Humidity"));
}
void loop() {
ReadAM2302_values(text, temperature, humidity);
// ReadAM2302(text);
Serial.println(text);
Serial.print("Values from variables: ");
Serial.print(temperature.toFloat());
Serial.print(", ");
Serial.println(humidity.toFloat());
temperature = 0;
humidity = 0;
delay(2000);
}
void ReadAM2302_values(char *buffer, float16 &DHT22temp, float16 &DHT22humid) {
uint32_t snapshot = 0;
float16 temperature = 0;
float16 humidity = 0;
char arr[25] = {};
char temp[6] = {};
char humid[5] = {};
switch (am2302.read()) {
case AM2302::AM2302_ERROR_READ_FREQ:
Serial.print(F("Had to wait for "));
snapshot = millis();
while (am2302.read() == AM2302::AM2302_ERROR_READ_FREQ) {
;
}
Serial.println(millis() - snapshot);
// break;
case AM2302::AM2302_READ_OK:
DHT22temp = am2302.get_Temperature();
DHT22humid = am2302.get_Humidity();
dtostrf(DHT22temp.toFloat(), 4, 1, temp);
temp[strchr(temp, '.') - temp] = ',';
dtostrf(DHT22humid.toFloat(), 4, 1, humid);
humid[strchr(humid, '.') - humid] = ',';
sprintf_P(buffer, PSTR("%s°C; %s%%"), temp, humid);
break;
case AM2302::AM2302_ERROR_CHECKSUM:
strcpy_P(buffer, PSTR("Checksum error."));
break;
case AM2302::AM2302_ERROR_TIMEOUT:
strcpy_P(buffer, PSTR("Timeout error."));
break;
}
}
void ReadAM2302(char *buffer) {
char arr[19] = {};
char temp[6] = {};
char humid[5] = {};
switch (am2302.read()) {
case AM2302::AM2302_READ_OK:
dtostrf(am2302.get_Temperature(), 4, 1, temp);
temp[strchr(temp, '.') - temp] = ',';
dtostrf(am2302.get_Humidity(), 4, 1, humid);
humid[strchr(humid, '.') - humid] = ',';
sprintf_P(buffer, PSTR("%s°C, %s%%"), temp, humid);
break;
case AM2302::AM2302_ERROR_TIMEOUT:
strcpy_P(buffer, PSTR("Timeout error."));
break;
case AM2302::AM2302_ERROR_CHECKSUM:
strcpy_P(buffer, PSTR("Checksum error."));
break;
case AM2302::AM2302_ERROR_READ_FREQ:
strcpy_P(buffer, PSTR("Reading too often."));
}
}