Jason Chang
/
9v1
Add I2CSlave to ov580 master.
Diff: main.cpp
- Revision:
- 1:ffffa383ba7e
- Parent:
- 0:605fe136b7ea
- Child:
- 2:afc300c4f8e4
diff -r 605fe136b7ea -r ffffa383ba7e main.cpp --- 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); }