Things used in this project

Hardware components:
A000066 iso both
Arduino UNO & Genuino UNO
×1
13632 01
Sparkfun Simblee BLE Breakout - RFD77101
×1
Texas Instruments FRAM
×1
Maxim DS3231 Temperature Compensated - Real Time Clock with integrated crystal
×1

Schematics

High-Level Schematic
system_diagram_8uX3BtLLci.graffle
System Diagram

Code

Sample Code for Master-Master ArbitrationC/C++
These functions make sure that one or the other microcontroller but not both can control the i2c bus.
// Example of how to use the functions
unsigned long FRAMread32(unsigned long address)
{  
  long four;
  long three;
  long two;
  long one;
  if(TakeTheBus()) {  // Request exclusive access to the bus 
    //Read the 4 bytes from memory.
    four = fram.read8(address);
    three = fram.read8(address + 1);
    two = fram.read8(address + 2);
    one = fram.read8(address + 3);
  }
  GiveUpTheBus();// Release exclusive access to the bus
  //Return the recomposed long by using bitshift.
  return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
}



// Function that takes control of the i2c bus
boolean TakeTheBus() 
{
  int timeout = 10000;  // We will wait ten seconds then give up
  unsigned long startListening = millis();
  //Serial.println("Simblee has the Bus");
  while(digitalRead(SQWPin)) {} // The Simblee will wait until the SQW pin goes low
  while (!digitalRead(TalkPin))  { // Only proceed once the TalkPin is high or we timeout
    if (millis() >= timeout + startListening) return 0;  // timed out
  }
  pinMode(TalkPin,OUTPUT);  // Change to output
  digitalWrite(TalkPin,LOW);  // Claim the bus
  
  return 1;           // We have it
}

// Function that gives up control of the i2c bus
boolean GiveUpTheBus() 
{
  
  pinMode(TalkPin,INPUT);  // Start listening again
  //Serial.println("Simblee gave up the Bus");
  
  return 1;
}

Credits

Img 20140919 080037
Chip McClelland

I build connected sensors.

Thanks to Pete Soper.

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Similar projects you might like

Playing smartphone games with a relay touch board
Easy
  • 118
  • 3

I played smartphone games with a relay touch board.

Red Balloon
Easy
  • 519
  • 9

Full instructions

This is a great project you can make with your kids to raise their awareness to air pollution.

Arduino/Genuino 101 BLE Thermometer With TMP102 and Blynk
Easy
  • 558
  • 10

Full instructions

Here is how to make an Arduino/Genuino 101 Bluetooth Low Energy thermometer with TMP102 and Blynk.

Simple Digital Arduino Clock Without RTC
Easy
  • 1,657
  • 8

Work in progress

A simple Arduino Uno Clock without RTC module for beginners.

Piezo Tunes
Easy
  • 276
  • 4

Full instructions

In this project, you're going to learn how you can play your own melody with a Piezo speaker, using code generated by Circuito.io

Simple Arduino-based thermometer
Easy
  • 408
  • 4

Full instructions

Cool thermometer using sugru and circuito.io

ProjectsCommunitiesContestsLiveJobsFree StoreBlogAdd projectSign up / Login
Respect project