从Matlab发送短信,并确保所有收件人获得短信
我创build了一个matlab
代码,它从Excel文件的列O
获取电话号码,然后,它发送一个sms
给他们。
它的工作,但发送sms
时有问题。 似乎matlab
不会等到我的调制解调器完成第一个sms
。 所以,当excel栏有8个电话号码时,调制解调器只能发送一个sms
到前3-4个。 这是代码:
[num MP]=xlsread('D:\Ray\Data.xls',1,'O:O'); %get the phone numbers from excel MP=MP(cellfun(@(x)not(isempty(x)),MP)); %remove the empty cells [row column]=size(MP); %get the number of the phone numbers t1=char(13); %(for doing 'enter') t2=char(26); %(for doing 'ctrl+z) sms='hello'; %SMS content t4=sprintf('%s',sms); t5='AT+CMGF=1'; %for text mode s = serial('COM5'); s.baudrate=9600; fopen(s); %open serial COM5 (my modem) fprintf(s,'%s', t5); fprintf(s,'%s', t1); for q=1:row t3=sprintf('AT+CMGS="%s"',char(MP(q))); fprintf(s,'%s', t3); fprintf(s,'%s', t1); fprintf(s,'%s', t4); fprintf(s,'%s', t2); end fclose(s)
我想知道如何使matlab
等待,直到我的调制解调器完成与第一个电话号码之前试图发送sms
到第二个号码,所以所有的电话号码可以得到sms
。
有什么build议么?
提前致谢。
作为一个非常简单的解决scheme,如果您知道发送短信合理需要多less时间,则可以使用pause
语句强制Matlab等待。 例如,如果发送单个SMS需要约3秒钟,则添加
pause(3)
进入循环。
请注意,如果由于某种原因,发送比预期花费的时间要长得多,这种方法将失败(或者必须设置很长的代码变得不可用的暂停)。 一个更聪明,但更复杂的解决scheme是查询调制解调器或COM端口在@Danielbuild议在评论。
使用调制解调器执行AT命令时,应始终遵循调制解调器硬件制造商的build议。 他们通常build议等待(睡眠)时间,最重要的是你应该确保你的代码等待命令终止代码,如OK或ERROR等。
在我的评论中,我认为响应消息有1个字节。 您的调制解调器应答超过1个字节,因此发送第二个SMS时,队列中的第一个SMS已经有一个字节。 你必须得到完整的答案,这似乎有9个字节。
for q=1:row t3=sprintf('AT+CMGS="%s"',char(MP(q))); fprintf(s,'%s', t3); fprintf(s,'%s', t1); fprintf(s,'%s', t4); fprintf(s,'%s', t2); %read all 9 answer bytes B=fread(s,9,'char'); end
显然你应该检查答案B