From 6c1ad80e86addddc7bca6d96e27ccacba4a440f3 Mon Sep 17 00:00:00 2001 From: damage Date: Sun, 11 May 2025 19:19:32 +0200 Subject: [PATCH] set address by GPIOs 11, 12, 13 --- rotator/rotator.ino | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/rotator/rotator.ino b/rotator/rotator.ino index 592ba17..9400203 100644 --- a/rotator/rotator.ino +++ b/rotator/rotator.ino @@ -1,10 +1,10 @@ #include -#define PIN_HEADING_WHITE PD3 -#define PIN_HEADING_RED PD6 +#define PIN_HEADING_WHITE 3 +#define PIN_HEADING_RED 5 -#define PIN_ALTITUDE_WHITE PD2 -#define PIN_ALTITUDE_RED PD5 +#define PIN_ALTITUDE_WHITE 2 +#define PIN_ALTITUDE_RED 4 #define VALUE_BUFFER 30 @@ -16,6 +16,9 @@ #define HEADING_HIGH_BIT 2 #define ALTITUDE_TRIGGER_BIT 4 #define ALTITUDE_HIGH_BIT 8 +#define PIN_ADDRESS_1 11 +#define PIN_ADDRESS_2 12 +#define PIN_ADDRESS_3 13 int lastClk = HIGH; @@ -92,18 +95,30 @@ void i2cRequest() { } } +uint8_t address = 0; void setup() { Serial.begin(115200); + // setup rotator GPIOs pinMode(PIN_HEADING_WHITE, INPUT_PULLUP); pinMode(PIN_HEADING_RED, INPUT_PULLUP); pinMode(PIN_ALTITUDE_WHITE, INPUT_PULLUP); pinMode(PIN_ALTITUDE_RED, INPUT_PULLUP); + // setup address selector GPIOs + pinMode(PIN_ADDRESS_1, INPUT_PULLUP); + pinMode(PIN_ADDRESS_2, INPUT_PULLUP); + pinMode(PIN_ADDRESS_3, INPUT_PULLUP); + + // calculate address by LOW GPIOs + address = digitalRead(PIN_ADDRESS_1) == LOW; + address |= (digitalRead(PIN_ADDRESS_2) == LOW) << 1; + address |= (digitalRead(PIN_ADDRESS_3) == LOW) << 2; + attachInterrupt(digitalPinToInterrupt(PIN_ALTITUDE_WHITE), altitudeFalling, FALLING); attachInterrupt(digitalPinToInterrupt(PIN_HEADING_WHITE), headingFalling, FALLING); - Wire.begin(0x01); + Wire.begin(address); Wire.onRequest(i2cRequest); }