ECE Project

Dependencies:   MMA8451Q mbed

Committer:
alexwynn41
Date:
Sun Apr 10 20:06:28 2016 +0000
Revision:
3:ee4b3ea36ec7
Parent:
2:577acf73d01f
position update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alexwynn41 0:6be425a138b2 1 /* 06_spi_max7219_led8x8
alexwynn41 0:6be425a138b2 2 *
alexwynn41 0:6be425a138b2 3 * Simple demo to drive a 8x8-as LED matrix by a MAX7219 LED driver IC
alexwynn41 0:6be425a138b2 4 * After initialisation two characters (H and W) are displayed alternatively.
alexwynn41 0:6be425a138b2 5 * The MAX7219 IC is driven by hardware SPI: SPI0 module at PTD1, PTD2, PTD3.
alexwynn41 0:6be425a138b2 6 */
alexwynn41 0:6be425a138b2 7
alexwynn41 0:6be425a138b2 8 #include "mbed.h"
alexwynn41 0:6be425a138b2 9 #include "MMA8451Q.h"
alexwynn41 0:6be425a138b2 10
alexwynn41 0:6be425a138b2 11 PinName const SDA = PTE25;
alexwynn41 0:6be425a138b2 12 PinName const SCL = PTE24;
alexwynn41 0:6be425a138b2 13
alexwynn41 0:6be425a138b2 14 SPI spi(PTD2, PTD3, PTD1); // Arduino compatible MOSI, MISO, SCLK
alexwynn41 0:6be425a138b2 15 DigitalOut cs(PTD0); // Chip select
alexwynn41 0:6be425a138b2 16
alexwynn41 0:6be425a138b2 17 #define MMA8451_I2C_ADDRESS (0x1d<<1)
alexwynn41 0:6be425a138b2 18
alexwynn41 0:6be425a138b2 19 const unsigned char led1[]= {
alexwynn41 2:577acf73d01f 20 0xFF,0xB4,0x15,0xD1,0x85,0xB5,0x95,0xFF
alexwynn41 0:6be425a138b2 21 }; //H
alexwynn41 0:6be425a138b2 22 const unsigned char led2[]= {
alexwynn41 0:6be425a138b2 23 0x1F,0x60,0x80,0x40,0x40,0x80,0x60,0x1F
alexwynn41 0:6be425a138b2 24 }; //W
alexwynn41 0:6be425a138b2 25
alexwynn41 0:6be425a138b2 26 /// Send two bytes to SPI bus
alexwynn41 0:6be425a138b2 27 void SPI_Write2(unsigned char MSB, unsigned char LSB)
alexwynn41 0:6be425a138b2 28 {
alexwynn41 0:6be425a138b2 29 cs = 0; // Set CS Low
alexwynn41 0:6be425a138b2 30 spi.write(MSB); // Send two bytes
alexwynn41 0:6be425a138b2 31 spi.write(LSB);
alexwynn41 0:6be425a138b2 32 cs = 1; // Set CS High
alexwynn41 0:6be425a138b2 33 }
alexwynn41 0:6be425a138b2 34
alexwynn41 0:6be425a138b2 35 void direction(float x, float y){
alexwynn41 0:6be425a138b2 36 if(x > 0.5){
alexwynn41 0:6be425a138b2 37 printf("Left \n");
alexwynn41 0:6be425a138b2 38 }else if(x < -0.5){
alexwynn41 0:6be425a138b2 39 printf("Right \n");
alexwynn41 0:6be425a138b2 40 }else if(y > 0.5){
alexwynn41 0:6be425a138b2 41 printf("Up \n");
alexwynn41 0:6be425a138b2 42 }else if(y < -0.5){
alexwynn41 0:6be425a138b2 43 printf("Down \n");
alexwynn41 0:6be425a138b2 44 }else{
alexwynn41 0:6be425a138b2 45 printf("Neutral Position \n");
alexwynn41 0:6be425a138b2 46 }
alexwynn41 0:6be425a138b2 47 }
alexwynn41 0:6be425a138b2 48
alexwynn41 0:6be425a138b2 49 /// MAX7219 initialisation
alexwynn41 0:6be425a138b2 50 void Init_MAX7219(void)
alexwynn41 0:6be425a138b2 51 {
alexwynn41 0:6be425a138b2 52 SPI_Write2(0x09, 0x00); // Decoding off
alexwynn41 0:6be425a138b2 53 SPI_Write2(0x0A, 0x08); // Brightness to intermediate
alexwynn41 0:6be425a138b2 54 SPI_Write2(0x0B, 0x07); // Scan limit = 7
alexwynn41 0:6be425a138b2 55 SPI_Write2(0x0C, 0x01); // Normal operation mode
alexwynn41 0:6be425a138b2 56 SPI_Write2(0x0F, 0x0F); // Enable display test
alexwynn41 0:6be425a138b2 57 wait_ms(500); // 500 ms delay
alexwynn41 0:6be425a138b2 58 SPI_Write2(0x01, 0x00); // Clear row 0.
alexwynn41 0:6be425a138b2 59 SPI_Write2(0x02, 0x00); // Clear row 1.
alexwynn41 0:6be425a138b2 60 SPI_Write2(0x03, 0x00); // Clear row 2.
alexwynn41 0:6be425a138b2 61 SPI_Write2(0x04, 0x00); // Clear row 3.
alexwynn41 0:6be425a138b2 62 SPI_Write2(0x05, 0x00); // Clear row 4.
alexwynn41 0:6be425a138b2 63 SPI_Write2(0x06, 0x00); // Clear row 5.
alexwynn41 0:6be425a138b2 64 SPI_Write2(0x07, 0x00); // Clear row 6.
alexwynn41 0:6be425a138b2 65 SPI_Write2(0x08, 0x00); // Clear row 7.
alexwynn41 0:6be425a138b2 66 SPI_Write2(0x0F, 0x00); // Disable display test
alexwynn41 0:6be425a138b2 67 wait_ms(500); // 500 ms delay
alexwynn41 0:6be425a138b2 68 }
alexwynn41 0:6be425a138b2 69
alexwynn41 0:6be425a138b2 70 int main()
alexwynn41 0:6be425a138b2 71 {
alexwynn41 0:6be425a138b2 72
alexwynn41 0:6be425a138b2 73 cs = 1; // CS initially High
alexwynn41 0:6be425a138b2 74 spi.format(8,0); // 8-bit format, mode 0,0
alexwynn41 0:6be425a138b2 75 spi.frequency(1000000); // SCLK = 1 MHz
alexwynn41 0:6be425a138b2 76 Init_MAX7219(); // Initialize the LED controller
alexwynn41 0:6be425a138b2 77 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
alexwynn41 3:ee4b3ea36ec7 78 unsigned char row = 0x03;
alexwynn41 0:6be425a138b2 79
alexwynn41 2:577acf73d01f 80 unsigned char position[] = {
alexwynn41 3:ee4b3ea36ec7 81 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00
alexwynn41 2:577acf73d01f 82 };
alexwynn41 0:6be425a138b2 83
alexwynn41 2:577acf73d01f 84 for(int i=1; i<9; i++) // Write first character (8 rows)
alexwynn41 2:577acf73d01f 85 SPI_Write2(i,led1[i-1]);
alexwynn41 0:6be425a138b2 86 while (1) {
alexwynn41 2:577acf73d01f 87
alexwynn41 3:ee4b3ea36ec7 88 float x, y;
alexwynn41 0:6be425a138b2 89 x = acc.getAccX();
alexwynn41 0:6be425a138b2 90 y = acc.getAccY();
alexwynn41 3:ee4b3ea36ec7 91
alexwynn41 2:577acf73d01f 92 if(x > 0.5){
alexwynn41 2:577acf73d01f 93 printf("Left \n");
alexwynn41 2:577acf73d01f 94 position[1] = position[1]*2;
alexwynn41 2:577acf73d01f 95 }else if(x < -0.5){
alexwynn41 2:577acf73d01f 96 printf("Right \n");
alexwynn41 2:577acf73d01f 97 position[1] = position[1]/2;
alexwynn41 2:577acf73d01f 98 }else if(y > 0.5){
alexwynn41 2:577acf73d01f 99 printf("Up \n");
alexwynn41 3:ee4b3ea36ec7 100 position[0] = position[0]-1;
alexwynn41 3:ee4b3ea36ec7 101 row--;
alexwynn41 2:577acf73d01f 102 }else if(y < -0.5){
alexwynn41 2:577acf73d01f 103 printf("Down \n");
alexwynn41 3:ee4b3ea36ec7 104 position[0] = position[0]+1;
alexwynn41 3:ee4b3ea36ec7 105 row++;
alexwynn41 2:577acf73d01f 106 }
alexwynn41 3:ee4b3ea36ec7 107
alexwynn41 3:ee4b3ea36ec7 108
alexwynn41 2:577acf73d01f 109
alexwynn41 0:6be425a138b2 110 wait(1); // 1 sec delay
alexwynn41 2:577acf73d01f 111 SPI_Write2(position[0], position[1]);
alexwynn41 3:ee4b3ea36ec7 112 for(int i=1; i<9; i++){ // Write first character (8 rows)
alexwynn41 3:ee4b3ea36ec7 113 if(i != row){
alexwynn41 3:ee4b3ea36ec7 114 SPI_Write2(i,led1[i-1]);
alexwynn41 3:ee4b3ea36ec7 115 }
alexwynn41 3:ee4b3ea36ec7 116 }
alexwynn41 0:6be425a138b2 117 }
alexwynn41 0:6be425a138b2 118
alexwynn41 0:6be425a138b2 119
alexwynn41 0:6be425a138b2 120 }