你好,
我写了一个新的AT命令和的1-Wire:
else if (user_compare_cmd(“1线”,1,2))
{
TM_OneWire_t噢;
uint8_t端口= ahtoi((字符*)argument_array [0]);
uint8_t端口号=端口/ 10;
Uint8_t pin_number =端口% 10;
uint8_t DS_ROM [8];
炭消息; [8]
浮动温度;
TM_OneWire_Init(OW,(GPIO_PORT)端口号,(GPIO_PIN)pin_number);
TM_OneWire_Reset(OW);
如果(TM_OneWire_First(噢)){
// Conversasion
TM_DS18B20_StartAll(OW);
systick_wait(750000);//等待为750ms
/ *搜寻下一个设备* /
做 {
TM_OneWire_GetFullROM(OW,DS_ROM);
TM_DS18B20_Read(OW,DS_ROM,&温度);
的sprintf(消息, “%X%x%的X%的x,%0.2F”,DS_ROM [4],DS_ROM [5],DS_ROM [6],DS_ROM [7],温度);// DS_ROM [0],DS_ROM [1],DS_ROM [2],DS_ROM [3],
/ / arch_printf (ATr +打印= % s \ r”,消息);
user_reply(消息,真的);
}, (TM_OneWire_Next(噢));
}
}
工作正常,但我想在消息user_replay值发送给同行(消息,真)
Void user_reply(char* reply_string, bool success)
{
如果(!codeless_env.suppress_response)
{
如果(成功)
{
//追加“确定”回应
如果(strlen的(reply_string)> 0)
的sprintf(reply_string, “%S \ r \ NOK”,reply_string);
别的
reply_string = “OK”;
}
别的
{
/ /报告的错误
的sprintf(reply_string, “ERROR”);
}
//如果命令来自那里,回复BT Peer(仅在连接的情况下)
如果((codeless_env.command_route == CMD_FROM_PEER_RESP_PEER)&&(ke_state_get(TASK_APP)== APP_CONNECTED))
{
send_to_peer(reply_string);
}
else if(codeless_env.command_route == CMD_FROM_LOCAL_RESP_LOCAL)
{
//通过串口本地回复
arch_puts( “\ r \ n”);
arch_puts (reply_string);
arch_puts( “\ r \ n”);
arch_printf_process ();
}
/ / codeless_env.command_route = CMD_ROUTE_UNDEFINED;
}
}
我只得到了最后一个字符串。如果我安装了10个传感器,是上一个的10倍.....
如果我取消注释//codeless_env.command_route = CMD_ROUTE_UNDEFINED;
然后,我只得到了第一个..
有人可以帮助我,请理解这个问题?
此致
哥特
嗨,哥特,
请尽量描述您要完成的任务。您的代码单独上市叶子太多的未知数:O)
具体地说,我需要了解您是否实际试图在本地发出命令,并希望回复返回到空中的对等端。另外,我需要你交换多少数据。应答字符串被限制为160个字符。
/ MHV
好吧,
我想从主发送到从站:
ATr中+的1-Wire = 00开始从连接的传感器上的从一个读(在这种情况下10)和发送ID和值通过空中回主!
船长应打印在UART2到终端,价值观。
发送命令并执行就像一个魅力的作品。
但问题是,它发送的东西在空中的主,但主只打印先用
codeless_env.command_route = CMD_ROUTE_UNDEFINED
和10倍,最后,如果你有
//codeless_env.command_route = CMD_ROUTE_UNDEFINED空隙user_reply(字符* reply_string,布尔成功)。
我不明白为什么他只printig出来UART2最后一个。
此致
哥特
嗨,哥特,
您正在打破命令的流动,因为多次使用user_reply()。当接收到远程AT命令,无代码设置codeless_env.command_route到CMD_FROM_PEER_RESP_PEER这确保了回复返回到命令发起者。一旦应答具有本用于传输准备的command_route设为CMD_ROUTE_UNDEFINED以允许要被接收的下一个命令(经由蓝牙或UART)。
在您do-while循环,而不是使用user_reply(),简单地记录整个响应返回给同行。然后在循环外,使用user_reply()到整个串发射作为一个答复。这允许无代码commandflow保持不变。但要记住,回答只能是160个字符。
/ MHV
嗨,哥特,
请尝试在测试前关闭休眠模式。
致以最亲切的问候
我应该在哪里关闭休眠模式?在user_replay功能?
在user_config.h
将以下变量更改为ARCH_SLEEP_OFF。
/ ******************************************
*默认休眠模式。可能的值有:
*
* - ARCH_SLEEP_OFF
*——ARCH_EXT_SLEEP_ON
* - ARCH_EXT_SLEEP_OTP_COPY_ON
*
******************************************
* /
static const sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF.;/ / ARCH_EXT_SLEEP_ON;
没有变化!对不起
对我来说,也存在着一些问题:
在1000循环在arch_printf我不能打印超过231线()。
231线后,它才停止。
我认为这是一个检查的时间问题,还是广告的干扰?有无代码专家能帮我吗?
嗨gert186,
您的描述有点通用的,请提供我关于它的详细信息。你是什么意思与“行”?你的意思是字符?你可以请让我知道,如果你使用任何休眠模式的配置?
谢谢,PM_Dialog
没有睡眠模式被关闭。
我打印出231倍的字符,但它应该是1000 :-)字符为“1”
嗨gert186,
您的描述仍然是通用。原因有很多,你是不是能够做到这一点。你能否请您分享的代码片段,您正在使用?
谢谢,PM_Dialog