void process_command(void) { if ( ! TWI_Transceiver_Busy() ) { if ( TWI_statusReg.RxDataInBuf ) { TWI_Get_Data_From_Transceiver(messageBuf, 1); switch (messageBuf[0]) { case M_BLUE_TOGGLE: m_blue(TOGGLE); unsigned char twi_data_1[7]; twi_data_1[0]=M_BLUE_TOGGLE; twi_data_1[1]=5; twi_data_1[2]=1; twi_data_1[3]=2; twi_data_1[4]=3; twi_data_1[5]=4; twi_data_1[6]=5; TWI_Start_Transceiver_With_Data(twi_data_1, 7); break; case SEND_ADC_DATA: m_green(TOGGLE); unsigned char twi_data_2[7]; twi_data_2[0]=SEND_ADC_DATA; twi_data_2[1]=5; twi_data_2[2]=(adc_value & 0x00FF); twi_data_2[3]=((adc_value & 0xFF00)>>8); twi_data_2[4]=(adc_value & 0x00FF); twi_data_2[5]=((adc_value & 0xFF00)>>8); twi_data_2[6]=0xAA; TWI_Start_Transceiver_With_Data(twi_data_2, 7); break; case M_GREEN_ON: m_green(ON); break; case M_BLUE_ON: m_blue(ON); break; } } }
virtual void convert( norm_double val, NormRgb & nrgb ) override { if ( ! std::isfinite( val ) ) { nrgb.fill(0.0); } nrgb[0] = m_red(val); nrgb[1] = m_green(val); nrgb[2] = m_blue(val); }
void process_command(void) { if (twi_data.data_length > 255) // in the m_twi.h, the buffer size is defined as 255, you can change this value { twi_data.command = I2C_ERROR; twi_data.data_length = 0; return; } switch (twi_data.command) { case M_BLUE_TOGGLE: m_blue(TOGGLE); twi_data.command=M_BLUE_TOGGLE; twi_data.data_length=5; twi_data.data[0]=1; twi_data.data[1]=2; twi_data.data[2]=3; twi_data.data[3]=4; twi_data.data[4]=5; break; case M_GREEN_TOGGLE: m_green(TOGGLE); twi_data.command=M_GREEN_TOGGLE; twi_data.data_length=4; twi_data.data[0]=5; twi_data.data[1]=6; twi_data.data[2]=7; twi_data.data[3]=8; break; case M_GREEN_ON: m_green(ON); break; case M_BLUE_ON: m_blue(ON); break; } }
int main(void) { /* insert your hardware initialization here */ InitPeripherals(); #ifdef MASTER USART USART_CHANNEL; USART_CHANNEL.USART_BAUDRATE = 9600; USART_CHANNEL.USART_RECEIVER_STATUS = RECEIVER_ENABLE; USART_CHANNEL.USART_TRANSMITTER_STATUS = TRANSMITTER_ENABLE; USART_CHANNEL.USART_STOP_BIT = 1; USART_CHANNEL.USART_PARITY = PARITY_EVEN; USART_Init(USART_CHANNEL); clear(TCCR1B, CS12); clear(TCCR1B, CS11); set(TCCR1B, CS10); // prescalar is 1 set(TCCR1B, WGM13); set(TCCR1B, WGM12); set(TCCR1A, WGM11); clear(TCCR1A, WGM10); set(TCCR1A, COM1A1); set(TCCR1A, COM1A0); set(DDRB, 1); ICR1 = (int)(8000000/500000) - 1; OCR1A = (int)((float)ICR1 * 0.5); // common minus output 500KHz signals set(DDRD, 5); set(PORTD, 5); // COIL3 PLUS on // unsigned long frequency = 500000; // float duty_cycle = 0.5; // unsigned int pulse_number = 3; // init_coil(frequency, duty_cycle, pulse_number); // // COIL3_PLUS_ON; // // drive_coil_communication(); sei(); #endif #ifdef SLAVE // unsigned long frequency = 500000; // float duty_cycle = 0.5; // unsigned int pulse_number = 3; // init_coil(frequency, duty_cycle, pulse_number); // COIL1_MINUS_ON; set(DDRD, 4); set(PORTD, 4); // COIL2_MINUS on set(DDRD, 1); set(PORTD, 1); // USART TX is high set(DDRB, 3); set(PORTB, 3); // turn on receiver #endif m_green(ON);m_yellow(ON);m_blue(ON); m_wait(1000); m_green(OFF);m_yellow(OFF);m_blue(OFF); m_wait(2000); for(;;){ /* insert your main loop code here */ #ifdef MASTER set(PORTD, 5); USART_Transmit_string("MODLAB!\n\r"); clear(PORTD, 5); m_wait(1000); #endif #ifdef SLAVE m_blue(TOGGLE); #endif } return 0; /* never reached */ }