GPRS模块可以在实时发送经纬度到服务器期间,按键触发,发送另一条数据到这个服务器的另一个端口吗?

2019-07-18 14:11发布

试过直接用if(S2==0)放在void sendDataToServer()后面判断按键的方法不行#include "main.h"#include "uart.h"#include "LCD1602.h"
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <REG52.h>
//常量
#define Success 1U#define Failure 0U//定义变量unsigned long  time_Cont = 0;       //定时器计数器_SaveData Save_Data;sbit s2=P2^2;code char TCPServer[] = "120.79.207.145";                //TCP服务器地址code char Port[] = "80";                                                //端口code char Port2[] = "8000";                                                //端口2char flagConnect = 0;
//****************************************************//主函数//****************************************************void main(){        unsigned char i = 0;        Uart_Init();        delay_ms(10);        Init_LCD1602();        LCD1602_write_com(0x80);        LCD1602_write_word("Welcome to      ");        LCD1602_write_com(0x80+0x40);        LCD1602_write_word("   Rescue system");        clrStruct();        //清空缓存数组
        if (sendCommand("AT ", "OK ", 3000, 10) == Success);        else errorLog();        delay_ms(10);
        if (sendCommand("AT+CPIN? ", "READY", 1000, 10) == Success);        else errorLog();        delay_ms(10);
        if (sendCommand("AT+CREG? ", ",1", 1000, 10) == Success);        else        {                delay_ms(10);                if (sendCommand("AT+CREG? ", ",5", 1000, 10) == Success);                else errorLog();        }
        if (sendCommand("AT+QGNSSC? ", "+QGNSSC: 1", 1000, 1) == Success);        else if (sendCommand("AT+QGNSSC=1 ", "OK ", 100, 10) == Success);        else errorLog();
        if (sendCommand("AT+QICLOSE ", " ", 5000, 10) == Success);        else errorLog();        delay_ms(100);                if (sendCommand("AT+QIDEACT ", " ", 5000, 10) == Success);        else errorLog();
        while(1)        {

                if (sendCommand("AT+QGNSSRD="NMEA/RMC" ", "OK ", 2000, 10) == Success);                else errorLog();                                Save_Data.isGetData = true;                memset(Save_Data.GPS_Buffer, 0, 120);      //清空                memcpy(Save_Data.GPS_Buffer, Rec_Buf, point1);


                parseGpsBuffer();                printGpsBuffer();
                                                delay_ms(4000);        
                        }}

void sendDataToServer(){    xdata char send_buf[100] = {0};        memset(send_buf, 0, 100);    //清空        
       if(s2==0)        {                if(flagConnect == 0)        {                flagConnect = 1;                strcpy(send_buf, "AT+QIOPEN="TCP","");                strcat(send_buf, TCPServer);                strcat(send_buf, "","");                strcat(send_buf, Port2);                strcat(send_buf, "" ");                if (sendCommand(send_buf, "CONNECT OK", 10000, 5) == Success);                else errorLog();                  delay_ms(100);        }        //发送数据        if (sendCommand("AT+QISEND ", ">", 3000, 5) == Success);        else errorLog();        delay_ms(1000);        memset(send_buf, 0, 100);    //清空                {sprintf(send_buf,"%s N,%s E ID01 SOS ",                Save_Data.latitude,Save_Data.longitude        );}                                  Init_LCD1602();                        LCD1602_write_com(0x80);                        LCD1602_write_word("Message has     ");                        LCD1602_write_com(0x80+0x40);                        LCD1602_write_word("     been sent  ");    if (sendCommand(send_buf, send_buf, 3000, 1) == Success);        else errorLog();                delay_ms(10);                SendData(0x1a);//发送数据 }        else        {        if(flagConnect == 0)        {                flagConnect = 1;                strcpy(send_buf, "AT+QIOPEN="TCP","");                strcat(send_buf, TCPServer);                strcat(send_buf, "","");                strcat(send_buf, Port);                strcat(send_buf, "" ");                if (sendCommand(send_buf, "CONNECT OK", 10000, 5) == Success);                else errorLog();                delay_ms(100);        }        //发送数据        if (sendCommand("AT+QISEND ", ">", 3000, 5) == Success);        else errorLog();        delay_ms(1000);        memset(send_buf, 0, 100);    //清空                        {sprintf(send_buf,"%s N,%s E ID01 ",                Save_Data.latitude,Save_Data.longitude); }                if (sendCommand(send_buf, send_buf, 3000, 1) == Success);        else errorLog();        delay_ms(10);                SendData(0x1a);}//发送数据                
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
zhangxjjoy
2019-07-18 15:37


void errorLog()
{
        while (1)
        {
                  if (sendCommand("AT ", "OK ", 100, 10) == Success)
                {
                        soft_reset();
                }
                delay_ms(200);
        }
}

void soft_reset(void)         //制造重启命令
{
   ((void (code *) (void)) 0x0000) ();
}

unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
{
        unsigned char n;
        CLR_Buf();
        for (n = 0; n < Retry; n++)
        {
                SendString(Command);                 //发送GPRS指令

                Time_Cont = 0;
                while (Time_Cont < Timeout)
                {
                        delay_ms(100);
                        Time_Cont += 100;
                        if (strstr(Rec_Buf, Response) != NULL)
                        {
                                return Success;
                        }
                       
                }
                Time_Cont = 0;
        }
      
        CLR_Buf();
        return Failure;
}

void parseGpsBuffer()
{
        char *subString;
        char *subStringNext;
        char i = 0;
        if (Save_Data.isGetData)
        {
                Save_Data.isGetData = false;
//                SendString("************** ");
//                SendString(Save_Data.GPS_Buffer);

               
                for (i = 0 ; i <= 6 ; i++)
                {
                        if (i == 0)
                        {
                                if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
                                        errorLog();        //解析错误
                        }
                        else
                        {
                                subString++;
                                if ((subStringNext = strstr(subString, ",")) != NULL)
                                {
                                        char usefullBuffer[2];
                                        switch(i)
                                        {
//                                                case 1:memcpy(Save_Data.UTCTime, subString, subStringNext - subString);break;        //获取UTC时间
                                                case 2:memcpy(usefullBuffer, subString, subStringNext - subString);break;      
                                                case 3:
                                                memset(Save_Data.latitude, 0, latitude_Length);
                                                memcpy(Save_Data.latitude, subString, subStringNext - subString);break;        //获取纬度信息
                                                case 4:
                                                memset(Save_Data.N_S, 0, N_S_Length);
                                                memcpy(Save_Data.N_S, subString, subStringNext - subString);break;        //获取N/S
                                                case 5:
                                                memset(Save_Data.longitude, 0, longitude_Length);
                                                memcpy(Save_Data.longitude, subString, subStringNext - subString);break;        //获取经度信息
                                                case 6:
                                                memset(Save_Data.E_W, 0, E_W_Length);
                                                memcpy(Save_Data.E_W, subString, subStringNext - subString);break;        //获取E/W

                                                default:break;
                                        }

                                        subString = subStringNext;
                                        Save_Data.isParseData = true;
                                        if(usefullBuffer[0] == 'A')
                                                Save_Data.isUsefull = true;
                                        else if(usefullBuffer[0] == 'V')
                                                Save_Data.isUsefull = false;

                                }
                                else
                                {
                                        errorLog();        //解析错误
                                }
                        }


                }
        }
}

void printGpsBuffer()
{
        if (Save_Data.isParseData)
        {
                Save_Data.isParseData = false;
               
//                SendString("Save_Data.UTCTime = ");
//                SendString(Save_Data.UTCTime);
//                SendString(" ");

                if(Save_Data.isUsefull)
                {
//                        Save_Data.isUsefull = false;
//                        SendString("Save_Data.latitude = ");
//                        SendString(Save_Data.latitude);
//                        SendString(" ");
//
//
//                        SendString("Save_Data.N_S = ");
//                        SendString(Save_Data.N_S);
//                        SendString(" ");
//
//                        SendString("Save_Data.longitude = ");
//                        SendString(Save_Data.longitude);
//                        SendString(" ");
//
//                        SendString("Save_Data.E_W = ");
//                        SendString(Save_Data.E_W);
//                        SendString(" ");

                        LCD1602_write_com(0x80);
                        LCD1602_write_word(Save_Data.latitude);
                        LCD1602_write_data(' ');
                        LCD1602_write_word(Save_Data.N_S);
                        LCD1602_write_word("                ");
                       
                        LCD1602_write_com(0x80+0x40);
                        LCD1602_write_word(Save_Data.longitude);
                        LCD1602_write_data(' ');
                        LCD1602_write_word(Save_Data.E_W);
                        LCD1602_write_word("                ");

                        sendDataToServer();
      
                }
                else
                {
//                        SendString("GPS DATA is not usefull! ");
                        LCD1602_write_com(0x80);
                        LCD1602_write_word("GPS DATA is     ");
                        LCD1602_write_com(0x80+0x40);
                        LCD1602_write_word("  not usefull  ");
                }
               
        }
}

void clrStruct()
{
        Save_Data.isGetData = false;
        Save_Data.isParseData = false;
        Save_Data.isUsefull = false;
        memset(Save_Data.GPS_Buffer, 0, GPS_Buffer_Length);      //清空
//        memset(Save_Data.UTCTime, 0, UTCTime_Length);
        memset(Save_Data.latitude, 0, latitude_Length);
        memset(Save_Data.N_S, 0, N_S_Length);
        memset(Save_Data.longitude, 0, longitude_Length);
        memset(Save_Data.E_W, 0, E_W_Length);
      
}

//****************************************************
//MS延时函数
//****************************************************
void delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<123;j++);
}

一周热门 更多>