2017-03-03 1 views
-1

J'ai changé le code de 533 mais j'ai voulu faire une modification et je ne sais pas comment. Voulez-vous donner un temps mort? C'est-à-dire, quand je n'ai pas mis le téléphone portable au pied de la puce pendant l'attente celui-ci laisse le code. C'est-à-dire, j'attends toujours que je mets le téléphone portable sur la puce pour envoyer des informations, mais il peut arriver que je ne le mette pas, et comme c'est le cas, j'attends toujours. Recherché pour un type de délai d'attente de 10 secondes comme un chronomètreUTILISER ARDUINO AVEC PN532 - ATTENDRE À RÉPONDRE-TEMPORISER

#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

Quelle est exactement votre question? –

+0

j'ai besoin d'un temps mort, si je ne peux pas recevoir un message pendant 10secondes le led éteindre (broche 7) –

Répondre

1

Je pense que cela résout votre problème, mais parce que votre code est assez désordonné, je ne vais pas essayer de mettre mon code dans le vôtre, vous devrez fais-le toi-même.

Vous pouvez utiliser la fonction millis() pour calculer les différences de temps:

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); 
    } 
} 

Le code conserve la trace de la dernière fois au cours de laquelle un message a été reçu, et si elle était il y a plus de 10 secondes, il désactive la led. Vous devez réinitialiser la minuterie et réactiver la led lorsque vous recevez un message.