From 3eeaa43b3d235b6801b88280a3a6348034f32dd2 Mon Sep 17 00:00:00 2001 From: Wesley Hofman Date: Wed, 17 Sep 2025 01:43:19 +0200 Subject: [PATCH] Initial Commit --- sencure.ino | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 sencure.ino diff --git a/sencure.ino b/sencure.ino new file mode 100644 index 0000000..8fdc796 --- /dev/null +++ b/sencure.ino @@ -0,0 +1,123 @@ +#include + +const int deviceAddress = 0x68; // I2C address of the device (change as needed) +const uint8_t relay1 = 2; +const uint8_t relay2 = 3; +const uint8_t oe = 5; +const uint8_t d6 = 6; // Define pin D6 +bool actionPerformed = false; // Flag to track if the action has been performed + +// Function to transmit 16-bit data in little-endian format +void transmitData(uint8_t registerAddress, uint16_t data) { + Wire.beginTransmission(deviceAddress); + Wire.write(registerAddress); // Send the register address + Wire.write(data & 0xFF); // Send the low byte (LSB) + Wire.write((data >> 8) & 0xFF); // Send the high byte (MSB) + Wire.endTransmission(); +} + +// Function to read back data from the register +uint16_t readData(uint8_t registerAddress) { + uint16_t receivedData = 0; + + // First, send the register address to read from + Wire.beginTransmission(deviceAddress); + Wire.write(registerAddress); // Send the register address + Wire.endTransmission(); + if (Wire.endTransmission() != 0) { + Serial.println("Device not found"); + return 0; // Return 0 or some error code +} + + // Now request 2 bytes from the device + Wire.requestFrom(deviceAddress, 2); + if (Wire.available() == 2) { + receivedData |= Wire.read(); // Read low byte (LSB) + receivedData |= Wire.read() << 8; // Read high byte (MSB) + } + return receivedData; +} + +void setup() { + Serial.begin(9600); + Wire.begin(); // Initialize I2C + pinMode(relay1,OUTPUT); + pinMode(relay2,OUTPUT); + pinMode(d6, INPUT); // Set D6 as input + + for(int i = 8; i <= 13; i++) + { + pinMode(i,OUTPUT); + digitalWrite(i,LOW); + } + pinMode(oe,OUTPUT); + digitalWrite(relay1,LOW); + digitalWrite(relay2,LOW); + digitalWrite(oe,HIGH); + +} + +void printHex(uint16_t value) { + Serial.print("0x"); + if (value < 0x10) { + Serial.print("000"); + } else if (value < 0x100) { + Serial.print("00"); + } else if (value < 0x1000) { + Serial.print("0"); + } + Serial.println(value, HEX); // Print the value in hexadecimal +} + +unsigned long lastDebounceTime = 0; // Last time the pin state changed +unsigned long debounceDelay = 50; // Debounce delay in milliseconds +int lastD6State = LOW; // Last stable state of D6 +int currentD6State; // Current state of D6 + +void loop() { + // Read the current state of D6 + int reading = digitalRead(d6); + + // Check if the state has changed + if (reading != lastD6State) { + // Reset the debounce timer + lastDebounceTime = millis(); + } + + // If the state has been stable for the debounce delay, update the state + if ((millis() - lastDebounceTime) > debounceDelay) { + // Only proceed if the state has changed + if (reading != currentD6State) { + currentD6State = reading; + + // Only act if the new state is HIGH and the action hasn't been performed yet + if (currentD6State == HIGH && !actionPerformed) { + uint8_t registerAddress = 0xBF; + uint16_t dataToSend = 0x0000; + + // Transmit the data + transmitData(registerAddress, dataToSend); // Transmit data + // Read back data + uint16_t receivedData = readData(registerAddress); // Read back data + + // Use the method to print received data in hexadecimal format + Serial.println("Received data : "); + printHex(receivedData); // Print formatted received data + Serial.println(); // New line for better readability + + // Set the action performed flag to true + actionPerformed = true; + } + } + } + + // If the state is LOW, reset the action performed flag + if (currentD6State == LOW) { + actionPerformed = false; + } + + // Update the last stable state + lastD6State = reading; +} + + \ No newline at end of file