This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 使用 CC1310和 BOOSTXL-TLV8544PIR 仿真 TIDA 问题

Guru**** 2562120 points
Other Parts Discussed in Thread: TIDA-00489, CC1310, BOOSTXL-TLV8544PIR

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/simulation-hardware-system-design-tools-group/sim-hw-system-design/f/simulation-hardware-system-design-tools-forum/718143/simulating-tida-with-cc1310-and-boostxl-tlv8544pir-issues

器件型号:TIDA-00489
主题中讨论的其他器件: CC1310BOOSTXL-TLV8544PIR

工具/软件:TI-RTOS

嗨、大家好、

我将 CC1310 Launchpad 和 BOOSTXL-TLV8544PIR 传感器与 TIDA-00489固件搭配使用、基本上可以正常工作。 但我面临一些问题、还有一些问题、因为我想对代码进行一些更改。 作为监听器、我将 SmartRF Studio 与另一个 CC1310 Launchpad 搭配使用。

问题:

  1. 我认为 PIR-SHIELD 和 Launchpad 之间的连接松动、因此器件有时会检测和发送动作。 当我可以访问某些测试设备时、我会对连接进行一些测试、但以前是否更频繁地注意到这一点? (只有当 Windows 给我声音时、它才起作用、就像我连接了一些 USB 设备一样)
  2. 我使用"put"向控制台写入一些内容。 这在代码中只能运行一次。 您有什么想法、为什么? (代码如下所示)
  3. 当检测到运动并通过低于1GHz 传输时、我面临一些非常奇怪的行为。
    1. 有时、通过发送 AA、而非 FF、然后发送55来立即指示移动(比较器再次变为低电平后发送55)、然后发送后续的封装/秒、之后发送8-10秒、指示没有发生移动。
    2. 有时我进行移动时、不会发送包裹、但在8-10秒后、他们又来了、尽管没有进一步的移动。

-->有什么想法,为什么有时会有这么大的延迟?

4.当我将 PIR_SALET_TIME 设置为5s、并且我不断进行15秒的移动时、我看到 FF 在 AA 之后像应该那样发送~20秒。 但我不明白为什么第一次检测到移动后再没有 AA 包装发送?!

软件更改:

  1. 我想更改程序流、对移动进行计数并在1分钟后发送它们。 因此、我想让 Hwi 用于检测移动、我想添加 Swi 来每分钟发送#移动。 您能帮我创建另一个时钟来实现 Swi 吗?
  2. 你认为一个任务比 Swi 更适合我吗?
  3. 关于问题4、我希望您能帮我、因为我想、如果 send_package (AA)也不起作用、计数器将不起作用...
  4. 我使用"move"变量进行计数时会发生什么情况、当系统进入睡眠状态时、它会保持为0、如果我在每次唤醒后不初始化它、会有一些随机数吗?

这是很多问题、但我确实想了解设置、以便在我收到 TIDA-Board 时能够正确使用它。

代码如下:

//
*版权所有(c) 2015,Texas Instruments Incorporated
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在

*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、

不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
*/*****

包括***** /#include

#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 

/*驱动程序*/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

//
#include "smartrf_settings/cc13xx_smartrf_settings.h"


/***** 定义了***** /
#define PIR_SETTIN_TIME5000000// 5秒
//#define PIR_SETTIN_TIME30000000 // 30秒(2分钟),索尔特人 SO 拉萨恩,Einschwingzeit beim Einschalten
//#define PIR_SAFE_TIME10000000 // 10秒
#define PIR_SAFE_SAFET_TIME 100000005000000 // 20秒(1分钟),das hier müsste wohl ganz runter auf 1s
#define PIR_SHUTDOWN_TIME 1000000 // 1秒(5秒), beschreibt wie Lange er wartet bevor er nach Senddem en in den sleep geht

#define TX_TASK_STACK_SIZE1024 //每个任务堆栈必须足够大以处理其正常函数调用和两个完全中断 Hwi 上下文。
#define TX_TASK_PRIORITY2 //定义任务的优先级。 较高的优先级(3>2)会导致首选项。

/* TX 配置*/
#define PAYLOAD_LENGTH3. // Vermutlich Angabe in bytes und betrifft Packetgröße beim Senden
#define packet_interval4000000*0.001f // Setzt das intervall auf 1ms,denn f = die Frefrenz des Prozprocessors (=4MHz=250ns)

//#define
move_limit 10. //Anzahl AB wann der Sensor Die Daten schicken soll;

/***** 原型***** //<- sagen Compiler welche Funkionen IHN im Programm erwarten
static void txTaskFunction (UArg0、UArgarg1);// diese Funktion berupttet den kompleten Sende-und Interruptprozess
static void initionalingTask(void); //裸片时钟 für 裸片 Übertragung und 裸片信标未初始化静态
空 radioSyncTxClockCallback (UArg a0);//裸片信标 wrd um einen Wert inkrementiert
static void sendPacket (uint8_t data); // Behandelt explizit den Sendevorgang
void intr_HwiFxn (PIN_Handle hPin、PIN_ID pinId);// Behandelt DEN 中断引脚


/***** 变量声明***** // Variablen werden deklariert
static Task_Params txTaskParams;
static Task_Structt txTask;
static uint8_t txTaskStack[TX_task_stack_size];

static rfObject rfObject;
static rfhandle rfHandle;
静态 RF_Params rfParams;

静态 Semaphore_Structra无线电 SyncTxSem;
静态 Semaphore_Handle 无线电 SyncTxSemHandle;
静态 Clock_StructroSyncTxClock;
静态时钟_Handle 无线电 SyncTxClockHandle;

静态 uint8_t packet[PAYLOAD_LENGTH];
静态 uint8_t 移动; // von MIR definition/*

唤醒引脚表*//未启用输入、未启用下拉线、未启用自动断电线

的芯片 genannen 引脚排列 Flanke PIN_Config PinTableWakeUp[]={Board_PIR_OUT_LO | PIN_INPUT_EN | PIN_PULLUGGE| PIN_PULLUGGE_DOWN | PIN_WAKET_INCC26XX_IN_IN_WAKEUP | IN_IN_INCE_IN_IN_INWAKEUP
| IN_IN_IN_IN_IN_INESDLE_LOW_IN_IN_PUT | PIN_WAKEUP | PIN
PIN_TERMINATE /*终止列表*/
};

//引脚中断*//未启用输入、kein 上拉电阻下


拉、以及 aufwachen bei 正温度器 Flanke PIN_Config intrinoder []={Board_PIR_OUT_LO | PIN_INPULL_EN | PIN_PHYS_INPUT | PIN_HIN_INSIMP_INSIMPSION_INSIMPSION_INSIMPSIMPLE_OUT | PIN_INTENSIMPSIMPSIMP_IN_INSIMPSIMP_INSIMP_INSIMP_INSIMP_INSIMP_INSI
PIN_TERMINATE
};
PIN_Handle intr_Handle;// Pin_State benötigt ein "handle"和 dieses wedes 定义 hiert
PIN_STATE intr_state;



/***** 函数定义***** /
void TxTask_init ()// kann man wohl so Lassen
{
Task_Params_init (&txTaskParams);//"Task_Params_init" Cluster winitrd befüllt
txTaskParams.STACKSIZE = TX_TASK_STACK_SIZE;//栈大小
txTaskParams.priority = TX_TASK_priority;//任务 Priorität
txTaskParams.stack =&txTaskStack; //堆栈 Bezeichnung
txTaskParams.arg0 =(UINT) 1000000; //检查镍铬合金,Steht aber überall

Task_construction (&txTask、txTaskFunction、&txTaskParams、NULL);// Ein Objektwinitrd gebildet und nicht stellt。 UM ES zu Benutzen Muss ein handle rstellt werden
。}

静态空 txTaskFunction (UArg0、UArgarg1)
{
//初
始化任务 TI-RTOS 对象*/初始化任务(); // Der Task wrd initializiert

//后门访问*/
uint8_t modeValue = PIN_getInputValue (Board_Mode);// Der Wert AM 引脚 wrd eingelesen,ist er 1 =高电平,所以在 DEN SHUTDOWN


参数中的 weder das Modes if (model= 1)(model = 1);/?

//此处为陷波代码
while (1);
}


//获取复位原因*/
uint32_t rsrc = SysCtrlResetSourceGet ();// Der Grund für den Reset wird ermittelt
if (rsrc == RSTSRC_WAKEUP_FUT_SHUTDOWN) // Falls Interrupt ausgelöst wurde wrd diese Schleintr ausgeführt
{
/***引脚中断***//

配置 GPIO 中断
intr_handle = PIN_open (&intr_state、intrPinTable);// t durch den "Test Debug" sondern durch den 中断定义 das handle die_PIN_registerIntCb
(&intr_handle、intr_handle、intr_hwiife_intr);// t dr hnichnicht intr // Registerert eine Callback Funktion wenn ein hw-中断 aufgetreten ist
PIN_setConfig (intr_handle、PIN_BM_IRQ、Board_PIR_OUT_Lo | PIN_IRQ_POSedge);// positver Flanke ausgelöst PIN_setConfig
(IRQ_Handle、PIN_OUT_Lo | PIN_IRQ_IQ_FO_Lge);// positver Flanke + PIRQ_MOVIT_1 ausgelöst



+ PI_MOVIT_ON + PIR_ON + PIR_ IN_ON + PIR_ TO_ON + PIR_ TO_ON + PIR_ TO_ON + PIR_

//等待以确保不再有其他移动。
//如果检测到任何移动,则在 ISR
Clock_setTimeout (radioSyncTxClockHandle、PIR_quiet Time / Clock_tickPeriod)中重新启动计数器;// Warte bis 计数器 abgelaufen und geeder viaf inakSemtiv
Clock_start (radioSyncTxClockHandle);

semaphore_wait_off;/switt 等待/

任务0xendt (unift)/t)



//等待传感器稳定
while (1)// Die Komparatorwerte werden getestet
{
uint8_t pirLowValue = PIN_getInputValue (Board_PIR_OUT_Lo);// Checkke 引脚 WValue vom einen 引脚
uint8_t pirthrLowValue = PIN_getInputValue (Board_PIR_OUT_PIR)=
0 & 0_OUT 引脚 WValue = PIN/Ir 引脚 Uint&r 值 //信头波束引脚低,ISD 传感器“gesettelt
”{
sendPacket (0x55);
中断;
}


}否则 // Falls der Reset Anders ausgelöst wurde als durch Interrupt、also durch Einschalten
{ // Den Start sollte man So Lassen!
/***上电复位唤醒***//

发送初始数据包以显示系统已启动
sendPacket (0x00);
P负载("系统已启动!\n");
移动= 0; //始终在开始

时复位移动变量 while (1)
{

//等待传感器启动并稳定
Clock_setTimeout (radioSyncTxClockHandle、PIR_SETTING_TIME / Clock_Period);// Genaiso wie im case Semzuvor
Clock_start (radioSyncTxClockHandle);semaphore_wait_pend
;semine_parators/forever


(t/Check)/paratorse_para. 如果不是低电平、请等待更多时间
uint8_t LowValue = PIN_getInputValue (Board_PIR_OUT_LO);
uint8_t pirHighValue = PIN_getInputValue (Board_PIR_OUT_Hi);
if (LowEE = 0 & pirthide = 0)// Wenn InputValue = PIN_getInputValue (Board_PIR_OUT_Hi);if (LoweT = 0 & pireT = 0)





// Wenpiride = 0)// Wenpirdas 发送
错误数据包/错误数据包/错误:0xnthrendrendt 错误/错误包(低)

}//Send

packet to show system is up and running
sendPacket (0x11);
put("系统正在运行!");

}// nach 中断码器加电例程,以更好地执行此操作!


//等待传感器在射频传输后趋稳*/
Task_sleep (PIR_SHUTDOWN_TIME / Clock_tickPeriod);// Der aktuelle Task wrd geblockt

//转到 SHUTDOWN 等待下一个 PIR 中断*/
PINCC26XX_setWmodel (
NULL TableWakeUp);// ES werdge Die (Pinetzr geden)掉电引脚(pin take up)


/*不应出现在此处,因为关机将重置*/
while (1);
}

static void 初始化任务(void)// sollte man so Lassen können
{
//用于同步 TX 的设置时钟*///时钟参数 wurden gesetzt Syncund 处理初始化
Clock_radioams SyncTxClockParams;
// startClockParclockSram

= 0;clockClockParclockTclockTparams = 0; /*一次性时钟*/
Clock_construct(&radioSyncTxClockCallback、0、&radioSyncTxClockParams);
radioSyncTxClockHandle = Clock_Handle (&radioSyncTxClock);

/*创建信号量以执行同步 TX *// Semaphor und zugehöriges handle wrd initializiert
semaphore_Params radioSyncTxParams;
Semaphore_Params_init (&radioSyncTxParams);
Semaphore_con构(&radioSyncTxSem、0、&radioSyncTxParams);
radioSyncTxSemHandle = Semaphore_handle (&radioSyncTxSem);
}

静态空 radioSyncTxClockCallback (UArg a0)// semaphore_post führt Dazu、dass das SemaphoreHandle um 1 erhöht wrd
{
semaphore_post (radioSyncTxHandle);
}

void dem_Hwifxn (PIN_Handle hPin、PIN_ID pinId)// Wenn DIE 引脚 INR Hi 和 Lo 引脚 entsprict、WIRD 芯片时钟 pestoppt、ein to gesetzt und wieder
{
if (pinId = Board_PIR_out_Lok = Board_Pend_Clockpetr


)}petcheClock (petr_clockpetr)// tuncheClockpetr petr petr petr (petr) // Warte bis modul weder inaktiv wird
Clock_start (radioSyncTxClockHandle);
}


static void sendPacket (uint8_t data)
{
uint32_t time;

// Init Radio 参数*/
rf_params_init (&rfParams);

//构造有效载荷*/[0]=
pcmt_packet




= rf_rf_length;//配置 pcmtrf_packet Paketlänge = 1 = rf_rf_rf_rf_packet = rf_rf_rf_rf_rf_rt;//* rf = rf_rf_rf_rf_r
// Paketarray、dass gesendet werden soll 和 max der gesetzten Paketlänge entspricht
RF_cmdPropTx.startTrigger.triggerType = trig_ABSTIME;// Muss man noch nachlesen was das soll RF_cmdTx.startTrigger.stpritrigger.start=
1;// RadioMuss man noch nachlesen was cmdsoll

//请求访问无线电设备*rf_rf_prutttry.rf*



、rf_rf_rf_rf_rf*、rfrf_prues&rf *(*)、rf_rf_pru&rfrf_rf_rf_pru&rf_pru&rf *、rf_pru&rf_pru&rf)、rfrf_

/*发送数据包*// nach jedem abgelaufenem Interval wrd ein Paket gesendet
time = rf_getCurrentTime();
time += packet_interval;
rf_cmdltx.StartTime = time;

rf_Event results = rf_runCmd (rfHandle、(rf_Op*)&rf_interval;rf_rf_rf_rf
)+ rf_prut1


)+ rf1 (rf_rf_rf)+


rf 1)+ rf 1 rf 1 rf (rf_en/ rf) rf 1)、rf (rf_enf


/*关闭无线电*/
rf_yield (rfHandle);
}

/*
=== main ====
//
int main (void)// Hier geschieht Nur die Initializierung、der eigentliche Code wrd in der startup and Interrupt routine abgerufen
{
/*呼叫板初始化功能。 // Hier werden Die Boardfuncionen initializerert
Board_initGeneral();

/*初始化任务*// Hier wrd der Task 初始化
TxTask_init();

/*启动 BIOS *// Hier winitrd das TI-RTOS gestartet
BIOS_start();

返回(0);
}

此致

Stefan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Stefan、

    1) 1) PIR 传感器非常敏感。 我们已经看到、在某些情况下、它可以检测到最轻微的移动。 我们通常用盒子覆盖、并尽量保持不动。

    2) 2)对此不确定。 这可能与 CC1310在所有运动停止后进入关断模式(基本上是复位)有关。 此操作可能会影响与 CCS 的连接。

    3)请参阅注释1)。 我们还注意到、监听器软件仅在接收到新数据包后才会显示该数据包。 这可能是您看到的内容。

    4)这可能再次是由于我之前提到的监听器软件问题。 是否在接收到最后一个0xFF/0x55之后看到*任何*数据包?

    有关软件更改的内容。

    1) 1)尝试遵循设置现有时钟的代码。

    2) 2)不应太重要、因为您没有任何其他任务在执行时间上争用。

    4) on 4)您将在进入关断状态后丢失所有变量。 由于每次都必须从闪存重新加载代码、因此关闭后还会导致功耗降低和延迟降低。 在一分钟内保持激活模式(将 while 循环添加到现有任务并对中断进行计数)可能是有道理的。 也可以选择待机模式。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Stefan、

    以下是对 Gus 上述答复的一些补充评论。

    3.我遇到了一些非常奇怪的行为...

    对于这个、您可以尝试修改 packet_interval 字段。  如果查看 sendPacket 函数、您将看到 RF_cmdPropTx.StartTime 设置为当前时间、并添加了 packet_interval。  这基本上是在"将来"传输数据包时进行调度。  只要时钟与 StartTime 匹配、对讲机就会传输数据包。 您可以尝试减小该数字以获得较小的偏移。  但是、不要将此偏移设置得太小、否则系统时钟可能会在命令执行之前通过 StartTime。

    4.当我将 PIR_SALET_TIME 设置为5s 时...

    这是当前的实现方式、是预期的。  在第161行、您将看到在 CC1310唤醒后传输0xAA 数据包。  在第155-158行中、HWI (intR_HwiFxn)设置为在 PIR 线路变为高电平时触发。  在第166-167行、时钟被启动。  在第169行、任务将在这里一直等待、直到发布信标。  每当您移动时、至少有一条 PIR 线会变为高电平、因此会触发 intr HwiFxn。  在该函数中、唯一发生的事情是使用新的 PIR_SALET_TIME 倒计时重新启动时钟。 每当时钟到期时、都会调用 RadioSyncTxClockCallback、这将发布信标。  通过发布信标、任务可以在第169行之后继续执行。  这时您会看到发送0xFF/0x55。  

    软件更改

    我假设您从未计划关闭、并且您希望每分钟发送一次移动次数。  如果是这种情况、您可以重新使用 PIR_SALET_TIME 时钟。  下面是一些有关如何修改代码的建议(发送0xAA 后添加 while 代码)。  您还需要修改 Hwi 来对移动进行计数。  我尚未测试此代码、因此请进行必要的修改。  

    while (1)

      Move = 0;  //重置移动计数器

       Clock_setTimeout(radioSyncTxClockHandle, PIR_QUIET_TIME / Clock_tickPeriod);    //Assume PIR_QUIET_TIME is set to 1 minute
      Clock_start (radioSyncTxClockHandle);   //启动时钟

       Semaphore_pend(radioSyncTxSemHandle, BIOS_WAIT_FOREVER);     //Wait here until the clock expires

      sendPacket (移动);       //发送移动次数。  这假设该数字将小于2个字节

    voidintr_HwiFxn(PIN_Handle hPin, PIN_Id pinId)
    {
       Move = Move + 1;  //不是重置时钟、而是添加到 Move 变量
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Gus、

    感谢您的回答。 关于您的问题:AA 发送后有时会有延迟、但 FF 发送后通常会立即发送55、有时 AA-FF-55封装的送达时间会延迟8-10秒或根本不会再延迟。 55始终是最后一个封装。

    关于软件更改:
    我将尝试使用 clock_construction 函数来实现我自己的 Swi。 但是、如果我要面对这些问题、与之相关的任何问题都将在另一个主题中讨论(我确信我会...)。
    由于我将使用电池供电的 TIDA-00489模块的代码、因此我实际上想进入睡眠模式或至少进入待机模式、但这种情况并不常见。 现在我将首先尝试使用蛤蜊方法保持待机状态、但稍后我想优化代码、如果5分钟内没有移动、则进入睡眠模式 我仍然想唤醒并发送0作为移动量、但立即返回睡眠状态。 但我将来会尝试...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Clam、

    感谢您的进一步信息。

    让我尝试告诉您我认为代码是如何执行的。 当中断引起唤醒时,代码执行在第123行的" txTaskFunction". In line 169, the task is blocked due to the pending semaphore. Now, a movement causes an interrupt and now only the callback function is executed, causing to reset the clock timeout in "void intr_HwiFxn(PIN_Handle hPin, PIN_Id pinId)", am I right?

    1. 您能告诉我为什么只有回调函数被激活、因为系统处于唤醒状态时会发生中断?! 这是标准原理吗?
    2. 我使用"sendPacket (xxxx)"作为探测器、并尝试将此类探测器放入 intr HwiFxn 函数声明中、但这不起作用、该函数是否也被信标阻止?
    3. 当超时到期时、信标被发布、从而解除对进一步代码执行的阻断? 在这段时间内、intr_HwiFxn只有""在 Hwi 发生时被执行?!

    在这种情况下、您的代码看起来不错、我将在更巧妙的解决方案(包括睡眠)之前尝试此代码、以便在长时间没有移动的情况下节省功耗。 当代码工作时、我将在这里发布反馈。

    此致

    Stefan

     

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您认为是正确的。

    这只是一个示例。 您可以根据需要进行修改。 我们主要以这种方式对固件进行结构化、以最大限度地缩短器件处于唤醒状态的时间。 每当任务处于信标挂起模式且没有活动时、器件将自动进入待机模式。 Hwi 允许器件快速唤醒、执行需要执行的任何操作、并返回待机状态。
    2.您只能在任务中发送数据包,不能发送 HWI
    运行了两个中断:Hwi (用于引脚)和时钟。 在第157-158行中、它配置引脚中断的极性。 在第156行中、它定义了引脚中断发生时要调用的函数(intr_HwiFxn)。 在第166行中、Clock_setTimeout 指示时间(PIR_SALET_TIME)到期时要调用的函数(radioSyncTxClockHandle)。 如果时钟到期或引脚切换、即使任务处于信标挂起状态、它也会调用相应的函数。
    如果您想省电并进入深度睡眠模式、可以添加一个全局变量来计算接收0次移动的次数。 例如、如果您接收到5次0次移动、则意味着5分钟没有移动。 然后、您可以中断 while (1)循环、并继续运行其余代码(发送0xFF、0x55、然后关闭)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只是想提供更新。

    代码目前正在运行。 我计算移动1分钟、然后发送该值。 5分钟内没有移动会导致电路板进入睡眠状态。
    感谢大家迄今提供的帮助、我想这不是我最后一次要问的。

    此致

    Stefan