ECE Project

Dependencies:   MMA8451Q mbed

Committer:
alexwynn41
Date:
Sun Apr 10 19:41:30 2016 +0000
Revision:
2:577acf73d01f
Parent:
1:37f364164ca9
Child:
3:ee4b3ea36ec7
Bit shifting method

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 0:6be425a138b2 78
alexwynn41 2:577acf73d01f 79 unsigned char position[] = {
alexwynn41 2:577acf73d01f 80 0x03, 0x80
alexwynn41 2:577acf73d01f 81 };
alexwynn41 0:6be425a138b2 82
alexwynn41 2:577acf73d01f 83 for(int i=1; i<9; i++) // Write first character (8 rows)
alexwynn41 2:577acf73d01f 84 SPI_Write2(i,led1[i-1]);
alexwynn41 0:6be425a138b2 85 while (1) {
alexwynn41 2:577acf73d01f 86
alexwynn41 0:6be425a138b2 87 float x, y, z;
alexwynn41 0:6be425a138b2 88 x = acc.getAccX();
alexwynn41 0:6be425a138b2 89 y = acc.getAccY();
alexwynn41 0:6be425a138b2 90 z = acc.getAccZ();
alexwynn41 2:577acf73d01f 91 if(x > 0.5){
alexwynn41 2:577acf73d01f 92 printf("Left \n");
alexwynn41 2:577acf73d01f 93 position[1] = position[1]*2;
alexwynn41 2:577acf73d01f 94 }else if(x < -0.5){
alexwynn41 2:577acf73d01f 95 printf("Right \n");
alexwynn41 2:577acf73d01f 96 position[1] = position[1]/2;
alexwynn41 2:577acf73d01f 97 }else if(y > 0.5){
alexwynn41 2:577acf73d01f 98 printf("Up \n");
alexwynn41 2:577acf73d01f 99 position[0] = position[1]-1;
alexwynn41 2:577acf73d01f 100 }else if(y < -0.5){
alexwynn41 2:577acf73d01f 101 printf("Down \n");
alexwynn41 2:577acf73d01f 102 position[0] = position[1]+2;
alexwynn41 2:577acf73d01f 103 }
alexwynn41 1:37f364164ca9 104 /*
alexwynn41 0:6be425a138b2 105 rled = 1.0f - abs(x);
alexwynn41 0:6be425a138b2 106 gled = 1.0f - abs(y);
alexwynn41 0:6be425a138b2 107 bled = 1.0f - abs(z);
alexwynn41 2:577acf73d01f 108 */
alexwynn41 2:577acf73d01f 109 direction(x,y);
alexwynn41 1:37f364164ca9 110 //wait(0.5f);
alexwynn41 0:6be425a138b2 111
alexwynn41 2:577acf73d01f 112
alexwynn41 2:577acf73d01f 113
alexwynn41 0:6be425a138b2 114 wait(1); // 1 sec delay
alexwynn41 2:577acf73d01f 115 SPI_Write2(position[0], position[1]);
alexwynn41 0:6be425a138b2 116 }
alexwynn41 0:6be425a138b2 117
alexwynn41 0:6be425a138b2 118
alexwynn41 0:6be425a138b2 119 }