Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Definicje stanów sondy
- #define SENSOR_WARMING 0x01
- #define SENSOR_READY 0x02
- class LambdaSensorMonitor {
- private:
- static const int FRAME_LENGTH = 35; // Standardowa długość ramki
- static const int STATUS_BYTE_POS = 6; // Pozycja bajtu statusu w ramce
- uint8_t dataBuffer[50]; // Bufor na dane (z zapasem)
- int bufferIndex = 0;
- public:
- // Inicjalizacja UART
- void begin(unsigned long baudRate) {
- Serial.begin(baudRate);
- }
- // Główna funkcja sprawdzająca stan sondy
- bool isSensorReady() {
- if (Serial.available() > 0) {
- // Czytaj dane do bufora
- while (Serial.available() > 0 && bufferIndex < sizeof(dataBuffer)) {
- dataBuffer[bufferIndex] = Serial.read();
- // Sprawdź czy mamy kompletną ramkę
- if (bufferIndex >= FRAME_LENGTH - 1) {
- // Sprawdź czy ramka zaczyna się od 0x4C
- if (dataBuffer[0] == 0x4C) {
- // Sprawdź bajt statusu
- uint8_t status = dataBuffer[STATUS_BYTE_POS];
- // Reset bufora
- bufferIndex = 0;
- // Zwróć true jeśli sonda jest gotowa
- if (status == SENSOR_READY) {
- return true;
- }
- // Jeśli status to WARMING, kontynuuj oczekiwanie
- else if (status == SENSOR_WARMING) {
- return false;
- }
- }
- // Jeśli ramka nie zaczyna się od 0x4C, przesuń bufor
- else {
- // Przesuń dane w buforze o jeden bajt w lewo
- for (int i = 0; i < bufferIndex - 1; i++) {
- dataBuffer[i] = dataBuffer[i + 1];
- }
- bufferIndex--;
- }
- } else {
- bufferIndex++;
- }
- }
- }
- // Jeśli nie ma nowych danych lub nie znaleziono poprawnej ramki
- return false;
- }
- // Funkcja oczekująca na rozgrzanie sondy
- bool waitForSensorReady(unsigned long timeout = 90000) { // timeout domyślnie 90 sekund
- unsigned long startTime = millis();
- while (millis() - startTime < timeout) {
- if (isSensorReady()) {
- return true;
- }
- // Krótkie opóźnienie aby nie obciążać procesora
- delay(10);
- }
- return false; // Timeout - sonda nie rozgrzała się w określonym czasie
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement