解决sim800c模块不能连续给多个手机号码发短信问题

首先sim800c模块主要是通过AT指令操作发短信和打电话的,一般在串口助手上调试,但是这种方法并不适合我们实际做项目。所以我们通常通过MCU控制串口发送字符串(注意:换行(\r\n)和双引号(\"))来操作sim800c模块。

以下是我在做项目时遇到的问题和解决方法。

for(m=0; m < phone_count; m++)    /*phone_count是号码的个数*/
	{
		for (i = 0;i < 11;i++)
		{
			b[i][0] = 0;
			b[i][1] = 0;
			b[i][2] = 3;
			b[i][3] = (int)read_iphone[m][i];    /*read_iphone二维数组里存放的多组号码*/
		}
		u3_printf("AT+CMGF=1\n");//发送短信内容到GSM模块
		delay_ms(1000);    /*要想连续发送短信,必须在AT指令执行后加上1s左右的延迟*/
		u3_printf("AT+CSMP=17,167,2,25\n");
		delay_ms(1000);
		u3_printf("AT+CSCS=\"UCS2\"\n");
		delay_ms(1000);
		u3_printf("AT+CMGS=");
		u3_printf("\"");
		for (i = 0;i < 11;i++)
			for(j=0; j<4; j++)
				u3_printf("%d", b[i][j]);
		u3_printf("\"");
		u3_printf("\n");
		delay_ms(1000);
		u3_printf("7740706B4E86");/*短信内容:着火了*/
		delay_ms(1000);
		USART_SendData(USART3,0X1A);
		memset(b ,0, sizeof(b));
		delay_ms(1000);
	}

首先,phone_count是flash中存储的号码个数,通过一个for循环连续给手机发送信息。由于发短信需要将手机号码转成unicode编码,但我发现手机号码转成unicode编码时有一个规律,比如,手机号码为12345678900转化成unicode编码就是"00310032003300340035003600370038003900300030"。发现规律了嘛。就是在我们输入的手机号每一位前面加上003!!!所以我将二维数组read_iphone内保存的手机号码转化成unicode编码保存在二维数组b中(就是将手机号码每一位的前面加上003)

最重要的来了!接下来就是发送AT指令,我之前写的每发送一条AT指令后延迟200ms,但是出现了错误,就是模块会隔一个手机号发送一次短信(只会发第1,3,5个手机号的短信)。最后调试发现在每条AT指令后都得延迟1s左右的时间,(注意是每条AT指令后都得加延迟)最终实现的连续发送短信的功能。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Do My Best

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值