2017-03-03 59 views
-1

我改变了nfc 532的代码,但我想改变,我不知道如何。想要抽出时间吗?也就是说,当我在等待期间没有将手机放在芯片的底部时,就会留下代码。也就是说,我一直在等待,我把手机放在芯片上发送信息,但可能发生的是我没有放过它,因为我一直在等。想了超时键入10秒钟秒表使用ARDUINO与PN532 - 等待回答 - 定时器出

#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

我需要超时,如果我无法收到任何消息为10秒的led关闭(引脚7) –

回答

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秒前将禁用的领导。您需要重置计时器并在收到消息时重新启用LED。