使用PN532的ARDUINO - 等待响应时间

时间:2017-03-03 19:34:39

标签: arduino arduino-ide nfc-p2p

我改变了nfc 532的代码,但我想做一个改动,我不知道怎么做。想抽出时间吗?也就是说,当我在等待期间没有将移动电话放在芯片的底部时,这就离开了代码。也就是说,我总是在等待我把手机放在芯片上发送信息,但可能会发生我不说的事情,因为我总是在等。想要超时类型10秒作为秒表

#include "SPI.h"
#include "PN532_SPI.h"
#include "snep.h"
#include "NdefMessage.h"

PN532_SPI pn532spi(SPI, 10);
SNEP nfc(pn532spi);
uint8_t ndefBuf[128];
const int buttonPin = 6;
int buttonState = 0;

void setup()
{
    Serial.begin(115200);
    pinMode(7, OUTPUT); 

}
int var=0;  
boolean Acender=0;
void loop()
{
    buttonState = digitalRead(buttonPin);


  if (buttonState == 1) {

    digitalWrite(7,HIGH); //Desliga rele 2

    Serial.println("Send a message to Android");
    NdefMessage message = NdefMessage();
    message.addTextRecord("Alertas acidente: DADOS");
    int messageSize = message.getEncodedSize();
    if (messageSize > sizeof(ndefBuf)) {
        Serial.println("ndefBuf is too small");
        while (1) {
        }

    }

    message.encode(ndefBuf);
    if (0 >= nfc.write(ndefBuf, messageSize)) {

        Serial.println("Failed");

    } else {
        Serial.println("Success");
    }

//     Serial.println("Failed");
  }

  else{
    digitalWrite(7,LOW); //Desliga rele 2
  }
  }

1 个答案:

答案 0 :(得分:1)

我认为这解决了你的问题,但是因为你的代码非常混乱,我不打算把我的代码放到你的代码中,你必须自己做。

您可以使用millis()函数计算时差:

long last = 0;

void loop() {

    ...

    //run this when a message was received
    last = millis();
    digitalWrite(7, HIGH);

    ...

    //run this every once in a while, eg. every loop()
    long curr = millis();
    if (curr - last >= 1000*10) {
        digitalWrite(7, LOW);
    }
}

代码会跟踪收到消息的最后时间,如果超过10秒,则会禁用指示消息。您需要重置计时器并在收到消息时重新启用指示灯。