vizit support

This commit is contained in:
Svante Kaiser 2023-12-14 16:15:23 +03:00
parent a79fbb1ee5
commit ae46832d88
6 changed files with 81 additions and 35 deletions

View File

@ -12,23 +12,26 @@ int previousData = 0;
int dataLength = 0;
int signalDuration = 0;
int flat = 0;
void resetCounters() {
countZeros = 0;
countOnes = 0;
previousData = 0;
dataLength = 0;
dataLength = 1;
signalDuration = 0;
}
void writeState(char* message) {
println(message);
//println(message);
publishToMQTT(STATE_MQTT_TOPIC, message);
}
void receiveData(int data) {
void receiveDigit(int data) {
if (data != previousData) {
if (previousData == HIGH) {
//println("AAAA ", dataLength, " ", signalDuration);
dataLength++;
}
signalDuration = 0;
@ -50,7 +53,7 @@ void changeState(State state, bool resetCountersFlag=true) {
ledTurnOn();
writeState("connected");
break;
case RECEIVING_DATA:
case RECEIVING_FIRST_DIGIT:
writeState("receiving data");
break;
}
@ -59,13 +62,24 @@ void changeState(State state, bool resetCountersFlag=true) {
resetCounters();
}
void flatReceived() {
int flat = dataLength/2;
void firstDigitReceived() {
println("| 1 data length: ", dataLength);
flat = dataLength*10;
}
if (flat < 1)
return;
void secondDigitReceived() {
if (dataLength == 11) {
dataLength = 1;
}
println("| data length: ", dataLength);
flat += dataLength;
flat -= 1;
if (flat > 100 && flat < 110) {
flat -= 100;
}
println("| 2 data length: ", dataLength);
println("| flat: ", flat);
publishToMQTT(FLAT_NUMBER_MQTT_TOPIC, flat);
}
@ -87,24 +101,43 @@ void updateStateMachine(int data) {
}
} else if (data == HIGH) {
if (countZeros >= INITIALIZING_CALL_THRESHOLD) {
changeState(RECEIVING_DATA);
changeState(RECEIVING_FIRST_DIGIT);
}
}
break;
case RECEIVING_DATA:
receiveData(data);
case RECEIVING_FIRST_DIGIT:
receiveDigit(data);
if (data == LOW) {
countOnes = 0;
countZeros++;
if (countZeros >= DATA_RECEIVED_THESHOLD) {
flatReceived();
changeState(DATA_RECEIVED);
}
} else if (data == HIGH) {
countZeros = 0;
countOnes++;
if (countOnes >= DATA_RECEIVED_THESHOLD) {
firstDigitReceived();
changeState(RECEIVING_SECOND_DIGIT);
}
if (countOnes >= CONNECTED_THRESHOLD) {
changeState(CONNECTED);
}
}
break;
case RECEIVING_SECOND_DIGIT:
receiveDigit(data);
if (data == LOW) {
countOnes = 0;
countZeros++;
} else if (data == HIGH) {
countZeros = 0;
countOnes++;
if (countOnes >= DATA_RECEIVED_THESHOLD) {
secondDigitReceived();
changeState(DATA_RECEIVED);
}
if (countOnes >= CONNECTED_THRESHOLD) {
changeState(CONNECTED);
}

View File

@ -5,14 +5,15 @@
#define CONNECTED_THRESHOLD 50000
#define NOT_CONNECTED_THRESHOLD 50000
#define INITIALIZING_CALL_THRESHOLD 15000
#define DATA_RECEIVED_THESHOLD 30000
#define INITIALIZING_CALL_THRESHOLD 45
#define DATA_RECEIVED_THESHOLD 5000
#define CALL_ENDED_THRESHOLD 10000
enum State {
NOT_CONNECTED,
CONNECTED,
RECEIVING_DATA,
RECEIVING_FIRST_DIGIT,
RECEIVING_SECOND_DIGIT,
DATA_RECEIVED,
CALL_ENDED
};

View File

@ -2,7 +2,7 @@
#include "config/config.h"
#include "infra/mqtt.h"
#include "infra/led.h"
#include "domain/stateMachineVizit.h"
#include "domain/stateMachine.h"
State currentState = NOT_CONNECTED;
int countZeros = 0;
@ -12,6 +12,8 @@ int previousData = 0;
int dataLength = 0;
int signalDuration = 0;
int flat = 0;
void resetCounters() {
countZeros = 0;
countOnes = 0;
@ -26,7 +28,7 @@ void writeState(char* message) {
publishToMQTT(STATE_MQTT_TOPIC, message);
}
void receiveDigit(int data) {
void receiveData(int data) {
if (data != previousData) {
if (previousData == HIGH) {
dataLength++;
@ -50,7 +52,7 @@ void changeState(State state, bool resetCountersFlag=true) {
ledTurnOn();
writeState("connected");
break;
case RECEIVING_FIRST_DIGIT:
case RECEIVING_DATA:
writeState("receiving data");
break;
}
@ -87,23 +89,24 @@ void updateStateMachine(int data) {
}
} else if (data == HIGH) {
if (countZeros >= INITIALIZING_CALL_THRESHOLD) {
changeState(RECEIVING_FIRST_DIGIT);
changeState(RECEIVING_DATA);
}
}
break;
case RECEIVING_FIRST_DIGIT:
receiveDigit(data);
case RECEIVING_DATA:
receiveData(data);
if (data == LOW) {
countOnes = 0;
countZeros++;
if (countZeros >= DATA_RECEIVED_THESHOLD) {
flatReceived();
changeState(DATA_RECEIVED);
}
} else if (data == HIGH) {
countZeros = 0;
countOnes++;
if (countOnes >= DATA_RECEIVED_THESHOLD) {
changeState(CONNECTED);
}
if (countOnes >= CONNECTED_THRESHOLD) {
changeState(CONNECTED);
}

View File

@ -5,15 +5,14 @@
#define CONNECTED_THRESHOLD 50000
#define NOT_CONNECTED_THRESHOLD 50000
#define INITIALIZING_CALL_THRESHOLD 45
#define DATA_RECEIVED_THESHOLD 250
#define INITIALIZING_CALL_THRESHOLD 15000
#define DATA_RECEIVED_THESHOLD 30000
#define CALL_ENDED_THRESHOLD 10000
enum State {
NOT_CONNECTED,
CONNECTED,
RECEIVING_FIRST_DIGIT,
RECEIVING_SECOND_DIGIT,
RECEIVING_DATA,
DATA_RECEIVED,
CALL_ENDED
};

View File

@ -57,7 +57,7 @@ void publishToMQTT(const char* topic, int message) {
char num_char[10];
sprintf(num_char, "%d", message);
mqttClient.publish(topic, 2, true, num_char);
mqttClient.publish(fullTopic, 2, true, num_char);
publishJSONToMQTT(topic, message);
}
@ -70,7 +70,7 @@ void publishToMQTT(const char* topic, float message) {
char num_char[10];
dtostrf(message, 1, 2, num_char); // Convert float to string
mqttClient.publish(topic, 2, true, num_char);
mqttClient.publish(fullTopic, 2, true, num_char);
publishJSONToMQTT(topic, message);
}

View File

@ -26,14 +26,24 @@ int data = 0;
bool flag = false;
void IRAM_ATTR one() {
flag = true;
}
void IRAM_ATTR zero() {
flag = false;
}
void setup() {
Serial.begin(115200);
WiFi.onEvent(WiFiEvent);
pinMode(DATA_PIN, INPUT);
pinMode(DATA_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
pinMode(DRY_CONT_PIN, OUTPUT);
attachInterrupt(DATA_PIN, one, RISING);
attachInterrupt(DATA_PIN, zero, FALLING);
digitalWrite(LED_PIN, HIGH);