bosko lekovic
/
IO_spi
IO spi
Diff: SPIledovi/LedLight.cpp
- Revision:
- 7:4aa3dac73b66
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SPIledovi/LedLight.cpp Sun Mar 21 18:20:15 2021 +0100 @@ -0,0 +1,147 @@ +#include "LedLight.h" +#include "ClassThreadAbstract.h" + +#include "mbed.h" +// DigitalOut led(LED1,3); + +/************************************** class C_spi ******************************************* */ + C_spi::C_spi( PinName mosi, PinName miso, PinName sclk, PinName pin_csdata ): SPI( mosi, miso, sclk) //SPI( PTD2, PTD3, PTD1 ) + { + p_csdata = new DigitalOut( pin_csdata,1); + format( 16, 0); + frequency(10000000); + } + unsigned short C_spi::transfer( unsigned short tx ) + { + // led = 0; + *p_csdata = 0; + *p_csdata = 1; + unsigned short rx = write( tx ); + *p_csdata = 0; + *p_csdata = 1; +// led = 1; + return rx; + } +/********************************************************************************** */ + + + +/********************************************************************************** */ + + + C_spiled::C_spiled():C_spi( PTD2, PTD3, PTD1, PTC4)//, C_thread() + { + + } + + void C_spiled::do_Sifter( void ) + { + sifter = u_ledovi.ledovi<<2; + received = transfer(sifter); + } + + void C_spiled::set_led( char no, E_ledColor ct ) + { + switch( no ) + { + case 1: u_ledovi.ledpar1 = ct; break; + case 2: u_ledovi.ledpar2 = ct; break; + case 3: u_ledovi.ledpar3 = ct; break; + case 4: u_ledovi.ledpar4 = ct; break; + case 5: u_ledovi.ledpar5 = ct; break; + case 6: u_ledovi.ledpar6 = ct; break; + } + } + E_ledColor C_spiled::get_led( char no ) + { + E_ledColor ct; + switch( no ) + { + case 1: ct = (E_ledColor)u_ledovi.ledpar1; break; + case 2: ct = (E_ledColor)u_ledovi.ledpar2; break; + case 3: ct = (E_ledColor)u_ledovi.ledpar3; break; + case 4: ct = (E_ledColor)u_ledovi.ledpar4; break; + case 5: ct = (E_ledColor)u_ledovi.ledpar5; break; + case 6: ct = (E_ledColor)u_ledovi.ledpar6; break; + } + return ct; + + } + +/********************************************************************************** */ + +// refresh beskonacna funkcija se poziva u C_threadu + + + C_ledLight::C_ledLight( ) { } + C_ledLight::C_ledLight( int stack ):C_thread( stack) { } + + void C_ledLight::set_ledLight( char no, E_ledColor c, char t) + { + if( no && no<=NO_LED ) {s_ledLight[no-1].ct = c; s_ledLight[no-1].tickPatern= t; } + } + + void C_ledLight::set_ledLight( char no, E_ledColor c ) { if( no && no<=NO_LED ) {s_ledLight[no-1].ct = c;} } + void C_ledLight::set_ledLightTickPatern( char no, char t ) { if( no && no<=NO_LED ) {s_ledLight[no-1].tickPatern = t;} } +// void set_ledLight( char no, bool on ) { if( no && no<=NO_LED ) {s_ledLight[no-1].tickPatern = ((on==true) ? 0xff : 0);} } + void C_ledLight::set_ledLightByte( char Port ) + { + for( char i=0, j=1; i<NO_LED; i++, j<<=1 ) { s_ledLight[ i ].tickPatern = ((Port & j) ? 0xff : 0); } + } + + + S_ledLight C_ledLight::get_ledLight( char no ) { return s_ledLight[no-1];} + char C_ledLight::get_ledLightTickPatern( char no ) { return s_ledLight[no-1].tickPatern;} + E_ledColor C_ledLight::get_ledLightColor( char no ) { return s_ledLight[no-1].ct;} + + void C_ledLight::apply_ledColorTemplate( const E_ledColor *e_ct ) + { + for( int i = 0; i<NO_LED; i++) s_ledLight[i].ct = e_ct[i]; + } + + void C_ledLight::_refresh( void) + { + static char j=1; + + set_led( 1, (E_ledColor)( (get_ledLightTickPatern(1) & j) ? ((get_ledLightColor(1))) : 0 ) ); + set_led( 2, (E_ledColor)( (get_ledLightTickPatern(2) & j) ? ((get_ledLightColor(2))) : 0 ) ); + set_led( 3, (E_ledColor)( (get_ledLightTickPatern(3) & j) ? ((get_ledLightColor(3))) : 0 ) ); + set_led( 4, (E_ledColor)( (get_ledLightTickPatern(4) & j) ? ((get_ledLightColor(4))) : 0 ) ); + set_led( 5, (E_ledColor)( (get_ledLightTickPatern(5) & j) ? ((get_ledLightColor(5))) : 0 ) ); + set_led( 6, (E_ledColor)( (get_ledLightTickPatern(6) & j) ? ((get_ledLightColor(6))) : 0 ) ); + + do_Sifter(); + + if( !(j<<=1) ) j = 1; + + ThisThread::sleep_for(125ms); + + } + +// void C_ledLight::refresh( void) +// { + +// // set_ledLight(0, ledRed, 0xff); +// // set_ledLight(2, ledGreen, 0b01110010); + +// // apply_ledColorTemplate(e_colorTemplate); +// // set_ledLightTickPatern(3, 0xf); + + +// // set_ledLight(3, ledOff); + +// //set_ledLightByte(0x1f); + +// while(true) +// { + +// _refresh(); + +// //printf(" max_stack %d ratio %d\n\r", get_max_stack(), get_stack_ratio()); + +// } +// } + + + +