![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Blinks LED cube along with music
Dependencies: mbed mbed-rtos MCP23S17
main.cpp
- Committer:
- kgoins3
- Date:
- 2018-12-11
- Revision:
- 1:ef3ad9c720c9
- Parent:
- 0:b6451e68016a
File content as of revision 1:ef3ad9c720c9:
#include "mbed.h" #include "adc.h" #include "MCP23S17.h" #include "rtos.h" #define MN 256 #define SAMPLE_RATE 48000 // Create SPI bus SPI spi(p5, p6, p7); DigitalOut layer0(p24); DigitalOut layer1(p23); DigitalOut layer2(p22); DigitalOut layer3(p21); AnalogIn ain(p18); char Opcode = 0x40; MCP23S17 chip = MCP23S17(spi, p20, Opcode); Timer timer; Ticker ticker; int Counter = 0; int led_control = 1; int16_t Buffer[5000]; unsigned char PowerInt[MN/2]; ADC adc(SAMPLE_RATE, 1); float g; void sample_ADC(int chan, uint32_t value) { float s; s = adc.read(p19); Counter += 1; g = abs(s-2048); g = g/2048; } void LED_Thread(void const *args) { chip.write(PORT_A, 0x00); chip.write(PORT_B, 0x00); layer0 = 1; layer1 = 0; layer2 = 0; layer3 = 0; // Set all 8 Port A bits to output direction chip.direction(PORT_A, 0x00); // Set all 8 Port B bits to output direction chip.direction(PORT_B, 0x00); unsigned char c[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; while(1){ switch(led_control){ case 0: //Standard Mode chip.write(PORT_A, 0xFF); chip.write(PORT_B, 0xFF); if(g > 0 && g < .25){ layer3 = 1; }else{ layer3 = 0; } if(g > .25 && g < .5){ layer2 = 1; }else{ layer2 = 0; } if(g > .5 && g < .75){ layer1 = 1; }else{ layer1 = 0; } if(g > .75 && g < 1){ layer0 = 1; }else{ layer0 = 0; } break; case 1: //Standard + Screensaver char c_rand[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; if(g > 0 && g < .25){ layer3 = 1; }else{ layer3 = 0; } if(g > .25 && g < .5){ layer2 = 1; }else{ layer2 = 0; } if(g > .5 && g < .75){ layer1 = 1; }else{ layer1 = 0; } if(g > .75 && g < 1){ layer0 = 1; }else{ layer0 = 0; } for( int i = 0; i <=7; i++){chip.write(PORT_A, c[i]); //A loop Thread::wait(10);} chip.write(PORT_A, 0x00); for( int i = 0; i <=7; i++){chip.write(PORT_B, c[i]); //A loop Thread::wait(10);} chip.write(PORT_B, 0x00); //CLEAR break; case 2: //Standard + Screensaver {{RANDOM}} char c_rand[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; if(g > 0 && g < .25){ layer3 = 1; }else{ layer3 = 0; } if(g > .25 && g < .5){ layer2 = 1; }else{ layer2 = 0; } if(g > .5 && g < .75){ layer1 = 1; }else{ layer1 = 0; } if(g > .75 && g < 1){ layer0 = 1; }else{ layer0 = 0; } for (int i=0; i<7; i++) { int r = rand() % 7; // generate a random position int temp = c_rand[i]; c_rand[i] = c_rand[r]; c_rand[r] = temp; } for( int i = 0; i <=7; i++){chip.write(PORT_A, c_rand[i]); //A loop Thread::wait(10);} chip.write(PORT_A, 0x00); for( int i = 0; i <=7; i++){chip.write(PORT_B, c_rand[i]); //A loop Thread::wait(10);} chip.write(PORT_B, 0x00); //CLEAR break; case 3: //Screensaver for(int n = 0; n<= 3; n++){ switch(n){ case 1: layer0 = 0; layer1 = 1; layer2 = 0; layer3 = 0; break; case 2: layer0 = 0; layer1 = 0; layer2 = 1; layer3 = 0; break; case 3: layer0 = 0; layer1 = 0; layer2 = 0; layer3 = 1; break; default: layer0 = 1; layer1 = 0; layer2 = 0; layer3 = 0; break; } for( int i = 0; i <=7; i++){chip.write(PORT_A, c[i]); //A loop Thread::wait(100);} chip.write(PORT_A, 0x00); for( int i = 0; i <=7; i++){chip.write(PORT_B, c[i]); //A loop Thread::wait(100);} chip.write(PORT_B, 0x00); //CLEAR } break; } Thread::wait(25); } } int main() { Thread t1(LED_Thread); while (1) { //Prepare for burst mode on all ADC pins and set up interrupt handler adc.append(sample_ADC); adc.startmode(0,0); adc.burst(1); adc.setup(p19,1); wait(.4); adc.interrupt_state(p19,1); wait(0.1); adc.interrupt_state(p19,0); adc.setup(p19,0); int actual_rate = adc.actual_sample_rate(); } }