📄 main.c
字号:
flag=flag+1;
}
}
else l=0;
}
}
//wait for a new line
while ( getchar_UART(100000)!=10)
{
l=l;
}
com_out=0; //reset timeout flag
return match;
}
//////////////////////////////////////////////////////////////////////////////////////////
void Delay (unsigned long a) { while (--a!=0); }
//////////////////////////////////////////////////////////////////////////////////////////
void Togle_REL1 (void)
{
DDRC |= 0x80;
PORTC ^= 0x80;
}
void Set_REL1 (void)
{
DDRC |= 0x80;
PORTC|= 0x80;
}
void Togle_REL2 (void)
{
DDRC |= 0x40;
PORTC ^= 0x40;
}
void Set_REL2 (void)
{
DDRC |= 0x40;
PORTC |= 0x40;
}
void Togle_LED (void)
{
DDRD |= 0x80;
PORTD ^= 0x80;
}
void delay_ms(uint16_t ms)
{
while(ms--) _delay_ms(1.0);
}
////////////////////////////////////////////////////////////
void SendStatus(void)
{
int i;
i=0;
if(PINB & 0b00000001)
{
sprintf(message,"IN1=1,");
i=i+6;
}
else {sprintf(message,"IN1=0,");
i=i+6;
}
if(PIND & 0b00000100)
{
sprintf(message +i,"IN2=1,");
i=i+6;
}
else {
sprintf(message +i,"IN2=0,");
i=i+6;
}
if(PORTC & 0b10000000)
{
sprintf(message +i,"RELAY1=1,");
i=i+9;
}
else {
sprintf(message +i,"RELAY1=0,");
i=i+9;
}
if(PORTC & 0b01000000)
{
sprintf(message +i,"RELAY2=1,");
i=i+9;
}
else {
sprintf(message +i,"RELAY2=0,");
i=i+9;
}
if(PINA & 0b00000100)
{
sprintf(message +i,"PINA2=1,");
i=i+8;
}
else {
sprintf(message +i,"PINA2=0,");
i=i+8;
}
if(PINA & 0b00000010)
{
sprintf(message +i,"PINA1=1,");
i=i+8;
}
else {
sprintf(message +i,"PINA1=0,");
i=i+8;
}
if(PINA & 0b00000001)
{
sprintf(message +i,"PINA0=1,");
i=i+8;
}
else {
sprintf(message+i,"PINA0=0,");
i=i+8;
}
if(PINB & 0b10000000)
{
sprintf(message +i,"PINB7=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB7=0,");
i=i+8;
}
if(PINB & 0b01000000)
{
sprintf(message +i,"PINB6=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB6=0,");
i=i+8;
}
if(PINB & 0b00100000)
{
sprintf(message +i,"PINB5=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB5=0,");
i=i+8;
}
if(PINB & 0b00100000)
{
sprintf(message +i,"PINB5=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB5=0,");
i=i+8;
}
if(PINB & 0b00010000)
{
sprintf(message +i,"PINB4=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB4=0,");
i=i+8;
}
if(PINB & 0b00001000)
{
sprintf(message +i,"PINB3=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB3=0,");
i=i+8;
}
if(PINB & 0b00000100)
{
sprintf(message +i,"PINB2=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB2=0,");
i=i+8;
}
if(PINB & 0b00000010)
{
sprintf(message +i,"PINB1=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB1=0,");
i=i+8;
}
if(PINB & 0b00000001)
{
sprintf(message +i,"PINB0=1,");
i=i+8;
}
else {
sprintf(message +i,"PINB0=0,");
i=i+8;
}
if(PIND & 0b00001000)
{
sprintf(message +i,"BTN=1.");
i=i+6;
}
else {
sprintf(message +i,"BTN=0.");
i=i+6;
}
}
int send_sms(char * message)
{
int k=sizeof(sms_send);
memcpy(sms_send_number,sms_send,k); //send SMS header
memcpy(sms_send_number+k,sms_number,sizeof(sms_number)); //GSM number
//TODO !!!!!!!read sms_number to find its length
k+=12;
sms_send_number[k++]='"'; //collons
sms_send_number[k]='\0'; //terminate string
Send_UART(sms_send_number);
a=65535;
while(--a!=0);
if (rx_counter != 0)
{
while(!(proba == '>')) //HERE sending SMS works
proba=getchar_UART(100000);
Send_UART2(message);
}//end sending
com_out=0;
if(!waitplus())
return 0;
com_out=0;
do
{
proba=getchar_UART(100000);
index1=index1;
}
while(proba != 10); //skip first line, read message text on second line
com_out=0;
if(!waitOK())
return 0;
com_out=0;
a=65535;
return 1;
}
/////////////////////////////////////////////////////////////////////////////
/*
Following SMS request/response couples are realized:
received SMS content sent SMS content
GETSTATUS EXT inputs,IN1,IN2,B1
SETRELAY1 set Relay1
SETRELAY2 set Relay2
*/
//=====================================================================================================
int main(void)
{
// asm volatile("sei");
// Declare your local variables here
k=0;
er=0;
int del1,del2;
int ch;
ch=0;
del2=0;
char ctemp[25];
for (del1=0;del1<160;del1++)
message[del1]="";
//init UART and I/O ports
Init();
//delay_ms(400);
a=65556;
while(--a!=0);
///////////////////////act as PowerKey-it should be hold down about 1-2 seconds
DDRA = 0b00000100;//PA2 out in zero
Delay(1500000);
PORTA &=0b11111011;
DDRA &=0b11111011;//PA2 back input
////////////////////wait for Call Ready/////////////////////////////////////
while(rx_counter==0);
call_ready(); // return 0;
gsmconfig();
//////////////////////////////////////////////////////////////////////////////////////////////////////
while (1)
{
// TCCR1A =0x00;
if (rx_counter != 0)
{
k=0;
del2=0;
if(waitplus())
{
TCCR1A =0x00; //disable buzzer ring sound
do
{
proba=getchar_UART(100000);
if ((proba != 13) && (proba != 10))
{temp_array[k++]=proba;//sms message command sent
if(isdigit(proba))
smsind[del2++]=proba;}
}
while(proba != 10); //LF
com_out=0;
ch=atoi(smsind);
sprintf(sms_read_comm,"AT+CMGR=%d",ch);
if(Compare2()){
Send_UART(sms_read_comm);//send command to read SMS content
a=65535;
while(--a!=0);
waitplus();
k=0;
colcount=0;
do
{
proba=getchar_UART(100000);
if(proba=='"')
colcount++;
if(colcount==3) if(isdigit(proba))
sms_number[k++]=proba;
index1=index1;
}
while(proba != 10); //skip first line, read message text on second line
sms_number[k]='\0';
com_out=0;
k=0;
// temp_array[k++]=proba;
do
{
proba=getchar_UART(100000);
if ((proba != 13) && (proba != 10))
temp_array[k++]=proba;//read command sent with sms message
}
while(proba != 10); //waiting for end of line
com_out=0;
waitOK();
com_out=0;
if (Comparereq(setrelay1)==1)
{
Set_REL1(); //setting Relay1
SendStatus(); //getting port status
if (PORTC & 0b10000000)
{
send_sms(message);
}
else {
send_sms("Command execution failure");
}
}
else if (Comparereq(setrelay2)==1)
{
Set_REL2(); //setting Relay1
SendStatus(); //getting port status
if (PORTC & 0b01000000)
{
send_sms(message);
}
else {
send_sms("Command execution failure");
}
}
else if(Comparereq(status)==1)
{ //sending port status in SMS
Togle_LED();
SendStatus();
send_sms(message);
}//end send status
}//end Compare2
}//end waitplus //UNCOMMENT THIS
else
{ k=0;
temp_array[k++]=proba;
do
{
proba=getchar_UART(100000);
if (proba != 10) temp_array[k++]=proba;
}
while(proba != 10); //LF
com_out=0;
k=0;
TCCR1A =0x00;
if(Compare())
{
//Togle_REL1();
TCCR1A ^=0x10; // disable buzzer ring sound
}
}
}//end USART FIFO read
}//end main cycle
////////////////////////////////////////////////////////////////////////////////////////////
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -