m b
/
4180Lab1
Complete
Diff: main.cpp
- Revision:
- 0:8f5b2af5e1d5
- Child:
- 1:c5bc18044085
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Jan 30 02:21:04 2016 +0000 @@ -0,0 +1,93 @@ +/** + * This program reads in the state of the external DIP switch + * and outputs it to the LED using the MCP23S17 I/O expander chip + * + * @author(s): Gedeon Nyengele & Mike Bossi + * @date: 01/29/2016 + */ +#include "mbed.h" +#include "wdt.h" +#include "MCP23S17.h" + + + +DigitalOut LED_1(p21); +PwmOut LED_2(p22); +DigitalIn switch1(p23); +DigitalIn switch2(p24); +DigitalIn switch3(p25); +DigitalIn switch4(p26); + +// Create an SPI bus + SPI spi(p5, p6, p7); + + // Device opcode, as defined in datasheet + + + // Read switch state and show state on LED + // Assumption: Switch connected to GPB0 (MCP23S17 pin 1) + // LED connected to GPA0 (MCP23S17 pin 21) + +Watchdog wdt; +BusIn _pins(p28, p29, p30); + +int main() +{ + + _pins.mode(PullUp); + + + char Opcode = 0x40; + + MCP23S17 chip(spi, p20, Opcode); + + // Set PORT_A pins to be output pins + chip.direction(PORT_A, 0x00); + + // Set PORT_B pins to be input pins + chip.direction(PORT_B, 0xFF); + wdt.kick(5.0); + int switch_1 = 0; + int switch_2 = 0; + int switch_3 = 0; + + // int switch_4 = 0; + short lockUpCount = 0; + + switch3.mode(PullUp); + switch4.mode(PullUp); + // Delay for initial pullup to take effect + wait(.25); + // Setup Interrupt callback functions for a pb hit + + while(1){ + + + wdt.kick(); + + if(!switch4){ + lockUpCount++; + if (lockUpCount > 100) + while(1) {} + } + switch (_pins){ + case 0x0: + if(!switch1) + LED_1 = 1; + else + LED_1 = 0; + + switch_1 = switch1.read(); + switch_2 = switch2.read(); + switch_3 = switch3.read(); + + LED_2 = !switch_1*0.25 + !switch_2 * 0.40 + !switch_3*0.35; + + + } + + + } + +} +