parent
2312d73080
commit
2bc65517dd
@ -1,73 +1,145 @@
|
|||||||
#include <Wire.h>
|
#include <Wire_slave.h>
|
||||||
|
|
||||||
#define REGISTER_0 0x00
|
#define REGISTER_0 0x00
|
||||||
|
|
||||||
#define REGISTER_1 0x01
|
#define REGISTER_1 0x01
|
||||||
|
|
||||||
#define REGISTER_2 0x02
|
#define REGISTER_2 0x02
|
||||||
|
|
||||||
#define REGISTER_3 0x03
|
#define REGISTER_3 0x03
|
||||||
|
|
||||||
#define I2C_ADDRESS_SELF 0x4B
|
#define I2C_ADDRESS_SELF 0x4B
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int reg_0_value = 41151;
|
unsigned int reg_0_value = 41151;
|
||||||
unsigned int reg_1_value = 0;
|
|
||||||
unsigned int reg_2_value = 0;
|
unsigned int reg_1_value = 1;
|
||||||
unsigned int reg_3_value = 0;
|
|
||||||
|
unsigned int reg_2_value = 2;
|
||||||
|
|
||||||
|
unsigned int reg_3_value = 3;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t master_reg; // I2C master read register
|
uint8_t master_reg; // I2C master read register
|
||||||
|
|
||||||
uint8_t slave_reg; // I2C slave read register
|
uint8_t slave_reg; // I2C slave read register
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
Serial.begin(9600); //Begins Serial communication
|
Serial.begin(9600); //Begins Serial communication
|
||||||
|
|
||||||
Serial.println("Setup for sensor");
|
Serial.println("Setup for sensor");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Wire.begin(I2C_ADDRESS_SELF); // join i2c bus
|
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
|
Serial.begin(9600); // start serial for output
|
||||||
digitalWrite(A4, LOW);
|
|
||||||
digitalWrite(A5, LOW);
|
// digitalWrite(A4, LOW);
|
||||||
|
|
||||||
|
// digitalWrite(A5, LOW);
|
||||||
|
|
||||||
Wire.onRequest(requestEvent);
|
Wire.onRequest(requestEvent);
|
||||||
|
|
||||||
Wire.onReceive(receiveEvent);
|
Wire.onReceive(receiveEvent);
|
||||||
pinMode(LED_BUILTIN, OUTPUT);
|
|
||||||
|
pinMode(PC13, OUTPUT);
|
||||||
|
|
||||||
Serial.println("Starting");
|
Serial.println("Starting");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Serial.println("Read sensor value");
|
Serial.println("Read sensor value");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
reg_0_value = 1; // set register 0 value to the 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
|
reg_1_value += 1; // increment a count of how many values read
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void receiveEvent(int bytes) {
|
void receiveEvent(int bytes) {
|
||||||
|
|
||||||
// Slave reads the first byte to determine which register is concerned
|
// Slave reads the first byte to determine which register is concerned
|
||||||
|
|
||||||
slave_reg = Wire.read();
|
slave_reg = Wire.read();
|
||||||
|
|
||||||
Serial.print("Slave read register ");
|
Serial.print("Slave read register ");
|
||||||
|
|
||||||
Serial.println(slave_reg);
|
Serial.println(slave_reg);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void requestEvent() {
|
void requestEvent() {
|
||||||
|
|
||||||
// Slave uses the the register variable to know what to send back
|
// Slave uses the the register variable to know what to send back
|
||||||
digitalWrite(LED_BUILTIN, HIGH);
|
|
||||||
|
digitalWrite(PC13, HIGH);
|
||||||
|
|
||||||
if (slave_reg == REGISTER_0) {
|
if (slave_reg == REGISTER_0) {
|
||||||
|
|
||||||
Wire.write((uint8_t *)®_0_value, sizeof(reg_0_value));
|
Wire.write((uint8_t *)®_0_value, sizeof(reg_0_value));
|
||||||
|
|
||||||
Serial.print("Slave writing value ");
|
Serial.print("Slave writing value ");
|
||||||
|
|
||||||
Serial.println(reg_0_value);
|
Serial.println(reg_0_value);
|
||||||
|
|
||||||
} else if (slave_reg == REGISTER_1) {
|
} else if (slave_reg == REGISTER_1) {
|
||||||
|
|
||||||
Wire.write((uint8_t *)®_1_value, sizeof(reg_1_value));
|
Wire.write((uint8_t *)®_1_value, sizeof(reg_1_value));
|
||||||
|
|
||||||
Serial.print("Slave writing value ");
|
Serial.print("Slave writing value ");
|
||||||
|
|
||||||
Serial.println(reg_1_value);
|
Serial.println(reg_1_value);
|
||||||
|
|
||||||
} else if (slave_reg == REGISTER_2) {
|
} else if (slave_reg == REGISTER_2) {
|
||||||
|
|
||||||
Wire.write((uint8_t *)®_2_value, sizeof(reg_2_value));
|
Wire.write((uint8_t *)®_2_value, sizeof(reg_2_value));
|
||||||
|
|
||||||
Serial.print("Slave writing value ");
|
Serial.print("Slave writing value ");
|
||||||
|
|
||||||
Serial.println(reg_2_value);
|
Serial.println(reg_2_value);
|
||||||
|
|
||||||
} else if (slave_reg == REGISTER_3) {
|
} else if (slave_reg == REGISTER_3) {
|
||||||
|
|
||||||
Wire.write((uint8_t *)®_3_value, sizeof(reg_3_value));
|
Wire.write((uint8_t *)®_3_value, sizeof(reg_3_value));
|
||||||
|
|
||||||
Serial.print("Slave writing value ");
|
Serial.print("Slave writing value ");
|
||||||
|
|
||||||
Serial.println(reg_3_value);
|
Serial.println(reg_3_value);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
Serial.println("Slave unknown register");
|
Serial.println("Slave unknown register");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(50);
|
delay(50);
|
||||||
digitalWrite(LED_BUILTIN, LOW);
|
|
||||||
|
digitalWrite(PC13, LOW);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in new issue