Как я могу использовать ЖК-щит и NFC-щит, работая на I2C на паралеле - PullRequest
0 голосов
/ 11 апреля 2019

Я на Arduino Mega 2560, у меня есть два экрана для использования LCD 16 * 2 olimex #include и pn532 rfid / nfc v.2, nfc подключен к SDA / SCL (20,21), и другой SDA1 / SCL1. Я инициализирую и запускаю экран, после чего NFC начинает читать, но на экране ничего не видно.

Я пытался решить проблему с помощью функционального провода, но тоже не выводил.

#include <EEPROM.h>
#include <LCD16x2.h>
#include <Wire.h>
#define EI_ARDUINO_INTERRUPTED_PIN // to enable pin states functionality 
#include <EnableInterrupt.h>

  #include <PN532_I2C.h>
  #include <PN532.h>
  #include <NfcAdapter.h>
  #include <nfcTag.h>
  PN532_I2C pn532i2c(Wire);
  PN532 nfc(pn532i2c);  


  #define allow 49
  #define deny 50
  #define SDA 20
  #define SCL 22

const byte nbrC = 12;

int address_lcd = 48;
int address_nfc = 36;

struct MyObject {
  char id[nbrC-2];
};

LCD16x2 lcd;

void turnLight(int led){
    digitalWrite(led, HIGH);
    delay(3000);
    digitalWrite(led, LOW);  
}

void displayT(char c){
    Wire.endTransmission(); 
    Wire.flush();
    Wire.beginTransmission(address_lcd); 
    lcd.lcdGoToXY( 1,1);
    switch (c) {
        case 'A':
              lcd.lcdWrite("ACCESS ALLOWED");
              Serial.print("ACCESS ALLOWED - ");
              Serial.print("STATE: OPEN - "); 
              turnLight(allow);
              Serial.println("STATE: CLOSE");
              lcd.lcdClear();              
           break;
        case 'D':
              Serial.print("ACCESS DENY ");
              lcd.lcdWrite("ACCESS DENY");
              turnLight(deny); 
              Serial.println("- - - - - - - - -");
              lcd.lcdClear();
            break;
        case 'T':
              lcd.lcdWrite( "ACCESS TRIED");
              delay(3000);
              lcd.lcdClear();
             break;
    }
    Wire.endTransmission(); 
    Wire.beginTransmission(address_nfc); 

}


//*******************Tag READ fonction
String fct_lecture(){
  String Received;
  boolean success;
  uint8_t IdReceived[] = { 0, 0, 0, 0, 0, 0, 0 }; 
  uint8_t Id_Length; 
  //Wire.beginTransmission(address_nfc);
  if (success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &IdReceived[0],&Id_Length)){

    for (uint8_t i=0; i < Id_Length; i++)
      Received += String(IdReceived[i], HEX); 
    Serial.print("\nTAG Id: ");Serial.println(Received); 
              displayT('T');
              if(eeprom_getAll(0, 100, Received)){ 
                  displayT('A');
              }else{
                  displayT('D');
              }
    return(Received);
  }
  else
    return("NULL");
}

void setup(void) {
  Wire.begin();
  lcd.lcdClear();
  lcd.lcdSetBlacklight(150);
  lcd.lcdGoToXY( 2,1);lcd.lcdWrite("NFC LOCK ON");delay(5000);lcd.lcdClear();

  Serial.begin(115200);
  //while(!Serial);
  Serial.println("Hello!");
  Wire.begin(address_nfc);
  nfc.begin();
  uint32_t versiondata = nfc.getFirmwareVersion();
  nfc.setPassiveActivationRetries(0xFF);
  nfc.SAMConfig(); 

  pinMode(allow, OUTPUT);
  pinMode(deny, OUTPUT);
  Serial.println("NFC LOCK");
}

void loop(void) {
  String Received;
  Received=fct_lecture();
    if(Received != 0){
      Serial.println("\nKey not found");
       //Wire.beginTransmission(address_lcd); 
       lcd.lcdGoToXY( 1,1);
       lcd.lcdWrite( "KEY NOT FOUND");
       delay(1000);
       lcd.lcdClear();
       //Wire.endTransmission(address_lcd);
    }
}
...