Advertisement
Guest User

Untitled

a guest
May 20th, 2019
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.13 KB | None | 0 0
  1. #include <LCDWIKI_GUI.h> //Core graphics library
  2. #include <LCDWIKI_SPI.h> //Hardware-specific library
  3. #include <SPI.h>
  4. #include <MFRC522.h>
  5.  
  6. #define RST_PIN         5          // Configurable, see typical pin layout above
  7. #define SS_PIN          53         // Configurable, see typical pin layout above
  8.  
  9. #define MODEL ILI9225
  10. #define CS   A5
  11. #define CD   A3
  12. #define RST  A4
  13. #define SDA  A2
  14. #define SCK  A1
  15. #define LED  -1
  16.  
  17. #define BLACK   0x0000
  18. #define BLUE    0x001F
  19. #define RED     0xF800
  20. #define GREEN   0x07E0
  21. #define CYAN    0x07FF
  22. #define MAGENTA 0xF81F
  23. #define YELLOW  0xFFE0
  24. #define WHITE   0xFFFF
  25.  
  26. unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате
  27. bool ardReady = true;
  28. String data;
  29. int answer = -1024;
  30. int redLED = 4;
  31. int yellowLED = 6;
  32. int greenLED = 7;
  33. int motorPin1 = 8;
  34. int motorPin2 = 9;
  35. int motorPin3 = 10;
  36. int motorPin4 = 11;
  37. int delayTime = 2;
  38. int forward = 6;
  39. int back = 7;
  40. int scan1 = 0;
  41. int scan2 = 0;
  42. bool driverFlag = true;
  43. bool answerFlag = false;
  44. int counter = 0;
  45. bool checker = true;
  46.  
  47. LCDWIKI_SPI mylcd(MODEL,CS,CD,-1,SDA,RST,SCK,LED);
  48. MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance
  49.  
  50. void setup() {
  51.   Serial.begin(115200);   // Initialize serial communications with the PC
  52.   while (!Serial);    // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
  53.   SPI.begin();      // Init SPI bus
  54.   mfrc522.PCD_Init();   // Init MFRC522
  55.   mylcd.Init_LCD();
  56.   mylcd.Set_Text_Mode(0);
  57.   mylcd.Fill_Screen(WHITE);
  58.   mylcd.Set_Text_colour(BLACK);
  59.   mylcd.Set_Text_Back_colour(WHITE);
  60.   mylcd.Set_Rotation(1);
  61.   pinMode(motorPin1, OUTPUT);
  62.   pinMode(motorPin2, OUTPUT);
  63.   pinMode(motorPin3, OUTPUT);
  64.   pinMode(motorPin4, OUTPUT);
  65. }
  66.  
  67. void turnByNum(int num) {
  68.   if (num == 0) {
  69.     digitalWrite(motorPin1, LOW);
  70.     digitalWrite(motorPin2, LOW);
  71.     digitalWrite(motorPin3, LOW);
  72.     digitalWrite(motorPin4, LOW);
  73.   }
  74.   if (num == 1) {
  75.     digitalWrite(motorPin1, HIGH);
  76.     digitalWrite(motorPin2, LOW);
  77.     digitalWrite(motorPin3, LOW);
  78.     digitalWrite(motorPin4, LOW);
  79.   }
  80.  if (num == 2) {
  81.     digitalWrite(motorPin1, LOW);
  82.     digitalWrite(motorPin2, HIGH);
  83.     digitalWrite(motorPin3, LOW);
  84.     digitalWrite(motorPin4, LOW);
  85.   }
  86.  if (num == 3) {
  87.     digitalWrite(motorPin1, LOW);
  88.     digitalWrite(motorPin2, LOW);
  89.     digitalWrite(motorPin3, HIGH);
  90.     digitalWrite(motorPin4, LOW);
  91.   }
  92.   if (num == 4) {
  93.     digitalWrite(motorPin1, LOW);
  94.     digitalWrite(motorPin2, LOW);
  95.     digitalWrite(motorPin3, LOW);
  96.     digitalWrite(motorPin4, HIGH);
  97.   }
  98.   delay(2);
  99. }
  100.  
  101. void scanTurn(){
  102.  
  103.   if (driverFlag){
  104.     scan2 = analogRead(back);
  105.     if (scan2 > 100){
  106.       turnByNum(1);
  107.       turnByNum(2);
  108.       turnByNum(3);
  109.       turnByNum(4);
  110.     } else {
  111.      driverFlag = false;
  112.       turnByNum(0);
  113.       //return;
  114.     }
  115.   }
  116. }
  117.  
  118. void turnLeft(){
  119.   turnByNum(1);
  120.   turnByNum(2);
  121.   turnByNum(3);
  122.   turnByNum(4);
  123. }
  124.  
  125. void turnRight(){
  126.   turnByNum(1);
  127.   turnByNum(4);
  128.   turnByNum(3);
  129.   turnByNum(2);
  130. }
  131.  
  132. void clear_screen(void)
  133. {
  134.    delay(2000);  
  135.    mylcd.Set_Draw_color(WHITE);
  136.    mylcd.Fill_Rectangle(1, 12, mylcd.Get_Display_Width()-2, mylcd.Get_Display_Height()-1-12);
  137. }
  138.  
  139. void presentWaitText(){
  140.   clear_screen();
  141.   checker = true;
  142.   digitalWrite(yellowLED, HIGH);
  143.   digitalWrite(greenLED, LOW);
  144.   digitalWrite(redLED, LOW);
  145.   mylcd.Set_Text_Size(3);
  146.   mylcd.Print_String("BCTABbTE",CENTER, 73);
  147.   mylcd.Print_String("KAPTy", CENTER, 103);
  148. }
  149.  
  150. void presentReadingText(){
  151.   clear_screen();
  152.   digitalWrite(yellowLED, LOW);
  153.   mylcd.Set_Text_Size(3);
  154.   mylcd.Print_String("4TEHUE",CENTER, 88);
  155. }
  156.  
  157. void presentReadingCardText(){
  158.   clear_screen();
  159.   digitalWrite(yellowLED, LOW);
  160.   mylcd.Set_Text_Size(3);
  161.   mylcd.Print_String("4TEHUE",CENTER, 73);
  162.   mylcd.Print_String("KAPTbI", CENTER, 103);
  163. }
  164.  
  165. void presentNotReadingCardText(){
  166.   clear_screen();
  167.   digitalWrite(yellowLED, LOW);
  168.   mylcd.Set_Text_Size(3);
  169.   mylcd.Print_String("KAPTA",CENTER, 58);
  170.   mylcd.Print_String("HE", CENTER, 88);
  171.   mylcd.Print_String("PA3nO3HAHA", CENTER, 118);
  172. }
  173.  
  174. void presentDataText(){
  175.   clear_screen();
  176.   digitalWrite(yellowLED, LOW);
  177.   mylcd.Set_Text_Size(3);
  178.   mylcd.Print_String("OTBET",CENTER,15);
  179.   mylcd.Print_Number_Int(answer, CENTER, 88, 0, ' ',10);
  180.  
  181. }
  182.  
  183. void rfid_scan(){
  184.  
  185. if ( ! mfrc522.PICC_IsNewCardPresent()) {
  186.       return;
  187.     }
  188.     if ( ! mfrc522.PICC_ReadCardSerial()) {
  189.       return;
  190.     }
  191.  
  192.    uidDec = 0;
  193.     // Выдача серийного номера метки.
  194.     for (byte i = 0; i < mfrc522.uid.size; i++)
  195.     {
  196.       uidDecTemp = mfrc522.uid.uidByte[i];
  197.       uidDec = uidDec * 256 + uidDecTemp;
  198.     }
  199.    
  200.     Serial.println(uidDec); // Выводим UID метки в консоль.
  201.     delay(1000);
  202.     if(Serial.available()){
  203.       if (!answerFlag)
  204.       while (answer == -1024) {
  205.       data = Serial.readString();
  206.       answer = data.toInt();
  207.       }
  208.       delay(5000);
  209.       answerFlag = true;
  210.     delay(500);
  211. }
  212. }
  213.  
  214. void presentAccess(int days) {
  215.   mylcd.Print_String("nponyck",CENTER, 43);
  216.   mylcd.Set_Text_Size(2);
  217.   mylcd.Print_String("DEUCTByET", CENTER, 73);
  218.   mylcd.Set_Text_Size(3);
  219.   mylcd.Print_Number_Int(days, CENTER, 103, 0, ' ',10);
  220.   mylcd.Set_Text_Size(2);
  221.   mylcd.Print_String("DHEU", CENTER, 133);
  222. }
  223.  
  224. void presentDenied(int days) {
  225.   mylcd.Print_String("nponyck",CENTER, 43);
  226.   mylcd.Set_Text_Size(2);
  227.   mylcd.Print_String("HE DEUCTByET", CENTER, 73);
  228.   mylcd.Set_Text_Size(3);
  229.   mylcd.Print_Number_Int(days, CENTER, 103, 0, ' ',10);
  230.   mylcd.Set_Text_Size(2);
  231.   mylcd.Print_String("DHEU", CENTER, 133);
  232. }
  233.  
  234. void loop()
  235. {  
  236.    
  237.   if (ardReady) {
  238.   ardReady = false;
  239.   presentWaitText();
  240.   }
  241.   scan1 = analogRead(forward);
  242.   if (scan1 < 500) {
  243.    
  244.     presentReadingText();
  245.     while (driverFlag){
  246.       scanTurn();
  247.     }
  248.     if (!driverFlag){
  249.     presentReadingCardText();
  250.     if (answer == -1024){
  251.     rfid_scan();
  252.     }
  253.     if (answerFlag){
  254.    driverFlag = true;
  255.    if (answer >= 0 && answer < 1024 ){
  256.    
  257.    answerFlag = false;
  258.    digitalWrite(greenLED, HIGH);
  259.    digitalWrite(redLED, LOW);
  260.    
  261.    counter = 0;
  262.    clear_screen();
  263.    presentAccess(answer);
  264.     answer = -1024;
  265.    while (counter < 1000){
  266.     counter ++;
  267.    turnRight();
  268.    }
  269.    ardReady = true;
  270.    checker = false;
  271.    }
  272.    if (answer < 0 && checker) {
  273.      counter = 0;
  274.    answer = abs(answer);
  275.    clear_screen();
  276.    presentDenied(answer);
  277.    answerFlag = false;
  278.    digitalWrite(redLED, HIGH);
  279.    digitalWrite(greenLED, LOW);
  280.    while (counter < 1000){
  281.     counter ++;
  282.    turnLeft();
  283.    }
  284.    ardReady = true;
  285.     answer = -1024;
  286.    }
  287.    if (answer >= 1024) {
  288.     clear_screen();
  289.     presentNotReadingCardText();
  290.     answer = -1024;
  291.     answerFlag = false;
  292.      counter = 0;
  293.       digitalWrite(redLED, HIGH);
  294.        digitalWrite(greenLED, LOW);
  295.       while (counter < 1000){
  296.       counter ++;
  297.       turnRight();
  298.    }
  299.    ardReady = true;
  300.    answer = -1024;
  301.    answerFlag = false;
  302.    checker = false;
  303.    }
  304.     }
  305.   }
  306.   } else {
  307.    
  308.     ardReady = true;
  309.   }
  310.  
  311. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement