Я работаю над проектом, который требует одновременного считывания с шести RFID-считывателей ID-12LA.
Я пытался настроить показания с шести каналов через плату Sparkfun Analog/Digital MUX Breakout (CD74HC4067), но безуспешно. Я не знаю, поддерживает ли он последовательную связь, хотя я читал об этом на Bildr.org.
Однако сейчас я пытаюсь эмулировать чтение из нескольких последовательных портов через библиотеку SoftwareSerial. Я читал, что он не может одновременно читать, но, возможно, цикл может имитировать одновременное прослушивание. Я попытался сделать это, прослушав первый серийный номер, затем инициализировав readTag()
, а затем, после завершения этой функции, начал прослушивать второй сериал, а затем инициализировал вторую функцию.
Функция readTag()
способна считывать сама по себе, когда подключен только считыватель RFID, так что это не проблема.
Ниже приведен код.
Каким будет правильный способ имитировать одновременное чтение с помощью функции цикла?
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
}