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

View File

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

View File

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

View File

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

View File

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

View File

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