Cześć.
Zaczynam zabawy z programowaniem pod ESP8266 (mam dokładnie Moduł WiFi ESP8266 + NodeMCU v3).
Nie mam pojęcia czemu ten sam kod wrzucony w main.cpp działa a jak wydzielę go do osobnej klasy to nie działa.
Działający kod:
main.cpp:
#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire = OneWire(D7);
DallasTemperature sensors = DallasTemperature(&oneWire);
void setup()
{
Serial.begin(115200);
sensors.begin();
}
void loop()
{
delay(100);
sensors.requestTemperatures();
Serial.print("Liczba czujników: ");
Serial.println(sensors.getDeviceCount());
Serial.println("");
for (int i = 0; i < sensors.getDeviceCount(); i++)
{
Serial.print("Czujnik ");
Serial.print(i + 1);
Serial.print(" temperatura: ");
Serial.print(sensors.getTempCByIndex(i));
Serial.println(" °C");
}
Serial.println("");
Serial.println("-----------------------");
Serial.println("");
delay(5000);
}
wynik:
Niedziałający kod:
main.cpp
#include <Arduino.h>
#include "TemperatureSensorController.cpp"
TemperatureSensorController temperatureSensorController;
void setup()
{
Serial.begin(115200);
}
void loop()
{
temperatureSensorController.printTemperatures();
delay(5000);
}
TemperatureSensorController.cpp
#include <DallasTemperature.h>
#ifndef MYCLASS_H
#define MYCLASS_H
class TemperatureSensorController
{
public:
TemperatureSensorController()
{
_oneWire = OneWire(D7);
_sensors = DallasTemperature(&_oneWire);
}
void printTemperatures()
{
delay(100);
_sensors.requestTemperatures();
Serial.print("Liczba czujników: ");
Serial.println(_sensors.getDeviceCount());
Serial.println("");
for (int i = 0; i < _sensors.getDeviceCount(); i++)
{
Serial.print("Czujnik ");
Serial.print(i + 1);
Serial.print(" temperatura: ");
Serial.print(_sensors.getTempCByIndex(i));
Serial.println(" °C");
}
Serial.println("");
Serial.println("-----------------------");
Serial.println("");
}
private:
OneWire _oneWire;
DallasTemperature _sensors;
};
#endif
Zastanawia mnie również czemu kod (w wersji gdy wszystko jest w main.cpp) nie działa poprawnie (nie wykrywa czujników - efekt jest taki sam jak w przypadku wydzielenia kodu do osobnej klasy) gdy usunę opóźnienie delay(100);
(linia 17)
Z góry dziękuję za pomoc.