Чтение нескольких Arduino с помощью Raspberry Pi 3 через USB - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть 3 Arduino, к которым прикреплены RFID-считыватели RC522. Каждый из них имеет свои собственные источники питания, и они подключены к Raspberry Pi 3 через порты USB. Я получаю действительно противоречивые результаты при запуске читателя в python. Похоже, все 3 читают, но l oop делает некоторые странные вещи. Иногда код чипа продолжает повторяться после удаления чипа, а иногда он работает должным образом. По-видимому, нет никакой последовательности, с которой arduino ведет себя странно.

Любая помощь будет принята с благодарностью !!!

Вот код arduino (один и тот же код был скопирован в каждое arduino, за исключением начального println, который указывает, какое arduino подключено).

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN         5          // Configurable, see typical pin layout above
#define SS_PIN          53         // Configurable, see typical pin layout above
#define MOSI_PIN        51
#define MISO_PIN        50
#define SCK_PIN         52

MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

MFRC522::MIFARE_Key key;

String read_rfid;

void setup() {
  Serial.begin(9600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }

  Serial.println(F("The Toy Maker's Sanctuary RDIF Reader 1 Online."));
  //Serial.println(F("Using the following key:"));
  //printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}

void loop() {

  // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
  if ( ! rfid.PICC_IsNewCardPresent())
      return;

    // Select one of the cards
    if ( ! rfid.PICC_ReadCardSerial())
      return;

    dump_byte_array(rfid.uid.uidByte, rfid.uid.size);
    Serial.println(read_rfid);
}

/*
   Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
  read_rfid = "";
  for (byte i = 0; i < bufferSize; i++) {
    read_rfid = read_rfid + String(buffer[i], HEX);
  }
}

Вот код python

import serial

ser0=serial.Serial("/dev/ttyACM0", 9600, timeout=1)
ser1=serial.Serial("/dev/ttyACM1", 9600, timeout=1)
ser2=serial.Serial("/dev/ttyACM2", 9600, timeout=1)

ser0.baudrate=9600
ser1.baudrate=9600
ser2.baudrate=9600

read_ser0=""
read_ser1=""
read_ser2=""

while True:
    read_ser0=ser0.readline()
    print("0: ",read_ser0)
    read_ser1=ser1.readline()
    print("1: ",read_ser1)
    read_ser2=ser2.readline()
    print("2: ",read_ser2)

    read_ser0=""
    read_ser1=""
    read_ser2=""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...