// sketch.ino
// รันบน: https://wokwi.com/stm32 (โปรเจกต์ STM32 Blue Pill, STM32 Arduino Core)
#include <string.h> // สำหรับฟังก์ชันจัดการสตริง เช่น strlen, memcpy
#include <stdint.h> // สำหรับชนิดข้อมูลจำนวนเต็มขนาดคงที่ เช่น uint8_t
static const uint8_t KEY[] = { 0x5A, 0x3C, 0x91, 0x0E };
void xor_cipher(uint8_t *data, uint16_t len, const uint8_t *key, uint16_t klen) {
for (uint16_t i = 0; i < len; i++) {
data[i] ^= key[i % klen];
}
}
void print_hex(uint8_t *buf, uint16_t len) {
for (uint16_t i = 0; i < len; i++) {
if (buf[i] < 0x10) Serial.print("0");
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println();
}
void setup() {
Serial.begin(115200); // Wokwi แสดงผลผ่าน Serial Monitor ของโปรเจกต์
}
void loop() {
char msg[] = "VALVE_OPEN:07";
uint16_t len = (uint16_t)strlen(msg);
uint8_t buf[32];
memcpy(buf, msg, len);
Serial.print("ก่อนเข้ารหัส: ");
Serial.println(msg);
xor_cipher(buf, len, KEY, sizeof(KEY)); // เข้ารหัสก่อนส่งออกช่องสัญญาณ
Serial.print("หลังเข้ารหัส (HEX): ");
print_hex(buf, len);
delay(2000);
}