tBoolean WiFly_Send(const char * send, const char * resp) { tBoolean status = true; unsigned char attempts = 0; while(attempts < MAX_ATTEMPTS) { delay250ms(); UART_Send((unsigned char*)send, strlen(send)); delay250ms(); if(!resp) break; // Case where no response is required if(WiFly_Match(resp)) break; attempts++; } // return failure if(attempts >= (MAX_ATTEMPTS - 1)) status = false; return status; }
int main(void) { int i = 0; // Counter to be displayed on LEDs int c = 0; // Counter to determine the 5th and 10th rising pulse DDRC = 0x30; // Set PortC.4 and PortC.5 as an output DDRB = 0xFF; // Set all of PortB as an output PORTB = 0; // Initialize PortB to output 0 PORTC = 0; // Initialize PortC to output 0 while (1) { delay250ms(); // Call the Delay Function i++; // Increment the 8 bit-counter PORTB = i; // Output the 8-bit counter to port B c++; // Increment the toggle counter switch(c) { // Switch Statement to determine which bits to toggle case 5 : PORTC = 0x20; break; case 10 : PORTC = 0x10; break; case 15 : PORTC = 0x30; break; case 20 : PORTC = 0x00; c = 0; break; } delay250ms(); } }
//播放指定的电台 void playStation() { if(! powerUp) //如果模块没有上电,则上电并初始化音量 { //开继电器 RELAY_POWER=0; delay250ms(); //延时给模块上电,避免继电器的干扰造成模块工作异常 //Power Up RDA5802PowerUp(1); powerUp=1; delay250ms(); //开喇叭 RELAY_SPEAKER=0; //延时开喇叭,避免爆炸声 //Init volume RDA5802SetVolume(currentVol); } //调谐到指定的电台 RDA5802Tune( presetStations[currentStationIndex] ); }
// Initializes the WiFly module void WiFly_Init(void) { UART_Init(); WiFly_Send(EXIT_CMD, NO_RSP); delay250ms(); }
void main(void) { unsigned char cnt=0, i, j; unsigned char receivedByte; bit validKeyPressed = 0; union { unsigned char byteVal[2]; unsigned int intVal; } keyValue; RDA5802Init(); // RDA5802ForceMono( 0 ); // RDA5802BoostBass( 1 ); RDA5802SetVolume( currentVol ); //初始化红外口 IR=1; RELAY_SPEAKER=1;//继电器关 RELAY_POWER=1; while(1) { validKeyPressed = 0; //如果检测到合法按键,则此变量将被置1 // 等待下降沿 while(IR); //记录9ms低电平的长度 cnt=0; while((!IR)&& cnt<IR_COUNT_TIME_OUT ) { delay50us(); cnt++; } if(cnt<170||cnt>180) continue; //9ms低电平不符合,判为干扰 //记录4.5ms高电平的长度 cnt=0; while(IR && cnt<IR_COUNT_TIME_OUT ) { delay50us(); cnt++; } if(cnt<80||cnt>95) continue; //4.5ms高电平不符合,判为干扰 //收取4个字节 for( i=0; i<4; i++ ) { receivedByte=0; for( j=0; j<8; j++ ) { //记录0.56ms低电平 cnt=0; while(!IR && cnt<IR_COUNT_TIME_OUT ) { delay50us(); cnt++; } if(cnt<8||cnt>15) continue; //0.56ms低电平不符合,判为干扰 //记录高电平长度,决定是0还是1 cnt=0; while(IR && cnt<IR_COUNT_TIME_OUT ) { delay50us(); cnt++; } if( cnt>7 && cnt<16 )//0.56ms高电平,判为0 { if( j!=0 ) receivedByte <<= 1; //首位不用左移 } else if(cnt>28 && cnt<40)//1.68ms高电平,判为0 { //该位为1 if( j!=0 ) receivedByte <<= 1; //首位不用左移 receivedByte |= 1; } else break; //低电平不符合0.56ms或1.68ms,判为干扰 } if( cnt >= IR_COUNT_TIME_OUT) break; //干扰 //第一字节为0x00,第二字节为0xff //第三、四字节为键值 if( i==0 && receivedByte!=0 ) break; else if( i==1 && receivedByte!=0xff ) break; else if( i==2 ) { keyValue.byteVal[0] = receivedByte; } else if( i==3 ) { keyValue.byteVal[1] = receivedByte; validKeyPressed = 1; //检测到了合法按键 } } if(validKeyPressed) { //检测到合法的按键了 switch( keyValue.intVal ) { // case 0xa25d: //CH- // case 0x629d: //CH // case 0xe21d: //CH+ // if(powerUp) // { // RDA5802PowerUp(0); // powerUp=0; // } // break; // case 0x22dd: //|<< // RDA5802PowerUp(0); // break; // // case 0x02fd: //>>| // RDA5802PowerUp(1); // break; case 0xe01f: //VOL- if( powerUp && (currentVol>1) ) { currentVol--; RDA5802SetVolume(currentVol); } break; case 0xa857: //VOL+ if( powerUp && (currentVol<15) ) { currentVol++; RDA5802SetVolume(currentVol); } break; case 0x906f: //EQ (Power Off) if(powerUp) { RELAY_SPEAKER=1; delay250ms(); delay250ms(); RELAY_POWER=1; //延时关电源,避免爆炸声 RDA5802PowerUp(0); //关模块 powerUp=0; } break; case 0x30cf: //1 currentStationIndex=0; playStation(); break; case 0x18e7: //2 currentStationIndex=1; playStation(); break; case 0x7a85: //3 currentStationIndex=2; playStation(); break; case 0x10ef: //4 currentStationIndex=3; playStation(); break; case 0x38c7: //5 currentStationIndex=4; playStation(); break; case 0x5aa5: //6 currentStationIndex=5; playStation(); break; case 0x42bd: //7 currentStationIndex=6; playStation(); break; default: break; } } } }