Complete

Dependencies:   mbed

Committer:
mikeb
Date:
Sat Jan 30 02:21:04 2016 +0000
Revision:
0:8f5b2af5e1d5
Child:
1:c5bc18044085
Combining Functions;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mikeb 0:8f5b2af5e1d5 1 /**
mikeb 0:8f5b2af5e1d5 2 * This program reads in the state of the external DIP switch
mikeb 0:8f5b2af5e1d5 3 * and outputs it to the LED using the MCP23S17 I/O expander chip
mikeb 0:8f5b2af5e1d5 4 *
mikeb 0:8f5b2af5e1d5 5 * @author(s): Gedeon Nyengele & Mike Bossi
mikeb 0:8f5b2af5e1d5 6 * @date: 01/29/2016
mikeb 0:8f5b2af5e1d5 7 */
mikeb 0:8f5b2af5e1d5 8 #include "mbed.h"
mikeb 0:8f5b2af5e1d5 9 #include "wdt.h"
mikeb 0:8f5b2af5e1d5 10 #include "MCP23S17.h"
mikeb 0:8f5b2af5e1d5 11
mikeb 0:8f5b2af5e1d5 12
mikeb 0:8f5b2af5e1d5 13
mikeb 0:8f5b2af5e1d5 14 DigitalOut LED_1(p21);
mikeb 0:8f5b2af5e1d5 15 PwmOut LED_2(p22);
mikeb 0:8f5b2af5e1d5 16 DigitalIn switch1(p23);
mikeb 0:8f5b2af5e1d5 17 DigitalIn switch2(p24);
mikeb 0:8f5b2af5e1d5 18 DigitalIn switch3(p25);
mikeb 0:8f5b2af5e1d5 19 DigitalIn switch4(p26);
mikeb 0:8f5b2af5e1d5 20
mikeb 0:8f5b2af5e1d5 21 // Create an SPI bus
mikeb 0:8f5b2af5e1d5 22 SPI spi(p5, p6, p7);
mikeb 0:8f5b2af5e1d5 23
mikeb 0:8f5b2af5e1d5 24 // Device opcode, as defined in datasheet
mikeb 0:8f5b2af5e1d5 25
mikeb 0:8f5b2af5e1d5 26
mikeb 0:8f5b2af5e1d5 27 // Read switch state and show state on LED
mikeb 0:8f5b2af5e1d5 28 // Assumption: Switch connected to GPB0 (MCP23S17 pin 1)
mikeb 0:8f5b2af5e1d5 29 // LED connected to GPA0 (MCP23S17 pin 21)
mikeb 0:8f5b2af5e1d5 30
mikeb 0:8f5b2af5e1d5 31 Watchdog wdt;
mikeb 0:8f5b2af5e1d5 32 BusIn _pins(p28, p29, p30);
mikeb 0:8f5b2af5e1d5 33
mikeb 0:8f5b2af5e1d5 34 int main()
mikeb 0:8f5b2af5e1d5 35 {
mikeb 0:8f5b2af5e1d5 36
mikeb 0:8f5b2af5e1d5 37 _pins.mode(PullUp);
mikeb 0:8f5b2af5e1d5 38
mikeb 0:8f5b2af5e1d5 39
mikeb 0:8f5b2af5e1d5 40 char Opcode = 0x40;
mikeb 0:8f5b2af5e1d5 41
mikeb 0:8f5b2af5e1d5 42 MCP23S17 chip(spi, p20, Opcode);
mikeb 0:8f5b2af5e1d5 43
mikeb 0:8f5b2af5e1d5 44 // Set PORT_A pins to be output pins
mikeb 0:8f5b2af5e1d5 45 chip.direction(PORT_A, 0x00);
mikeb 0:8f5b2af5e1d5 46
mikeb 0:8f5b2af5e1d5 47 // Set PORT_B pins to be input pins
mikeb 0:8f5b2af5e1d5 48 chip.direction(PORT_B, 0xFF);
mikeb 0:8f5b2af5e1d5 49 wdt.kick(5.0);
mikeb 0:8f5b2af5e1d5 50 int switch_1 = 0;
mikeb 0:8f5b2af5e1d5 51 int switch_2 = 0;
mikeb 0:8f5b2af5e1d5 52 int switch_3 = 0;
mikeb 0:8f5b2af5e1d5 53
mikeb 0:8f5b2af5e1d5 54 // int switch_4 = 0;
mikeb 0:8f5b2af5e1d5 55 short lockUpCount = 0;
mikeb 0:8f5b2af5e1d5 56
mikeb 0:8f5b2af5e1d5 57 switch3.mode(PullUp);
mikeb 0:8f5b2af5e1d5 58 switch4.mode(PullUp);
mikeb 0:8f5b2af5e1d5 59 // Delay for initial pullup to take effect
mikeb 0:8f5b2af5e1d5 60 wait(.25);
mikeb 0:8f5b2af5e1d5 61 // Setup Interrupt callback functions for a pb hit
mikeb 0:8f5b2af5e1d5 62
mikeb 0:8f5b2af5e1d5 63 while(1){
mikeb 0:8f5b2af5e1d5 64
mikeb 0:8f5b2af5e1d5 65
mikeb 0:8f5b2af5e1d5 66 wdt.kick();
mikeb 0:8f5b2af5e1d5 67
mikeb 0:8f5b2af5e1d5 68 if(!switch4){
mikeb 0:8f5b2af5e1d5 69 lockUpCount++;
mikeb 0:8f5b2af5e1d5 70 if (lockUpCount > 100)
mikeb 0:8f5b2af5e1d5 71 while(1) {}
mikeb 0:8f5b2af5e1d5 72 }
mikeb 0:8f5b2af5e1d5 73 switch (_pins){
mikeb 0:8f5b2af5e1d5 74 case 0x0:
mikeb 0:8f5b2af5e1d5 75 if(!switch1)
mikeb 0:8f5b2af5e1d5 76 LED_1 = 1;
mikeb 0:8f5b2af5e1d5 77 else
mikeb 0:8f5b2af5e1d5 78 LED_1 = 0;
mikeb 0:8f5b2af5e1d5 79
mikeb 0:8f5b2af5e1d5 80 switch_1 = switch1.read();
mikeb 0:8f5b2af5e1d5 81 switch_2 = switch2.read();
mikeb 0:8f5b2af5e1d5 82 switch_3 = switch3.read();
mikeb 0:8f5b2af5e1d5 83
mikeb 0:8f5b2af5e1d5 84 LED_2 = !switch_1*0.25 + !switch_2 * 0.40 + !switch_3*0.35;
mikeb 0:8f5b2af5e1d5 85
mikeb 0:8f5b2af5e1d5 86
mikeb 0:8f5b2af5e1d5 87 }
mikeb 0:8f5b2af5e1d5 88
mikeb 0:8f5b2af5e1d5 89
mikeb 0:8f5b2af5e1d5 90 }
mikeb 0:8f5b2af5e1d5 91
mikeb 0:8f5b2af5e1d5 92 }
mikeb 0:8f5b2af5e1d5 93