Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LCDWIKI_GUI.h> //Core graphics library
- #include <LCDWIKI_SPI.h> //Hardware-specific library
- #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 MODEL ILI9225
- #define CS A5
- #define CD A3
- #define RST A4
- #define SDA A2
- #define SCK A1
- #define LED -1
- #define BLACK 0x0000
- #define BLUE 0x001F
- #define RED 0xF800
- #define GREEN 0x07E0
- #define CYAN 0x07FF
- #define MAGENTA 0xF81F
- #define YELLOW 0xFFE0
- #define WHITE 0xFFFF
- unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
- bool ardReady = true;
- String data;
- int answer = -1024;
- int redLED = 4;
- int yellowLED = 6;
- int greenLED = 7;
- int motorPin1 = 8;
- int motorPin2 = 9;
- int motorPin3 = 10;
- int motorPin4 = 11;
- int delayTime = 2;
- int forward = 6;
- int back = 7;
- int scan1 = 0;
- int scan2 = 0;
- bool driverFlag = true;
- bool answerFlag = false;
- int counter = 0;
- bool checker = true;
- LCDWIKI_SPI mylcd(MODEL,CS,CD,-1,SDA,RST,SCK,LED);
- MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
- void setup() {
- Serial.begin(115200); // Initialize serial communications with the PC
- while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
- SPI.begin(); // Init SPI bus
- mfrc522.PCD_Init(); // Init MFRC522
- mylcd.Init_LCD();
- mylcd.Set_Text_Mode(0);
- mylcd.Fill_Screen(WHITE);
- mylcd.Set_Text_colour(BLACK);
- mylcd.Set_Text_Back_colour(WHITE);
- mylcd.Set_Rotation(1);
- pinMode(motorPin1, OUTPUT);
- pinMode(motorPin2, OUTPUT);
- pinMode(motorPin3, OUTPUT);
- pinMode(motorPin4, OUTPUT);
- }
- void turnByNum(int num) {
- if (num == 0) {
- digitalWrite(motorPin1, LOW);
- digitalWrite(motorPin2, LOW);
- digitalWrite(motorPin3, LOW);
- digitalWrite(motorPin4, LOW);
- }
- if (num == 1) {
- digitalWrite(motorPin1, HIGH);
- digitalWrite(motorPin2, LOW);
- digitalWrite(motorPin3, LOW);
- digitalWrite(motorPin4, LOW);
- }
- if (num == 2) {
- digitalWrite(motorPin1, LOW);
- digitalWrite(motorPin2, HIGH);
- digitalWrite(motorPin3, LOW);
- digitalWrite(motorPin4, LOW);
- }
- if (num == 3) {
- digitalWrite(motorPin1, LOW);
- digitalWrite(motorPin2, LOW);
- digitalWrite(motorPin3, HIGH);
- digitalWrite(motorPin4, LOW);
- }
- if (num == 4) {
- digitalWrite(motorPin1, LOW);
- digitalWrite(motorPin2, LOW);
- digitalWrite(motorPin3, LOW);
- digitalWrite(motorPin4, HIGH);
- }
- delay(2);
- }
- void scanTurn(){
- if (driverFlag){
- scan2 = analogRead(back);
- if (scan2 > 100){
- turnByNum(1);
- turnByNum(2);
- turnByNum(3);
- turnByNum(4);
- } else {
- driverFlag = false;
- turnByNum(0);
- //return;
- }
- }
- }
- void turnLeft(){
- turnByNum(1);
- turnByNum(2);
- turnByNum(3);
- turnByNum(4);
- }
- void turnRight(){
- turnByNum(1);
- turnByNum(4);
- turnByNum(3);
- turnByNum(2);
- }
- void clear_screen(void)
- {
- delay(2000);
- mylcd.Set_Draw_color(WHITE);
- mylcd.Fill_Rectangle(1, 12, mylcd.Get_Display_Width()-2, mylcd.Get_Display_Height()-1-12);
- }
- void presentWaitText(){
- clear_screen();
- checker = true;
- digitalWrite(yellowLED, HIGH);
- digitalWrite(greenLED, LOW);
- digitalWrite(redLED, LOW);
- mylcd.Set_Text_Size(3);
- mylcd.Print_String("BCTABbTE",CENTER, 73);
- mylcd.Print_String("KAPTy", CENTER, 103);
- }
- void presentReadingText(){
- clear_screen();
- digitalWrite(yellowLED, LOW);
- mylcd.Set_Text_Size(3);
- mylcd.Print_String("4TEHUE",CENTER, 88);
- }
- void presentReadingCardText(){
- clear_screen();
- digitalWrite(yellowLED, LOW);
- mylcd.Set_Text_Size(3);
- mylcd.Print_String("4TEHUE",CENTER, 73);
- mylcd.Print_String("KAPTbI", CENTER, 103);
- }
- void presentNotReadingCardText(){
- clear_screen();
- digitalWrite(yellowLED, LOW);
- mylcd.Set_Text_Size(3);
- mylcd.Print_String("KAPTA",CENTER, 58);
- mylcd.Print_String("HE", CENTER, 88);
- mylcd.Print_String("PA3nO3HAHA", CENTER, 118);
- }
- void presentDataText(){
- clear_screen();
- digitalWrite(yellowLED, LOW);
- mylcd.Set_Text_Size(3);
- mylcd.Print_String("OTBET",CENTER,15);
- mylcd.Print_Number_Int(answer, CENTER, 88, 0, ' ',10);
- }
- void rfid_scan(){
- if ( ! mfrc522.PICC_IsNewCardPresent()) {
- return;
- }
- if ( ! mfrc522.PICC_ReadCardSerial()) {
- return;
- }
- uidDec = 0;
- // Выдача серийного номера метки.
- for (byte i = 0; i < mfrc522.uid.size; i++)
- {
- uidDecTemp = mfrc522.uid.uidByte[i];
- uidDec = uidDec * 256 + uidDecTemp;
- }
- Serial.println(uidDec); // Выводим UID метки в консоль.
- delay(1000);
- if(Serial.available()){
- if (!answerFlag)
- while (answer == -1024) {
- data = Serial.readString();
- answer = data.toInt();
- }
- delay(5000);
- answerFlag = true;
- delay(500);
- }
- }
- void presentAccess(int days) {
- mylcd.Print_String("nponyck",CENTER, 43);
- mylcd.Set_Text_Size(2);
- mylcd.Print_String("DEUCTByET", CENTER, 73);
- mylcd.Set_Text_Size(3);
- mylcd.Print_Number_Int(days, CENTER, 103, 0, ' ',10);
- mylcd.Set_Text_Size(2);
- mylcd.Print_String("DHEU", CENTER, 133);
- }
- void presentDenied(int days) {
- mylcd.Print_String("nponyck",CENTER, 43);
- mylcd.Set_Text_Size(2);
- mylcd.Print_String("HE DEUCTByET", CENTER, 73);
- mylcd.Set_Text_Size(3);
- mylcd.Print_Number_Int(days, CENTER, 103, 0, ' ',10);
- mylcd.Set_Text_Size(2);
- mylcd.Print_String("DHEU", CENTER, 133);
- }
- void loop()
- {
- if (ardReady) {
- ardReady = false;
- presentWaitText();
- }
- scan1 = analogRead(forward);
- if (scan1 < 500) {
- presentReadingText();
- while (driverFlag){
- scanTurn();
- }
- if (!driverFlag){
- presentReadingCardText();
- if (answer == -1024){
- rfid_scan();
- }
- if (answerFlag){
- driverFlag = true;
- if (answer >= 0 && answer < 1024 ){
- answerFlag = false;
- digitalWrite(greenLED, HIGH);
- digitalWrite(redLED, LOW);
- counter = 0;
- clear_screen();
- presentAccess(answer);
- answer = -1024;
- while (counter < 1000){
- counter ++;
- turnRight();
- }
- ardReady = true;
- checker = false;
- }
- if (answer < 0 && checker) {
- counter = 0;
- answer = abs(answer);
- clear_screen();
- presentDenied(answer);
- answerFlag = false;
- digitalWrite(redLED, HIGH);
- digitalWrite(greenLED, LOW);
- while (counter < 1000){
- counter ++;
- turnLeft();
- }
- ardReady = true;
- answer = -1024;
- }
- if (answer >= 1024) {
- clear_screen();
- presentNotReadingCardText();
- answer = -1024;
- answerFlag = false;
- counter = 0;
- digitalWrite(redLED, HIGH);
- digitalWrite(greenLED, LOW);
- while (counter < 1000){
- counter ++;
- turnRight();
- }
- ardReady = true;
- answer = -1024;
- answerFlag = false;
- checker = false;
- }
- }
- }
- } else {
- ardReady = true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement