#include // We are going to read and write PICC's UIDs from/to EEPROM #include // RC522 Module uses SPI protocol #include #include #include // main hd44780 header #include hd44780_I2Cexp lcd; #define SS_PIN 53 //RFID #define RST_PIN 5 //RFID #define ApinA 18 //Encoder #define ApinB 19 //Ecoder #define IOclickPin 22 //Encoder /*--------------LCD--PINS CONNECTION----*/ const int LCD_COLS = 20; const int LCD_ROWS = 4; const byte pinA = ApinA; //was byte const byte pinB = ApinB; // was byte const byte clickPin = IOclickPin; // was byte byte encoder = 10; // was byte byte state = 0; // was byte const int bump[] = { 0, 0, -1, 1 }; byte knobMax = 12; // was byte byte knobMin = 10; // was byte boolean btnRead = false; boolean oldBtnRead = false; boolean myClick = false; boolean cleanScreen = false; /*--------------------------------*/ const char* ssid = "HUAWEI_H112_8FBD";// WIFI user name const char* password = "45TR1LYB86F";// Password MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. int statuss = 0; int out = 0; void setup() { Serial.begin(115200); // Initiate a serial communication SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 int status; status = lcd.begin(LCD_COLS, LCD_ROWS); if(status) // non zero status means it was unsuccesful { hd44780::fatalError(status); // does not return } lcd.backlight(); // Serial.println(""); //Serial.println("WiFi connected"); //Serial.println(); lcd.print("Please Scan your ID Card"); //lcd.setCursor(0,1); //lcd.print("ID Card"); //---------------------------------- pinMode( clickPin,INPUT); pinMode( pinA,INPUT); pinMode( pinB,INPUT); attachInterrupt(digitalPinToInterrupt(pinA), Turn, RISING);//digitalPinToInterrupt(pinA) // Serial.begin(115200); } void loop() { // ----------------Look for new cards----------- if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor Serial.println(); Serial.print(" UID tag :"); String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print( mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print( mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } content.toUpperCase(); Serial.println(); if (content.substring(1) == "3C B2 C0 95") //change UID of the card that you want to give access { lcd.clear(); lcd.setCursor(0,0); lcd.print("Access Granted"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Welcome Mr.Morad"); lcd.setCursor(0,1); lcd.print("and have FUN"); delay(3000); lcd.clear(); statuss = 1; } else if (content.substring(1) == "29 6F AF 5A") { lcd.clear(); lcd.setCursor(0,0); lcd.print("Access Granted"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Welcome Mr.Aziz"); lcd.setCursor(0,1); lcd.print("and have FUN"); delay(3000); lcd.clear(); statuss = 1; } else { lcd.clear(); lcd.setCursor(0,0); lcd.print("Access Denied"); delay(2000); lcd.clear(); lcd.print("try again"); } //-------------------------LCD/ENCODER------------------ while (statuss == 1){ if (cleanScreen){ cleanScreen = false; lcd.clear(); } btnRead = digitalRead(clickPin); // put the value of clickPin in the variable btnRead if ( btnRead != oldBtnRead){ if (btnRead == false) { // if btnRead = true myClick = true; // "pushed", put variable boolean myClick on true --> flag it true } } oldBtnRead = btnRead; switch (encoder){ case 10: ArrowRight1(); DurationMenu(); if(myClick){ myClick = false; cleanScreen = true; encoder = 30; knobMin = 30; knobMax = 32; } break; case 11: ArrowRight2(); DurationMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 30; knobMin = 30; knobMax = 32; } break; case 12: ArrowRight3(); DurationMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 30; knobMin = 30; knobMax = 32; } break; case 30: ArrowRight1(); MachineMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 40; knobMin = 40; knobMax = 44; } break; case 31: ArrowRight2(); MachineMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 50; knobMin = 50; knobMax = 52; } break; case 32: ArrowRight4(); MachineMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 10; knobMin = 10; knobMax = 12; } break; case 40: ArrowRight1(); LaserMatMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 60; knobMin = 60; knobMax = 64; } break; case 41: ArrowRight2(); LaserMatMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 80; knobMin = 80; knobMax = 84; } break; case 42: ArrowRight3(); LaserMatMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 110; knobMin = 110; knobMax = 114; } break; case 43: ArrowRight7(); LaserMatMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 70; knobMin = 70; knobMax = 74; } break; case 44: ArrowRight4(); LaserMatMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 30; knobMin = 30; knobMax = 32; } break; case 50: ArrowRight1(); CNCMatMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 90; knobMin = 90; knobMax = 94; } break; case 51: ArrowRight2(); CNCMatMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 100; knobMin = 100; knobMax = 104; } break; case 52: ArrowRight4(); CNCMatMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 30; knobMin = 30; knobMax = 32; } break; case 60: ArrowRight1(); //Change it LaserCardMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 61: ArrowRight2(); LaserCardMenu(); if(myClick){ cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 62: LaserCardMenu(); ArrowRight5(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 63: LaserCardMenu(); ArrowRight6(); if(myClick){ cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 64: LaserCardMenu(); ArrowRight4(); if(myClick){ cleanScreen = true; myClick = false; encoder = 40; knobMin = 40; knobMax = 44; } break; case 70: LaserMDFMenu(); ArrowRight2(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; } break; case 71: LaserMDFMenu(); ArrowRight3(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 72: LaserMDFMenu(); ArrowRight5(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 73: LaserMDFMenu(); ArrowRight6(); if(myClick){ cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 74: LaserMDFMenu(); ArrowRight4(); if(myClick){ cleanScreen = true; myClick = false; encoder = 40; knobMin = 40; knobMax = 44; } break; case 80: LasreAcylicMenu(); ArrowRight2(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 81: LasreAcylicMenu(); ArrowRight3(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 82: LasreAcylicMenu(); ArrowRight5(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 83: LasreAcylicMenu(); ArrowRight6(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 84: LasreAcylicMenu(); ArrowRight4(); if (myClick) { cleanScreen = true; myClick = false; encoder = 40; knobMin = 40; knobMax = 44; } break; case 90: CncMDFMenu(); ArrowRight2(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 91: CncMDFMenu(); ArrowRight3(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 92: CncMDFMenu(); ArrowRight5(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 93: CncMDFMenu(); ArrowRight6(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 94: CncMDFMenu(); ArrowRight4(); if (myClick) { cleanScreen = true; myClick = false; encoder = 40; knobMin = 40; knobMax = 44; } break; case 100: CncPlyWoodMenu(); ArrowRight2(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 101: CncPlyWoodMenu(); ArrowRight3(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 102: CncPlyWoodMenu(); ArrowRight5(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 103: CncPlyWoodMenu(); ArrowRight6(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 104: CncPlyWoodMenu(); ArrowRight4(); if (myClick) { cleanScreen = true; myClick = false; encoder = 40; knobMin = 40; knobMax = 44; } break; case 110: LasrePlyMenu(); ArrowRight2(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 111: LasrePlyMenu(); ArrowRight3(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 112: LasrePlyMenu(); ArrowRight5(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 113: LasrePlyMenu(); ArrowRight6(); if (myClick) { cleanScreen = true; myClick = false; encoder = 120; knobMin = 120; knobMax = 124; } break; case 114: LasrePlyMenu(); ArrowRight4(); if (myClick) { cleanScreen = true; myClick = false; encoder = 40; knobMin = 40; knobMax = 44; } break; case 120: LastMenu(); if (myClick) { myClick = false; } break; } } } /********************************************** Rotary ***********************************************/ void Turn() { state =0; state = state + digitalRead(pinA); state <<= 1; state = state + digitalRead(pinB); if (state == 0) return; encoder = encoder + bump[state]; if (encoder < knobMin) encoder = knobMax; if (encoder > knobMax) encoder = knobMin; cleanScreen = true; } /*********************** Templates ************************/ void DurationMenu(){ lcd.setCursor(0,0); lcd.print("Duration"); lcd.setCursor(1,1); lcd.print("1. 30min"); lcd.setCursor(1,2); lcd.print("2. 60min"); lcd.setCursor(1,3); lcd.print("3. 90min"); } void MachineMenu(){ lcd.setCursor(0,0); lcd.print("Select Machine"); lcd.setCursor(1,1); lcd.print("1.Laser Cutter"); lcd.setCursor(1,2); lcd.print("2.CNC Machine"); lcd.setCursor(12,3); lcd.print("Back"); } void CNCMatMenu(){ lcd.setCursor(0,0); lcd.print("CNC Material"); lcd.setCursor(1,1); lcd.print("1.MDF"); lcd.setCursor(1,2); lcd.print("2.PLY Wood"); lcd.setCursor(12,3); lcd.print("Back"); } void LaserMatMenu(){ lcd.setCursor(0,0); lcd.print("Laser Material"); lcd.setCursor(1,1); lcd.print("1.Card board"); lcd.setCursor(1,2); lcd.print("2.Acylic"); lcd.setCursor(1,3); lcd.print("3.PlyWood"); lcd.setCursor(11,2); lcd.print("4.MDF"); lcd.setCursor(12,3); lcd.print("BACK"); } void LaserMDFMenu(){ lcd.setCursor(0,0); lcd.print("Laser:MDF"); lcd.setCursor(0,1); lcd.print("Sheet Thickness"); lcd.setCursor(1,2); lcd.print("3mm"); lcd.setCursor(6,2); lcd.print("12mm"); lcd.setCursor(1,3); lcd.print("6mm"); lcd.setCursor(6,3); lcd.print("9mm"); lcd.setCursor(12,3); lcd.print("Back"); } void LaserCardMenu(){ lcd.setCursor(0,0); lcd.print("Laser:Card Board"); lcd.setCursor(0,1); lcd.print("Sheet Thickness"); lcd.setCursor(1,2); lcd.print("3mm"); lcd.setCursor(6,2); lcd.print("12mm"); lcd.setCursor(1,3); lcd.print("6mm"); lcd.setCursor(6,3); lcd.print("9mm"); lcd.setCursor(12,3); lcd.print("Back"); } void LasrePlyMenu(){ lcd.setCursor(0,0); lcd.print("Laser:PlyWood"); lcd.setCursor(0,1); lcd.print("Sheet Thickness"); lcd.setCursor(1,2); lcd.print("3mm"); lcd.setCursor(6,2); lcd.print("12mm"); lcd.setCursor(1,3); lcd.print("6mm"); lcd.setCursor(6,3); lcd.print("9mm"); lcd.setCursor(12,3); lcd.print("Back"); } void LasreAcylicMenu(){ lcd.setCursor(0,0); lcd.print("Laser:Acylic"); lcd.setCursor(0,1); lcd.print("Sheet Thickness"); lcd.setCursor(1,2); lcd.print("3mm"); lcd.setCursor(6,2); lcd.print("12mm"); lcd.setCursor(1,3); lcd.print("6mm"); lcd.setCursor(6,3); lcd.print("9mm"); lcd.setCursor(12,3); lcd.print("Back"); } void CncMDFMenu(){ lcd.setCursor(0,0); lcd.print("CNC:MDF"); lcd.setCursor(0,1); lcd.print("Sheet Thickness"); lcd.setCursor(1,2); lcd.print("3mm"); lcd.setCursor(6,2); lcd.print("12mm"); lcd.setCursor(1,3); lcd.print("6mm"); lcd.setCursor(6,3); lcd.print("9mm"); lcd.setCursor(12,3); lcd.print("Back"); } void CncPlyWoodMenu(){ lcd.setCursor(0,0); lcd.print("CNC:PlyWood"); lcd.setCursor(0,1); lcd.print("Sheet Thickness"); lcd.setCursor(1,2); lcd.print("3mm"); lcd.setCursor(6,2); lcd.print("12mm"); lcd.setCursor(1,3); lcd.print("6mm"); lcd.setCursor(6,3); lcd.print("9mm"); lcd.setCursor(12,3); lcd.print("Back"); } void LastMenu(){ lcd.setCursor(0,1); lcd.print("Thank you"); lcd.setCursor(1,2); lcd.print("Stay Safe"); } void ArrowRight1(){ lcd.setCursor(0,1);//First lcd.print(">"); } void ArrowRight2(){ lcd.setCursor(0,2);//Second lcd.print(">"); } void ArrowRight3(){ lcd.setCursor(0,3);//Third lcd.print(">"); } void ArrowRight4(){ lcd.setCursor(11,3);//back lcd.print(">"); } void ArrowRight5(){ lcd.setCursor(5,2);//12mm lcd.print(">"); } void ArrowRight6(){ lcd.setCursor(5,3);//9mm lcd.print(">"); } void ArrowRight7(){ lcd.setCursor(10,2);//MDF lcd.print(">"); } //------------------------------------------//