你好,
我用1wire编写了一个新的AT命令:
else if (user_compare_cmd(“1线”,1,2))
{
TM_OneWire_t噢;
Uint8_t port = ahtoi((char*)argument_array[0]);
Uint8_t port_number = port / 10;
Uint8_t pin_number =端口% 10;
uint8_t DS_ROM [8];
字符消息[8];
临时浮动;
TM_OneWire_Init(噢,(GPIO_PORT) port_number进行(GPIO_PIN) pin_number);
TM_OneWire_Reset(噢);
如果(TM_OneWire_First(噢)){
/ / Conversasion
TM_DS18B20_StartAll(噢);
systick_wait (750000);/ /等待750 ms
/*搜索下一个设备*/
{做
TM_OneWire_GetFullROM(噢,DS_ROM);
TM_DS18B20_Read(噢,DS_ROM、临时);
sprintf(消息,“% x % x % %, % 0.2 f, 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(噢));
}
}
工作很好,但它我想发送的值在消息peer与user_replay(消息,真)
Void user_reply(char* reply_string, bool success)
{
如果(! codeless_env.suppress_response)
{
如果(成功)
{
//添加'OK'到response
如果(strlen (reply_string) > 0)
sprintf (reply_string“% s \ r \ nOK reply_string);
其他的
reply_string =“OK”;
}
其他的
{
/ /报告的错误
sprintf (reply_string,“错误”);
}
//如果命令来自那里,回复BT Peer(仅在连接的情况下)
if((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+1wire=00从附加的传感器从从(在本例中是10)开始读取,并通过空气将ID和值发送回主!
Master应该通过uart2将该值打印到终端。
命令发送和执行就像一个符咒。
但问题是,它通过空气发送一些东西到主机,但主机只打印了第一个
codeless_env.command_route = CMD_ROUTE_UNDEFINED
如果有的话,是上一个的十倍
//codeless_env.command_route = CMD_ROUTE_UNDEFINED in void user_reply(char* reply_string, bool success)。
我不明白他为什么只打印uart2上的最后一张。
致以最亲切的问候
哥特
嗨,哥特,
因为重复使用user_reply(),所以破坏了命令流。当接收到远程AT命令时,codelless将codeless_env.command_route设置为CMD_FROM_PEER_RESP_PEER,以确保回复返回到命令发送者。一旦回复为传输做好了准备,command_route就被设置为CMD_ROUTE_UNDEFINED,以允许接收下一个命令(通过蓝牙或UART)。
在do-while循环中,不使用user_reply(),只需将您的整个响应记录回给对等对象。然后在循环外部,使用user_reply()将整个字符串作为一个应答进行传输。这允许无代码命令流保持不变。但是记住,回复只能有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;
没有变化!对不起
对我来说,还有一些问题:
在arch_printf()的1000行循环中,我不能打印超过231行。
它将在231线之后停止。
我认为这是一个检查的时间问题,还是广告的干扰?有无代码专家能帮我吗?
嗨gert186,
你的描述有点笼统,请提供更多的信息给我。你说的“台词”是什么意思?你是指角色吗?你能告诉我你是否正在使用任何睡眠模式配置吗?
谢谢,PM_Dialog
没有关闭睡眠模式。
我打印出231倍的字符,但它应该是1000:-)字符是“1”
嗨gert186,
你的描述仍然很笼统。你做不到的原因有很多。您能分享一下您正在使用的代码片段吗?
谢谢,PM_Dialog