Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos MCP23S17
main.cpp
00001 #include "mbed.h" 00002 #include "adc.h" 00003 #include "MCP23S17.h" 00004 #include "rtos.h" 00005 #define MN 256 00006 #define SAMPLE_RATE 48000 00007 00008 // Create SPI bus 00009 SPI spi(p5, p6, p7); 00010 00011 DigitalOut layer0(p24); 00012 DigitalOut layer1(p23); 00013 DigitalOut layer2(p22); 00014 DigitalOut layer3(p21); 00015 AnalogIn ain(p18); 00016 00017 char Opcode = 0x40; 00018 MCP23S17 chip = MCP23S17(spi, p20, Opcode); 00019 Timer timer; 00020 Ticker ticker; 00021 00022 int Counter = 0; 00023 int led_control = 1; 00024 int16_t Buffer[5000]; 00025 unsigned char PowerInt[MN/2]; 00026 ADC adc(SAMPLE_RATE, 1); 00027 float g; 00028 00029 void sample_ADC(int chan, uint32_t value) { 00030 float s; 00031 s = adc.read(p19); 00032 Counter += 1; 00033 g = abs(s-2048); 00034 g = g/2048; 00035 } 00036 00037 void LED_Thread(void const *args) { 00038 chip.write(PORT_A, 0x00); 00039 chip.write(PORT_B, 0x00); 00040 layer0 = 1; 00041 layer1 = 0; 00042 layer2 = 0; 00043 layer3 = 0; 00044 // Set all 8 Port A bits to output direction 00045 chip.direction(PORT_A, 0x00); 00046 // Set all 8 Port B bits to output direction 00047 chip.direction(PORT_B, 0x00); 00048 unsigned char c[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; 00049 while(1){ 00050 switch(led_control){ 00051 case 0: //Standard Mode 00052 chip.write(PORT_A, 0xFF); 00053 chip.write(PORT_B, 0xFF); 00054 if(g > 0 && g < .25){ 00055 layer3 = 1; 00056 }else{ 00057 layer3 = 0; 00058 } 00059 if(g > .25 && g < .5){ 00060 layer2 = 1; 00061 }else{ 00062 layer2 = 0; 00063 } 00064 if(g > .5 && g < .75){ 00065 layer1 = 1; 00066 }else{ 00067 layer1 = 0; 00068 } 00069 if(g > .75 && g < 1){ 00070 layer0 = 1; 00071 }else{ 00072 layer0 = 0; 00073 } 00074 break; 00075 case 1: //Standard + Screensaver 00076 char c_rand[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; 00077 if(g > 0 && g < .25){ 00078 layer3 = 1; 00079 }else{ 00080 layer3 = 0; 00081 } 00082 if(g > .25 && g < .5){ 00083 layer2 = 1; 00084 }else{ 00085 layer2 = 0; 00086 } 00087 if(g > .5 && g < .75){ 00088 layer1 = 1; 00089 }else{ 00090 layer1 = 0; 00091 } 00092 if(g > .75 && g < 1){ 00093 layer0 = 1; 00094 }else{ 00095 layer0 = 0; 00096 } 00097 for( int i = 0; i <=7; i++){chip.write(PORT_A, c[i]); //A loop 00098 Thread::wait(10);} 00099 chip.write(PORT_A, 0x00); 00100 for( int i = 0; i <=7; i++){chip.write(PORT_B, c[i]); //A loop 00101 Thread::wait(10);} 00102 chip.write(PORT_B, 0x00); //CLEAR 00103 break; 00104 case 2: //Standard + Screensaver {{RANDOM}} 00105 char c_rand[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; 00106 if(g > 0 && g < .25){ 00107 layer3 = 1; 00108 }else{ 00109 layer3 = 0; 00110 } 00111 if(g > .25 && g < .5){ 00112 layer2 = 1; 00113 }else{ 00114 layer2 = 0; 00115 } 00116 if(g > .5 && g < .75){ 00117 layer1 = 1; 00118 }else{ 00119 layer1 = 0; 00120 } 00121 if(g > .75 && g < 1){ 00122 layer0 = 1; 00123 }else{ 00124 layer0 = 0; 00125 } 00126 for (int i=0; i<7; i++) { 00127 int r = rand() % 7; // generate a random position 00128 int temp = c_rand[i]; c_rand[i] = c_rand[r]; c_rand[r] = temp; 00129 } 00130 for( int i = 0; i <=7; i++){chip.write(PORT_A, c_rand[i]); //A loop 00131 Thread::wait(10);} 00132 chip.write(PORT_A, 0x00); 00133 for( int i = 0; i <=7; i++){chip.write(PORT_B, c_rand[i]); //A loop 00134 Thread::wait(10);} 00135 chip.write(PORT_B, 0x00); //CLEAR 00136 break; 00137 case 3: //Screensaver 00138 for(int n = 0; n<= 3; n++){ 00139 switch(n){ 00140 case 1: layer0 = 0; layer1 = 1; layer2 = 0; layer3 = 0; 00141 break; 00142 case 2: layer0 = 0; layer1 = 0; layer2 = 1; layer3 = 0; 00143 break; 00144 case 3: layer0 = 0; layer1 = 0; layer2 = 0; layer3 = 1; 00145 break; 00146 default: layer0 = 1; layer1 = 0; layer2 = 0; layer3 = 0; 00147 break; 00148 } 00149 for( int i = 0; i <=7; i++){chip.write(PORT_A, c[i]); //A loop 00150 Thread::wait(100);} 00151 chip.write(PORT_A, 0x00); 00152 for( int i = 0; i <=7; i++){chip.write(PORT_B, c[i]); //A loop 00153 Thread::wait(100);} 00154 chip.write(PORT_B, 0x00); //CLEAR 00155 } 00156 break; 00157 } 00158 Thread::wait(25); 00159 } 00160 } 00161 00162 int main() { 00163 Thread t1(LED_Thread); 00164 while (1) { 00165 //Prepare for burst mode on all ADC pins and set up interrupt handler 00166 adc.append(sample_ADC); 00167 adc.startmode(0,0); 00168 adc.burst(1); 00169 adc.setup(p19,1); 00170 wait(.4); 00171 adc.interrupt_state(p19,1); 00172 wait(0.1); 00173 adc.interrupt_state(p19,0); 00174 adc.setup(p19,0); 00175 int actual_rate = adc.actual_sample_rate(); 00176 } 00177 } 00178 00179 00180 00181 00182
Generated on Thu Aug 11 2022 14:42:35 by
1.7.2