📄 camel.c
字号:
{
//SpeakerToMan(); //切换到人机直接扬声模式
}
void voiceRecord(void)
{
//SpeakerToMan(); //切换到人机直接扬声模式
speakerRecInitSet=0;
}
//关闭声音,电机,但是机器人还是属于受控状态
void stopAll(void)
{
MotorStop();
//SpeakerSignalDown();
}
//测试手机状态,保证系统能够进入
void GSMConnect(void)
{
uchar connectCounter;
//上电后软件开机
GSMPressOn();
//延时一段时间
GSMTimerCounter=0;
while(GSMTimerCounter<10)
{
GSMtemp++;
}
GSMPressOff();
//statusLedOn();
//延时一段时间,等待系统稳定
GSMTimerCounter=0;
while(GSMTimerCounter<100)
{
GSMtemp++;
}
//statusLedOff();
//测试AT通讯是否正常
//首先清掉串口接收的数据
connectCounter=5;
while(connectCounter--)
{
for(GSMtemp=0;GSMtemp<100;GSMtemp++)
{
GSMReceiveTemp[GSMtemp]=0;
}
//首先清除掉所有的数据
receiveData(GSMReceiveTemp,100);
//发送一个测试字符串
sendData(GSMATConnectTest,4);
//延时一段时间
GSMTimerCounter=0;
while(GSMTimerCounter<2)
{
GSMtemp++;
}
for(GSMtemp=0;GSMtemp<100;GSMtemp++)
{
GSMReceiveTemp[GSMtemp]=0;
}
receiveData(GSMReceiveTemp,100);
if((GSMReceiveTemp[5]=='O')&&(GSMReceiveTemp[6]=='K'))
{
//能够正常通讯
break;
}
}
//设置系统为自动接听
connectCounter=5;
while(connectCounter--)
{
for(GSMtemp=0;GSMtemp<100;GSMtemp++)
{
GSMReceiveTemp[GSMtemp]=0;
}
//首先清除掉所有的数据
receiveData(GSMReceiveTemp,100);
//发送一个测试字符串
sendData(GSMATAcceceptMode,8);
//延时一段时间
GSMTimerCounter=0;
while(GSMTimerCounter<2)
{
GSMtemp++;
}
for(GSMtemp=0;GSMtemp<100;GSMtemp++)
{
GSMReceiveTemp[GSMtemp]=0;
}
receiveData(GSMReceiveTemp,100);
if((GSMReceiveTemp[9]=='O')&&(GSMReceiveTemp[10]=='K'))
{
//成功设置自动接听
break;
}
}
//test
//statusLedOn();
}
//测试GSM模块是否已经在线
void GSMConnectTest(void)
{
uchar GSMConnectTestBuffer[100];
uchar connectTestTemp=0;
//发送一个测试字符串
sendData(GSMATOnLineTest,9);
//延时一段时间
GSMTimerCounter=0;
while(GSMTimerCounter<2)
{
GSMtemp++;
}
for(connectTestTemp=0;connectTestTemp<100;connectTestTemp++)
{
GSMConnectTestBuffer[connectTestTemp]=0;
}
receiveData(GSMConnectTestBuffer,100);
if(GSMConnectTestBuffer[17]=='4')
{
//正常在线状态
GSMTalkingFlag=GSMTalkingYes;
}
else
{
//离线状态
GSMTalkingFlag=GSMTalkingNo;
}
}
//call this routine to initialise all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
clear_interrupt(); //disable all interrupts
////////////////////硬件端口定义//////////////////////////////////////////////////////////////////////////////
// 0 1 2 3 4 5 6 7 //
//----------------------------------------------------------------------------------------------------------//
//PORTA X X X A1 A2 A3 A4 RING //
// 0 0 0 1 1 1 1 0 //
//DDRA 0 0 0 0 0 0 0 1 //
//----------------------------------------------------------------------------------------------------------//
//PORTB X X X X X X SPEAKER MOTO //
// 0 0 0 0 0 0 0 0 //
//DDRB 0 0 0 0 0 0 1 1 //
//----------------------------------------------------------------------------------------------------------//
//PORTC X X X X X X RINGCHECK KEYCHECK //
// 0 0 0 0 0 0 1 1 //
//DDRC 1 1 1 1 1 1 0 0 //
//----------------------------------------------------------------------------------------------------------//
//PORTD X X X X X X X X //
// 0 0 0 0 0 0 0 0 //
//DDRC 0 0 0 0 0 0 0 0 //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
DDRD=0x00;
PORTD=0xFF;
//按键键值检测端口
DDRC &=0xF0;
PORTC |=0x0F;
//按键中断端口
DDRD &=0xEF;
PORTD |=0x10;
//指示灯端口
DDRC |=1<<4;
PORTC |=1<<4;
//开机控制端口
DDRC |=1<<5;
PORTC |=1<<5;
//马达控制端口
DDRD |=1<<5;
PORTD |=1<<5;
//喇叭控制接口
DDRB |=0x3E;
PORTB |=0x3E;
//定时T1初始化,100ms
TCCR1B = 0x00; //stop
TCNT1H = 0xCF; //setup
TCNT1L = 0x2C;
OCR1AH = 0x30;
OCR1AL = 0xD4;
OCR1BH = 0x30;
OCR1BL = 0xD4;
ICR1H = 0x30;
ICR1L = 0xD4;
TCCR1A = 0x00;
TCCR1B = 0x03; //start Timer
TIMSK = 0x04;//中断允许
//串口通信初始化
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = (1<<URSEL) | 0x06;
UBRRL = 0x33; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0xD8;
//MCUCR = 0x03;
//GICR = 0x40;s
MCUCR = 0x00;
GICR = 0x00;
set_interrupt(); //re-enable interrupts
//all peripherals are now initialised
}
//===========================================================//
//===========================================================//
int main(void)
{
init_devices();
//sendData(GSMATConnectTest,4);
//UDR=0x55;
//while(1);
//test
//statusLedOn();
//test
statusLedOn();
//连接模块
GSMConnect();
//test
statusLedOff();
//控制数据初始化
KeyFlag=0;
//初始化定时计数
GSMTalkingCounter=0;
/////////////////////////////////////////////////////////////////
while(1)
{
SpeakerPlay();
SpeakerRec();
//检查系统是否正常运作
//周期检查是否处于通话状态
if(GSMTalkingCounter>50)
{
GSMTalkingCounter=0;
//检查系统是否处于通话状态
GSMConnectTest();
if(GSMTalkingFlag==GSMTalkingYes)
{statusLedOn();}
else
{statusLedOff();}
//测试AT通讯是否正常
for(GSMtemp=0;GSMtemp<100;GSMtemp++)
{
GSMReceiveTemp[GSMtemp]=0;
}
//首先清除掉所有的数据
receiveData(GSMReceiveTemp,100);
//发送一个测试字符串
sendData(GSMATConnectTest,4);
//延时一段时间
GSMTimerCounter=0;
while(GSMTimerCounter<2)
{
GSMtemp++;
}
for(GSMtemp=0;GSMtemp<100;GSMtemp++)
{
GSMReceiveTemp[GSMtemp]=0;
}
receiveData(GSMReceiveTemp,100);
//不能够能够正常通讯
//重新启动系统
if((GSMReceiveTemp[5]!='O')&&(GSMReceiveTemp[6]!='K'))
{
//连接模块
GSMConnect();
}
}
//检查是否有按键按下
checkKey();
if(KeyFlag>0)
{
//检测是否在线
//GSMConnectTest();
if(GSMTalkingFlag==GSMTalkingYes)
{
//动作控制状态
switch(KeyNum)
{
//按一下键甩打一下皮鞭
case 1:
hit1();
break;
//按一下键甩打几下皮鞭
case 2:
hit2();
break;
case 3:
break;
//按一下键播一下声音
case 4:
voice1();
break;
//按一下键连续播出录音芯片的声音
case 5:
break;
//远程放声
case 6:
voice3();
break;
//关闭电机,扬声器,但是机器人仍然受控
case 9:
stopAll();
break;
//修改密码
case 10:
break;
case 11:
//修改密码
break;
//录音
case 12:
voiceRecord();
break;
default:
break;
}
}
KeyFlag=0;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -