takeone-joystick-esp8266/functions.ino
2025-07-13 16:10:06 +03:00

262 lines
6.0 KiB
C++

//=========================================================
// Serial
//=========================================================
// Question
//---------------------------------------------------------
String serial_question(String msg) {
Serial.print(msg + " : ");
while(!Serial.available());
msg = Serial.readStringUntil('\n');
while(Serial.available()) { Serial.read(); }
msg.trim();
Serial.println(msg);
return msg;
}
//=========================================================
// Server
//=========================================================
// Connect To Server
//---------------------------------------------------------
void server_connect() {
// If Connected Just Skip
if(tcpClient.connected()) { return; }
// Try To Connect To Server
while(!tcpClient.connect(scoreboard_server, atoi(scoreboard_port))) {
LED_TOGGLE;
delay(200);
}
// Stay On
LED_ON;
// Connection Established
Serial.println(MSG_TCP_CONNECTED);
}
//---------------------------------------------------------
// JSON Event Generator
//---------------------------------------------------------
String json_button_message(String buttonName) {
// Empty Space
JSON.clear();
// Device Name
JSON["device"] = joypad_identifier;
JSON["type"] = "score";
// JSON["cid"] = ESP.getChipId();
// JSON["mac"] = WiFi.macAddress();
// JSON["ipa"] = WiFi.localIP().toString();
// JSON["battery"] = analogRead(A0);
// JSON["signal"] = WiFi.RSSI();
JSON["button"] = buttonName;
// JSON["time"] = millis();
// JSON["time"] = ntp_print_time();
// String Data Buffer
String ouput;
// Print To Serial
serializeJson(JSON, ouput);
// Save Memory
JSON.clear();
// Return The String
return ouput;
}
//---------------------------------------------------------
// JSON Telemetry Generator
//---------------------------------------------------------
String json_telemetry_message() {
// Empty Space
JSON.clear();
// Device Name
JSON["device"] = joypad_identifier;
JSON["type"] = "telemetry";
JSON["signal"] = WiFi.RSSI();
JSON["battery"] = analogRead(A0);
JSON["mac"] = WiFi.macAddress();
JSON["time"] = ntp_print_time();
// String Data Buffer
String ouput;
// Print To Serial
serializeJson(JSON, ouput);
// Save Memory
JSON.clear();
// Return The String
return ouput;
}
//---------------------------------------------------------
// JSON Telemetry Generator
//---------------------------------------------------------
void read_buttons() {
// TopLeft - Send Message
if(btnRedOne.pressed()) {
String x = json_button_message("RED1");
Serial.println(x);
tcpClient.print(x);
delay(150);
}
// BottomLeft - Send Message
if(btnRedTwo.pressed()) {
String x = json_button_message("RED2");
Serial.println(x);
tcpClient.print(x);
delay(150);
}
// TopRight - Send Message
if(btnBlueOne.pressed()) {
String x = json_button_message("BLU1");
Serial.println(x);
tcpClient.print(x);
delay(150);
}
// TopRight - Send Message
if(btnBlueTwo.pressed()) {
String x = json_button_message("BLU2");
Serial.println(x);
tcpClient.print(x);
delay(150);
}
}
//---------------------------------------------------------
// JSON Telemetry Generator
//---------------------------------------------------------
void buzz() {
digitalWrite(_motor_pin, HIGH);
delay(250);
digitalWrite(_motor_pin, LOW);
}
//---------------------------------------------------------
// JSON Telemetry Generator
//---------------------------------------------------------
void send_via_serial() {
// Sending TCP Data
if(Serial.available()) {
String msg = Serial.readStringUntil('\n');
while(Serial.available()) { Serial.read(); }
msg.trim();
// Create JSON Object
JSON["type"] = "cmd";
JSON["header"] = "point";
JSON["body"] = msg;
// Move The Message To String Variable
serializeJson(JSON, msg);
// Sending Data Out
Serial.println(MSG_TCP_SEND + String(" : ") + msg);
tcpClient.print(msg);
// Empty Data
JSON.clear();
}
}
//---------------------------------------------------------
// JSON Telemetry Generator
//---------------------------------------------------------
void read_tcp() {
// Received TCP Data
if(tcpClient.available()) {
String x = tcpClient.readStringUntil('\n');
while(tcpClient.available()) { tcpClient.read(); }
x.trim();
Serial.print(" -> tcp signal in : ");
Serial.println(x);
// Clear JSON
JSON.clear();
// Deserialize the JSON document
DeserializationError error = deserializeJson(JSON, x);
// Test if parsing succeeds
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
// Read Message Type
String mType = JSON["type"];
// Read Command
String command = JSON["command"];
// Read BuZZer
if(command == "buzz") {
buzz();
}
// Clear JSON
JSON.clear();
}
}
//---------------------------------------------------------
// JSON Telemetry Generator
//---------------------------------------------------------
void send_keep_alive() {
// Keep Sending To Avoid Disconnection
if(millis() - timing >= 15000) {
// Buffer Data
String x = json_telemetry_message();
// Send Out Data
Serial.println(x);
tcpClient.print(x);
// Update Time Snap Shot
timing = millis();
}
}
//=========================================================
// END
//=========================================================