From 2bc65517dda275631462cbc42a07348ff641ffcb Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sat, 25 Jan 2020 20:43:43 -0500 Subject: [PATCH] Working with STM32 now with LED on PC13 --- arduino/i2c_slave_with_sensor_reading.ino | 92 ++++++++++++++++++++--- 1 file changed, 82 insertions(+), 10 deletions(-) diff --git a/arduino/i2c_slave_with_sensor_reading.ino b/arduino/i2c_slave_with_sensor_reading.ino index c3e97ae1..a820baf3 100644 --- a/arduino/i2c_slave_with_sensor_reading.ino +++ b/arduino/i2c_slave_with_sensor_reading.ino @@ -1,73 +1,145 @@ -#include +#include + #define REGISTER_0 0x00 + #define REGISTER_1 0x01 + #define REGISTER_2 0x02 + #define REGISTER_3 0x03 + #define I2C_ADDRESS_SELF 0x4B + + unsigned int reg_0_value = 41151; -unsigned int reg_1_value = 0; -unsigned int reg_2_value = 0; -unsigned int reg_3_value = 0; + +unsigned int reg_1_value = 1; + +unsigned int reg_2_value = 2; + +unsigned int reg_3_value = 3; + + uint8_t master_reg; // I2C master read register + uint8_t slave_reg; // I2C slave read register + + void setup() + { + Serial.begin(9600); //Begins Serial communication + Serial.println("Setup for sensor"); + + Wire.begin(I2C_ADDRESS_SELF); // join i2c bus - Wire.setClock(400000); // set I2C clock for full speed + +// Wire.setClock(400000); // set I2C clock for full speed + Serial.begin(9600); // start serial for output - digitalWrite(A4, LOW); - digitalWrite(A5, LOW); + +// digitalWrite(A4, LOW); + +// digitalWrite(A5, LOW); + Wire.onRequest(requestEvent); + Wire.onReceive(receiveEvent); - pinMode(LED_BUILTIN, OUTPUT); + + pinMode(PC13, OUTPUT); + Serial.println("Starting"); + } + + void loop() + { + delay(1000); + + Serial.println("Read sensor value"); + + reg_0_value = 1; // set register 0 value to the sensor value + reg_1_value += 1; // increment a count of how many values read + } + + void receiveEvent(int bytes) { + // Slave reads the first byte to determine which register is concerned + slave_reg = Wire.read(); + Serial.print("Slave read register "); + Serial.println(slave_reg); + } + + void requestEvent() { + // Slave uses the the register variable to know what to send back - digitalWrite(LED_BUILTIN, HIGH); + + digitalWrite(PC13, HIGH); + if (slave_reg == REGISTER_0) { + Wire.write((uint8_t *)®_0_value, sizeof(reg_0_value)); + Serial.print("Slave writing value "); + Serial.println(reg_0_value); + } else if (slave_reg == REGISTER_1) { + Wire.write((uint8_t *)®_1_value, sizeof(reg_1_value)); + Serial.print("Slave writing value "); + Serial.println(reg_1_value); + } else if (slave_reg == REGISTER_2) { + Wire.write((uint8_t *)®_2_value, sizeof(reg_2_value)); + Serial.print("Slave writing value "); + Serial.println(reg_2_value); + } else if (slave_reg == REGISTER_3) { + Wire.write((uint8_t *)®_3_value, sizeof(reg_3_value)); + Serial.print("Slave writing value "); + Serial.println(reg_3_value); + } else { + Serial.println("Slave unknown register"); + } + delay(50); - digitalWrite(LED_BUILTIN, LOW); + + digitalWrite(PC13, LOW); + }