Dependencies:   PCA9955A_library_prototype mbed

Committer:
okano
Date:
Thu Jul 17 02:08:37 2014 +0000
Revision:
5:78bfbf11bb2f
Parent:
4:75a2c3550bdc
Child:
6:4da1c7f560b8
peak hold coefficient adjustment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 5:78bfbf11bb2f 1 #include "mbed.h"
okano 2:8a31696f1da5 2 #include "PCA9955A.h"
okano 0:71d7b5b100ab 3
okano 1:8bcef4962076 4 BusOut leds( LED4, LED3, LED2, LED1 );
okano 4:75a2c3550bdc 5 DigitalOut pin( p21 );
okano 0:71d7b5b100ab 6 AnalogIn ain( p20 );
okano 5:78bfbf11bb2f 7 AnalogOut aout( p18 );
okano 0:71d7b5b100ab 8
okano 5:78bfbf11bb2f 9 PCA9955A led_driver( p28, p27, 0x02 ); // SDA, SCL, I2C_slave_sddress
okano 2:8a31696f1da5 10
okano 5:78bfbf11bb2f 11 Ticker led_maintenance;
okano 5:78bfbf11bb2f 12 Ticker sample_timing;
okano 2:8a31696f1da5 13
okano 2:8a31696f1da5 14 int led_change = 0;
okano 5:78bfbf11bb2f 15 int sampling = 0;
okano 2:8a31696f1da5 16
okano 2:8a31696f1da5 17
okano 2:8a31696f1da5 18 void set_color( int v );
okano 2:8a31696f1da5 19 void led_cntl();
okano 5:78bfbf11bb2f 20 void ad_cntl();
okano 2:8a31696f1da5 21
okano 2:8a31696f1da5 22
okano 2:8a31696f1da5 23
okano 2:8a31696f1da5 24
okano 1:8bcef4962076 25 int main()
okano 0:71d7b5b100ab 26 {
okano 1:8bcef4962076 27 float in;
okano 1:8bcef4962076 28 float coef = 26.4;
okano 0:71d7b5b100ab 29 float peak = 0;
okano 2:8a31696f1da5 30 int shift;
okano 2:8a31696f1da5 31
okano 3:c1f60bb03ac4 32 led_driver.set_all_intensity( 0xFF );
okano 4:75a2c3550bdc 33 led_driver.set_all_intensity( 0x20, true );
okano 2:8a31696f1da5 34
okano 2:8a31696f1da5 35 set_color( 1 );
okano 2:8a31696f1da5 36
okano 5:78bfbf11bb2f 37 led_maintenance.attach( &led_cntl, 0.02 );
okano 5:78bfbf11bb2f 38 sample_timing.attach( &ad_cntl, 0.01 );
okano 2:8a31696f1da5 39
okano 0:71d7b5b100ab 40 while(1) {
okano 5:78bfbf11bb2f 41
okano 5:78bfbf11bb2f 42 if ( sampling ) {
okano 5:78bfbf11bb2f 43 sampling = 0;
okano 2:8a31696f1da5 44
okano 5:78bfbf11bb2f 45 pin =0;
okano 5:78bfbf11bb2f 46 in = (float)ain;
okano 5:78bfbf11bb2f 47 peak = in < peak ? peak : in;
okano 5:78bfbf11bb2f 48 shift = (int)(coef * peak);
okano 5:78bfbf11bb2f 49 leds = 0x1 << shift;
okano 5:78bfbf11bb2f 50 peak *= 0.99;
okano 5:78bfbf11bb2f 51 pin =1;
okano 5:78bfbf11bb2f 52 aout = peak;
okano 2:8a31696f1da5 53
okano 5:78bfbf11bb2f 54 if ( shift > 2 ) {
okano 5:78bfbf11bb2f 55 led_change = 1;
okano 5:78bfbf11bb2f 56 }
okano 2:8a31696f1da5 57 }
okano 0:71d7b5b100ab 58 }
okano 0:71d7b5b100ab 59
okano 0:71d7b5b100ab 60 }
okano 2:8a31696f1da5 61
okano 5:78bfbf11bb2f 62 void ad_cntl()
okano 5:78bfbf11bb2f 63 {
okano 5:78bfbf11bb2f 64 sampling = 1;
okano 5:78bfbf11bb2f 65 }
okano 5:78bfbf11bb2f 66
okano 5:78bfbf11bb2f 67
okano 5:78bfbf11bb2f 68 void led_cntl()
okano 2:8a31696f1da5 69 {
okano 4:75a2c3550bdc 70 static int count = 0;
okano 2:8a31696f1da5 71 static float intensity = 1.0;
okano 2:8a31696f1da5 72
okano 2:8a31696f1da5 73 if ( led_change ) {
okano 4:75a2c3550bdc 74 set_color( count++ & 0x3 );
okano 2:8a31696f1da5 75 led_change = 0;
okano 2:8a31696f1da5 76 intensity = 1.0;
okano 2:8a31696f1da5 77 }
okano 5:78bfbf11bb2f 78
okano 2:8a31696f1da5 79 led_driver.set_all_intensity( (char)(intensity * (float)0xFF) );
okano 5:78bfbf11bb2f 80
okano 2:8a31696f1da5 81 intensity *= 0.90;
okano 2:8a31696f1da5 82 }
okano 2:8a31696f1da5 83
okano 2:8a31696f1da5 84 void set_color( int v )
okano 2:8a31696f1da5 85 {
okano 4:75a2c3550bdc 86 v = 0x1 << v;
okano 2:8a31696f1da5 87 led_driver = (v << 12) | (v << 8) | (v << 4) | v;
okano 2:8a31696f1da5 88 }
okano 2:8a31696f1da5 89