Dependencies: MCP23S17 PinDetect mbed
lab1.cpp
- Committer:
- jderemer3
- Date:
- 2017-03-01
- Revision:
- 0:9dc33481ce1b
File content as of revision 0:9dc33481ce1b:
// ECE 4180
// Lab/Project 1
// Jeremy M. Deremer
// Due 26 January, 2017
#include "mbed.h"
#include "PinDetect.h"
#include "LEDColor.h"
#include "RGBLed.h"
#include "MCP23S17.h"
#include "Nav_Switch.h"
PwmOut led(p24);
// Instantiate pushbuttons on analog pins
PinDetect pb1(p17);
PinDetect pb2(p18);
PinDetect pb3(p19);
// Instantiate RGBLed and allocate default colors
//RGBLed myRGBled(p23,p22,p21); //RGB PWM pins
//const LEDColor off(0.0,0.0,0.0);
//const LEDColor blue(0.0,0.0,1.0);
// Instantiate I/O Expander
// Create SPI bus
SPI spi(p5, p6, p7);
char Opcode = 0x40;
// Next create a MCP23S17
MCP23S17 chip = MCP23S17(spi, p20, Opcode);
DigitalOut led1(LED1); // mbed LED1 is used for test status display
// Instantiate Nav Joystick
Nav_Switch myNav(p15, p12, p13, p11, p8); //pin order on Sparkfun breakout
float inc = 0.1f;
float val = 0.5f;
// Callback routine is interrupt activated by a debounced pb1 hit
void pb1_hit_callback (void)
{
val = led.read();
if (val == 0.00f)
{
led.write(0.50f); // 50% duty cycle
}
else
{
led.write(0.00f); // 0% duty cycle
}
}
// Callback routine is interrupt activated by a debounced pb2 hit
void pb2_hit_callback (void)
{
// add brightness
val = led.read();
if (val < 1.00f)
{
val += inc;
led.write(val);
}
}
// Callback routine is interrupt activated by a debounced pb3 hit
void pb3_hit_callback (void)
{
// subtract brightness
val = led.read();
if (val > 0.0f)
{
val -= inc;
led.write(val);
}
}
int main() {
led.write(0.5f); // 50% duty cycle
// Use internal pullups for the three pushbuttons
pb1.mode(PullUp);
pb2.mode(PullUp);
pb3.mode(PullUp);
// Delay for initial pullup to take effect
wait(.01);
// Setup Interrupt callback functions for a pb hit
pb1.attach_deasserted(&pb1_hit_callback);
pb2.attach_deasserted(&pb2_hit_callback);
pb3.attach_deasserted(&pb3_hit_callback);
// Start sampling pb inputs using interrupts
pb1.setSampleFrequency();
pb2.setSampleFrequency();
pb3.setSampleFrequency();
// pushbuttons now setup and running
// Set all 8 Port A bits to output direction
chip.direction(PORT_A, 0x00);
// Set all 8 Port B bits to input direction
chip.direction(PORT_B, 0xFF);
while(1) // led flashing
{
// write 0xAA to MCP23S17 Port A
chip.write(PORT_A, 0xAA);
// read back value from MCP23S17 Port B and display B0 on mbed led1
if ((chip.read(PORT_B)& 0x01) == 0x01)
{
chip.write(PORT_A, 0x55);
}
//chip.write(PORT_A, (chip.read(PORT_B)& 0x01));
//with pullups a button hit is a "0" - "~" inverts data to leds
mbedleds = ~(myNav & 0x0F); //update leds with nav switch direction inputs
if(myNav.fire()) mbedleds = 0x0F; //special all leds on case for fire (center button)
//or use - if(myNav[4]==0) mbedleds = 0x0F; //can index a switch bit like this
//wait(0.02);
}
}