2017-06-05 6 views
0

Ich arbeite an einem Projekt, das das gleichzeitige Lesen von sechs ID-12LA RFID-Lesegeräten erfordert.Wie kann ich mehrere RFID-Lesegeräte über die SoftwareSerial-Bibliothek in einer Schleife simulieren?

Ich habe versucht, Messwerte von sechs Kanälen über die Sparkfun Analog/Digital MUX Breakout-Platine (CD74HC4067), aber ohne Glück. Ich weiß nicht, ob es seriell kommunizieren kann, obwohl ich das auf Bildr.org gelesen habe.

Ich versuche jedoch, das Lesen von mehreren seriellen Ports über die SoftwareSerial-Bibliothek zu emulieren. Ich habe gelesen, dass es nicht gleichzeitig lesen kann, aber vielleicht kann eine Schleife simultanes Hören simulieren. Ich habe versucht, dies zu tun, indem ich auf die erste serielle Schnittstelle höre und dann readTag() initialisiere, und dann, nachdem diese Funktion beendet ist, beginne zu hören die zweite serielle und initialisiere dann die zweite Funktion.

Die readTag() Funktion ist in der Lage zu lesen, wenn nur am RFID-Leser angeschlossen ist, so dass das nicht das Problem ist.

Unten ist der Code.

Was wäre der richtige Weg, simultanes Lesen durch die Loop-Funktion zu simulieren und simulieren?

void setup() { 
    Serial.begin(9600); 
    ourSerial1.begin(9600); 
    ourSerial2.begin(9600); 

    pinMode(RFIDResetPin, OUTPUT); 
    digitalWrite(RFIDResetPin, HIGH); 
} 

void loop() { 

    ourSerial1.listen(); 
    readTag1(); 
    ourSerial2.listen(); 
    readTag2(); // Only this function works right now, because it is the last serial that was initiated in setup. 

} 

void readTag1() { 

    char tagString[13]; 
    int index = 0; 
    boolean reading = false; 

    while (ourSerial1.available()) { 

    int readByte = ourSerial1.read(); 

    if (readByte == 2) reading = true; // Beginning of tag 
    if (readByte == 3) reading = false; // End of tag 

    if (reading && readByte != 2 && readByte != 10 && readByte != 13) { 
     //store the tag 
     tagString[index] = readByte; 
     index ++; 
    } 
    } 

    checkTag(tagString); // Check if it is a match 
    clearTag(tagString); // Clear the char of all value 
    resetReader(); // Reset the RFID reader 
} 

void readTag2() { 

    char tagString[13]; 
    int index = 0; 
    boolean reading = false; 

    while (ourSerial2.available()) { 

    int readByte = ourSerial2.read(); 

    if (readByte == 2) reading = true; // Beginning of tag 
    if (readByte == 3) reading = false; // End of tag 

    if (reading && readByte != 2 && readByte != 10 && readByte != 13) { 
     //store the tag 
     tagString[index] = readByte; 
     index ++; 
    } 
    } 

    checkTag2(tagString); // Check if it is a match 
    clearTag(tagString); // Clear the char of all value 
    resetReader(); // Reset the RFID reader 
} 

Antwort

0

Bin ich richtig, dass Sie nur die Kommunikation von RFID nachahmen/imitieren möchten? Sie möchten simultane Lesevorgänge an 2-6 seriellen RFID-Lesegeräten durchführen?

Was Sie tun sollten, ist nicht die ourSerial1.listen(); Routine. Dies kann tatsächlich nicht auf 2 Ports gleichzeitig hören. Machen Sie Ihre eigenen Subroutinen, dass die Umfrage die einzelnen Ports (falls nötig, schalten Sie Ihren MUX dazwischen):

  • eine for-Schleife erstellen, die xx mal überprüft (je Ihrem Setup, während 100ms?)

    for (int i = 0, i < 1000, i++) //first part of loop 
    { 
        if (Serial.available()) 
        { 
         // do your decoding of port 1 here 
        } 
    } 
    for (int i = 0, i < 1000, i++) //second part of loop 
    { 
        if (Serial1.available()) //other port 
        { 
         // do your decoding of port 1 here 
        } 
    } 
    
Verwandte Themen