Add I2CSlave to ov580 master.

Dependencies:   MorseGenerator2

Revision:
1:ffffa383ba7e
Parent:
0:605fe136b7ea
Child:
2:afc300c4f8e4
--- a/main.cpp	Fri Oct 19 01:51:42 2018 +0000
+++ b/main.cpp	Fri Oct 19 01:54:34 2018 +0000
@@ -3,7 +3,7 @@
 /*
 FEATURE REQUIREMENTS
 
-- I2C write occurs on 
+- I2C write occurs on
 
 -Reoccuring enable from app that will prevent the emitters from remaining
 on if the app crashes and a turn off command isn't sent
@@ -24,7 +24,7 @@
                                     0x10        Flood on
                                     0x11        Flood / Dot on
 
-0x01        Dot fault               Read from LM36011        
+0x01        Dot fault               Read from LM36011
 
 0x02        Flood Fault             Read from LM36011
 
@@ -106,31 +106,92 @@
 char flashBrightness_flood[2] = {brightness_reg,level_flood_max};
 
 //create interupts
-InterruptIn strobe_0(p23);  
-InterruptIn strobe_1(p24);  
+InterruptIn strobe_0(p23);
+InterruptIn strobe_1(p24);
 
 // i2c declarations
 I2C flood_I2C(flood_sda,flood_scl);
 I2C dot_I2C(dot_sda,dot_scl);
 I2CSlave ov_I2C(ov580_sda,ov580_scl);
 
+// functions
+void lightsOn()
+{
+    // set on true if stacked error isn't present
+    if(in_app) {
+
+        if(!pulsed && dot_on) {
+            // set driver current
+            dot_I2C.write(LM36011_addr, lmInit, 2, false);
+            wait_us(2);
+        } else if (pulsed && flip) {
+            dot_I2C.write(LM36011_addr, lmInit, 2, false);
+            wait_us(2);
+        } else {
+            dot_I2C.write(LM36011_addr, lmOff, 2, false);
+            wait_us(2);
+        }
+
+        if(!pulsed && flood_on) {
+            flood_I2C.write(LM36011_addr, lmInit, 2, false);
+            wait_us(2);
+        } else if (pulsed && !flip) {
+            flood_I2C.write(LM36011_addr, lmInit, 2, false);
+            wait_us(2);
+        } else {
+            flood_I2C.write(LM36011_addr, lmOff, 2, false);
+            wait_us(2);
+        }
+    }
+}
+
+void stack_check()
+{
+    // check strobe 1 for high, and if high set stacked_error
+    stacked_error = strobe_1.read();
+    if(stacked_error) {
+        stacked_counter++;
+    } else {
+        in_app = false;
+        stacked_counter = 0;
+    }
+    if(stacked_counter > 30) {
+        in_app = true;
+    }
+    flood_on = pwm_0;
+    dot_on = pwm_1;
+    if(flood_on && dot_on) {
+        pulsed = true;
+
+    } else {
+        pulsed = false;
+    }
+
+    flip = !flip;
+}
+
 // main() runs in its own thread in the OS
-int main() {
-    
+int main()
+{
+
     // set I2C Frequency to 400kHz
     flood_I2C.frequency(400000);
     dot_I2C.frequency(400000);
-    
+
     // write safety
     flood_I2C.write(LM36011_addr,lmSafety,2,false);
     dot_I2C.write(LM36011_addr,lmSafety,2,false);
     
-    // turn on emitters
-    flood_I2C.write(LM36011_addr,lmInit,2,false);
-    dot_I2C.write(LM36011_addr,lmInit,2,false);
-    
+    // write brightness
+    flood_I2C.write(LM36011_addr,flashBrightness_flood,2,false);
+    dot_I2C.write(LM36011_addr,flashBrightness_dot,2,false);    
+
+    // set interrupts
+    strobe_0.fall(lightsOn);
+    strobe_0.rise(stack_check);
+
     while (true) {
-        
+
         green = !green;
         wait(0.5);
     }