void LED_board::light_row(int row_index){ if((row_index < 0) || (row_index > (NUM_ROW-1))) return; for(int i = 0; i < NUM_ROW; i++){ for(int j = 0; j < NUM_COL; j++){ if(i == row_index){ set_LED(i, j, true); //turn on }else{ set_LED(i, j, false); //turn off } } } }
void LED_board::light_col(int col_index){ if((col_index < 0) || col_index > (NUM_COL - 1)) return; for(int i = 0; i < NUM_ROW; i++){ for(int j = 0; j < NUM_COL; j++){ if(j == col_index){ set_LED(i, j, true); //turn on }else{ set_LED(i, j, false); //turn on } } } }
void LED_board::set_panel(bool state){ for(int i = 0; i < NUM_ROW; i++){ for(int j = 0; j < NUM_COL; j++){ set_LED(i,j,state); } } }
void main(void) { init(); while (1) { send_UART_word(exchange_SPI_2char(PIXY_SYNC, DUMMY)); set_LED(); } return; }
int main(void) { uint16_t time = 0; led_color_t col; // dog WDTCTL = WDTPW + WDTHOLD; // set vcore to highest value, mclk 24 MHz SetVCoreUp(0x01); SetVCoreUp(0x02); SetVCoreUp(0x03); // hw init hardware_clock_init(); init_spi_master(); timer_init(); // internal LED and debug pins P1DIR |= BIT0; P2DIR |= BIT2; // channel 17 = UCATXIFG as trigger for DMA DMACTL0 = 0; DMACTL1 = 17; DMACTL2 = 0; DMACTL3 = 0; // DMA2 configuration // bytewise access for source and destination, increment source, single transfer DMA2CTL = DMADT_0 | DMASRCINCR_3 | DMASRCBYTE | DMADSTBYTE | DMAIE; DMA2SA = (uint16_t)(&led_raw[1]); // source DMA2DA = (uint16_t)&UCA0TXBUF; // destination DMA2SZ = SIZE_OF_LED_ARRAY-1; // size in bytes __eint(); // all set, now let the DMA run DMA2CTL |= DMAEN ; UCA0TXBUF = led_raw[0]; while (1) { time++; P1OUT ^= BIT0; LPM0; // DMA transfer has finished, you may calculate LED updates now // timer A is triggered app. every 10msec, so you have around 6msec time // to update the strip // this is a color fading thing for (uint8_t i=0; i<NR_OF_LEDS; i++){ col.g = (time % 512) + i*4; col.r = (time % 256) + i; col.b = (time / 1024) + (NR_OF_LEDS - i); set_LED(i,&col); } } }
//PB1 press handler void GPIO_EVEN_IRQHandler(void) { switch (state) { case HOURS_STATE: if(hours + minutes + seconds == 0) { state = ALARM_STATE; set_LED(1); } else state++; break; case ALARM_STATE: state = SECONDS_STATE; set_LED(0); break; case COUNTDOWN_STATE: break; default: state++; }; GPIO_map->IFC = 1<<10; }
void SysTick_Handler(void) { switch (state) { case COUNTDOWN_STATE: seconds--; if(hours == 0 && minutes == 0 && seconds == 0) { state = ALARM_STATE; set_LED(1); } if(seconds == -1) { minutes--; seconds = 59; if(minutes == -1) { hours--; minutes = 59; } } }; }
uint8_t predefined_set_cgi_processor(uint8_t * uri_name, uint8_t * uri, uint8_t * buf, uint16_t * len) { uint8_t ret = 1; // ret = '1' means 'uri_name' matched uint8_t val = 0; if(strcmp((const char *)uri_name, "todo.cgi") == 0) { // to do ;//val = todo(uri); //*len = sprintf((char *)buf, "%d", val); } // Digital I/O; dio_s, dio_d else if(strcmp((const char *)uri_name, "set_LED.cgi") == 0) { val = set_LED(uri); *len = sprintf((char *)buf, "%d", val); } else { ret = 0; } return ret; }
/*----------------------------------------------------------------------------- * program start */ int main(void) { int sioHandle; uint8_t i; uint8_t u8; MCUSR = 0; wdt_disable(); /* get module address from EEPROM */ sMyAddr = eeprom_read_byte((const uint8_t *)MODUL_ADDRESS); for (i = 0; i < NUM_BUTTON_EVENT_ADDRESSES; i++) { sMySwitchAddr[i] = eeprom_read_byte((const uint8_t *)(BUTTON_EVENT_ADRESS_BASE + i)); } PortInit(); TimerInit(); SioInit(); SioRandSeed(MY_ADDR); sioHandle = SioOpen("USART0", eSioBaud9600, eSioDataBits8, eSioParityNo, eSioStopBits1, eSioModeHalfDuplex); SioSetIdleFunc(sioHandle, IdleSio); SioSetTransceiverPowerDownFunc(sioHandle, BusTransceiverPowerDown); BusTransceiverPowerDown(true); BusInit(sioHandle); spRxBusMsg = BusMsgBufGet(); /* enable global interrupts */ ENABLE_INT; i2c_slave(SLAVE_ADRESSE); button_register = 0; init_BJ(SLAVE_ADRESSE); for (i = 0; i < NR_OF_LEDS; i++) { u8 = eeprom_read_byte((const uint8_t *)(COLOR_LED_BASE + i)); set_LED(i, u8); sNewLedData[i / 2] |= (u8 & 0x0f) << ((i % 2) ? 4 : 0); } i2c_slave(SLAVE_ADRESSE); SendStartupMsg(); while (1) { Idle(); if (send_startup == 1) { init_BJ(SLAVE_ADRESSE); for (i = 0; i < NR_OF_LEDS; i++) { set_LED(i, eeprom_read_byte((const uint8_t *)(COLOR_LED_BASE + i))); } } sInputState = button_register; ProcessButton(sInputState); ProcessBus(); for (i = 0; i < BUS_SW16_LED_SIZE_SET_VALUE; i++) { if ((sNewLedData[i] & 0x0f) != (sLedData[i] & 0x0f) ) { // linke LED set_LED(i * 2, sNewLedData[i] & 0x0f); i2c_slave(SLAVE_ADRESSE); } if ((sNewLedData[i] & 0xf0) != (sLedData[i] & 0xf0) ) { // rechte LED set_LED(i * 2 + 1, (sNewLedData[i] & 0xf0) >> 4); i2c_slave(SLAVE_ADRESSE); } sLedData[i] = sNewLedData[i]; } }
void LED_board::turn_on_line(int num_pts, int *points){ for(int i = 0; i <= num_pts * 2; i += 2){ set_LED(points[i], points[i+1], true); //turns on } }
void LED_board::set_col(int col_index, bool state){ for(int i = 0; i < NUM_ROW; i++){ set_LED(i, col_index, state); } }
void LED_board::set_row(int row_index, bool state){ for(int j = 0; j < NUM_COL; j++){ set_LED(row_index, j, state); } }