你好,
我写了一个新的AT命令与1wire:
else if (user_compare_cmd(“1线”,1,2))
{
TM_OneWire_t噢;
Uint8_t port = ahtoi((char*)argument_array[0]);
port_number = port / 10;
Uint8_t pin_number = port % 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(消息,true)
无效user_reply(char* reply_string, bool success)
{
如果(! codeless_env.suppress_response)
{
如果(成功)
{
//添加'OK'到响应
如果(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上的值打印到终端。
命令发送和执行非常有效。
但问题是它发送了一些东西给master但是master只打印第一个
codeless_env.command_route = CMD_ROUTE_UNDEFINED 1次
如果有的话,是最后的十倍
// codeess_env .command_route = CMD_ROUTE_UNDEFINED in void user_reply(char* reply_string, bool success)
我不明白他为什么只打印出uart2上的最后一个。
致以最亲切的问候
哥特
嗨,哥特,
您正在破坏命令流,因为您反复使用user_reply()。当接收到远程AT命令时,CodeLess将codeless_env.command_route设置为CMD_FROM_PEER_RESP_PEER,以确保回复返回到命令发送者。一旦为传输准备好应答,command_route被设置为CMD_ROUTE_UNDEFINED,以允许接收下一个命令(通过蓝牙或UART)。
在do-while循环中,不要使用user_reply(),只需将整个响应记录回给对等体。然后在循环外部,使用user_reply()将整个字符串作为一个回复传输。这允许CodeLess命令流保持完整。但是请记住,回复的长度只能是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