Dependencies:   MCP23S17 PinDetect mbed

Committer:
jderemer3
Date:
Wed Mar 01 16:36:55 2017 +0000
Revision:
0:9dc33481ce1b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jderemer3 0:9dc33481ce1b 1 // ECE 4180
jderemer3 0:9dc33481ce1b 2 // Lab/Project 1
jderemer3 0:9dc33481ce1b 3 // Jeremy M. Deremer
jderemer3 0:9dc33481ce1b 4 // Due 26 January, 2017
jderemer3 0:9dc33481ce1b 5
jderemer3 0:9dc33481ce1b 6 #include "mbed.h"
jderemer3 0:9dc33481ce1b 7 #include "PinDetect.h"
jderemer3 0:9dc33481ce1b 8 #include "LEDColor.h"
jderemer3 0:9dc33481ce1b 9 #include "RGBLed.h"
jderemer3 0:9dc33481ce1b 10 #include "MCP23S17.h"
jderemer3 0:9dc33481ce1b 11 #include "Nav_Switch.h"
jderemer3 0:9dc33481ce1b 12
jderemer3 0:9dc33481ce1b 13 PwmOut led(p24);
jderemer3 0:9dc33481ce1b 14
jderemer3 0:9dc33481ce1b 15 // Instantiate pushbuttons on analog pins
jderemer3 0:9dc33481ce1b 16 PinDetect pb1(p17);
jderemer3 0:9dc33481ce1b 17 PinDetect pb2(p18);
jderemer3 0:9dc33481ce1b 18 PinDetect pb3(p19);
jderemer3 0:9dc33481ce1b 19
jderemer3 0:9dc33481ce1b 20 // Instantiate RGBLed and allocate default colors
jderemer3 0:9dc33481ce1b 21 //RGBLed myRGBled(p23,p22,p21); //RGB PWM pins
jderemer3 0:9dc33481ce1b 22 //const LEDColor off(0.0,0.0,0.0);
jderemer3 0:9dc33481ce1b 23 //const LEDColor blue(0.0,0.0,1.0);
jderemer3 0:9dc33481ce1b 24
jderemer3 0:9dc33481ce1b 25 // Instantiate I/O Expander
jderemer3 0:9dc33481ce1b 26 // Create SPI bus
jderemer3 0:9dc33481ce1b 27 SPI spi(p5, p6, p7);
jderemer3 0:9dc33481ce1b 28 char Opcode = 0x40;
jderemer3 0:9dc33481ce1b 29 // Next create a MCP23S17
jderemer3 0:9dc33481ce1b 30 MCP23S17 chip = MCP23S17(spi, p20, Opcode);
jderemer3 0:9dc33481ce1b 31 DigitalOut led1(LED1); // mbed LED1 is used for test status display
jderemer3 0:9dc33481ce1b 32
jderemer3 0:9dc33481ce1b 33 // Instantiate Nav Joystick
jderemer3 0:9dc33481ce1b 34 Nav_Switch myNav(p15, p12, p13, p11, p8); //pin order on Sparkfun breakout
jderemer3 0:9dc33481ce1b 35
jderemer3 0:9dc33481ce1b 36 float inc = 0.1f;
jderemer3 0:9dc33481ce1b 37 float val = 0.5f;
jderemer3 0:9dc33481ce1b 38
jderemer3 0:9dc33481ce1b 39 // Callback routine is interrupt activated by a debounced pb1 hit
jderemer3 0:9dc33481ce1b 40 void pb1_hit_callback (void)
jderemer3 0:9dc33481ce1b 41 {
jderemer3 0:9dc33481ce1b 42 val = led.read();
jderemer3 0:9dc33481ce1b 43 if (val == 0.00f)
jderemer3 0:9dc33481ce1b 44 {
jderemer3 0:9dc33481ce1b 45 led.write(0.50f); // 50% duty cycle
jderemer3 0:9dc33481ce1b 46 }
jderemer3 0:9dc33481ce1b 47 else
jderemer3 0:9dc33481ce1b 48 {
jderemer3 0:9dc33481ce1b 49 led.write(0.00f); // 0% duty cycle
jderemer3 0:9dc33481ce1b 50 }
jderemer3 0:9dc33481ce1b 51 }
jderemer3 0:9dc33481ce1b 52
jderemer3 0:9dc33481ce1b 53 // Callback routine is interrupt activated by a debounced pb2 hit
jderemer3 0:9dc33481ce1b 54 void pb2_hit_callback (void)
jderemer3 0:9dc33481ce1b 55 {
jderemer3 0:9dc33481ce1b 56 // add brightness
jderemer3 0:9dc33481ce1b 57 val = led.read();
jderemer3 0:9dc33481ce1b 58 if (val < 1.00f)
jderemer3 0:9dc33481ce1b 59 {
jderemer3 0:9dc33481ce1b 60 val += inc;
jderemer3 0:9dc33481ce1b 61 led.write(val);
jderemer3 0:9dc33481ce1b 62 }
jderemer3 0:9dc33481ce1b 63 }
jderemer3 0:9dc33481ce1b 64
jderemer3 0:9dc33481ce1b 65 // Callback routine is interrupt activated by a debounced pb3 hit
jderemer3 0:9dc33481ce1b 66 void pb3_hit_callback (void)
jderemer3 0:9dc33481ce1b 67 {
jderemer3 0:9dc33481ce1b 68 // subtract brightness
jderemer3 0:9dc33481ce1b 69 val = led.read();
jderemer3 0:9dc33481ce1b 70 if (val > 0.0f)
jderemer3 0:9dc33481ce1b 71 {
jderemer3 0:9dc33481ce1b 72 val -= inc;
jderemer3 0:9dc33481ce1b 73 led.write(val);
jderemer3 0:9dc33481ce1b 74 }
jderemer3 0:9dc33481ce1b 75 }
jderemer3 0:9dc33481ce1b 76
jderemer3 0:9dc33481ce1b 77 int main() {
jderemer3 0:9dc33481ce1b 78
jderemer3 0:9dc33481ce1b 79 led.write(0.5f); // 50% duty cycle
jderemer3 0:9dc33481ce1b 80
jderemer3 0:9dc33481ce1b 81 // Use internal pullups for the three pushbuttons
jderemer3 0:9dc33481ce1b 82 pb1.mode(PullUp);
jderemer3 0:9dc33481ce1b 83 pb2.mode(PullUp);
jderemer3 0:9dc33481ce1b 84 pb3.mode(PullUp);
jderemer3 0:9dc33481ce1b 85 // Delay for initial pullup to take effect
jderemer3 0:9dc33481ce1b 86 wait(.01);
jderemer3 0:9dc33481ce1b 87 // Setup Interrupt callback functions for a pb hit
jderemer3 0:9dc33481ce1b 88 pb1.attach_deasserted(&pb1_hit_callback);
jderemer3 0:9dc33481ce1b 89 pb2.attach_deasserted(&pb2_hit_callback);
jderemer3 0:9dc33481ce1b 90 pb3.attach_deasserted(&pb3_hit_callback);
jderemer3 0:9dc33481ce1b 91 // Start sampling pb inputs using interrupts
jderemer3 0:9dc33481ce1b 92 pb1.setSampleFrequency();
jderemer3 0:9dc33481ce1b 93 pb2.setSampleFrequency();
jderemer3 0:9dc33481ce1b 94 pb3.setSampleFrequency();
jderemer3 0:9dc33481ce1b 95 // pushbuttons now setup and running
jderemer3 0:9dc33481ce1b 96
jderemer3 0:9dc33481ce1b 97 // Set all 8 Port A bits to output direction
jderemer3 0:9dc33481ce1b 98 chip.direction(PORT_A, 0x00);
jderemer3 0:9dc33481ce1b 99 // Set all 8 Port B bits to input direction
jderemer3 0:9dc33481ce1b 100 chip.direction(PORT_B, 0xFF);
jderemer3 0:9dc33481ce1b 101
jderemer3 0:9dc33481ce1b 102 while(1) // led flashing
jderemer3 0:9dc33481ce1b 103 {
jderemer3 0:9dc33481ce1b 104 // write 0xAA to MCP23S17 Port A
jderemer3 0:9dc33481ce1b 105 chip.write(PORT_A, 0xAA);
jderemer3 0:9dc33481ce1b 106
jderemer3 0:9dc33481ce1b 107 // read back value from MCP23S17 Port B and display B0 on mbed led1
jderemer3 0:9dc33481ce1b 108 if ((chip.read(PORT_B)& 0x01) == 0x01)
jderemer3 0:9dc33481ce1b 109 {
jderemer3 0:9dc33481ce1b 110 chip.write(PORT_A, 0x55);
jderemer3 0:9dc33481ce1b 111 }
jderemer3 0:9dc33481ce1b 112
jderemer3 0:9dc33481ce1b 113 //chip.write(PORT_A, (chip.read(PORT_B)& 0x01));
jderemer3 0:9dc33481ce1b 114
jderemer3 0:9dc33481ce1b 115
jderemer3 0:9dc33481ce1b 116 //with pullups a button hit is a "0" - "~" inverts data to leds
jderemer3 0:9dc33481ce1b 117 mbedleds = ~(myNav & 0x0F); //update leds with nav switch direction inputs
jderemer3 0:9dc33481ce1b 118 if(myNav.fire()) mbedleds = 0x0F; //special all leds on case for fire (center button)
jderemer3 0:9dc33481ce1b 119 //or use - if(myNav[4]==0) mbedleds = 0x0F; //can index a switch bit like this
jderemer3 0:9dc33481ce1b 120 //wait(0.02);
jderemer3 0:9dc33481ce1b 121
jderemer3 0:9dc33481ce1b 122 }
jderemer3 0:9dc33481ce1b 123 }