我改变了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
}
}
答案 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秒,则会禁用指示消息。您需要重置计时器并在收到消息时重新启用指示灯。