Advertisement
Astranome

125

Oct 1st, 2020
439
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.48 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <EEPROM.h>
  3. #include <avr/interrupt.h>
  4. #include <avr/io.h>
  5. #include <avr/sleep.h>
  6. #include <Arduino.h>
  7. #include <U8g2lib.h>
  8. //#include <SPI.h>
  9. #include <Wire.h>
  10.  
  11. //#include "U8glib.h"
  12.  
  13. //U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(12, 11, 8, 9, 10); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
  14. U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  15.  
  16. // Пин к которому подключена катушка - пин D2 D6
  17. #define COIL 6
  18.  
  19.  
  20.  
  21. byte facility[2] = { 0x02, 0x0C };
  22. byte cardID[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
  23. int colsum[4] = { 0, 0, 0, 0}; // storage for the column checksums
  24.  
  25. // delay between symbols when we are transmitting
  26. int bittime = 254; //256
  27.  
  28. byte RFIDdata[128];
  29.  
  30. int clock = 0; // storage for the current state of our clock signal.
  31.  
  32. byte datapointer = 0;
  33. byte state;
  34.  
  35. //******************************************************
  36. #define METAKOM_CYFRAL 0xFFFFFFFFFF
  37. #define METAKOM_1 0x365A1140BE
  38. #define CYFRAL_1 0x01FFFFFFFF
  39. #define VIZIT_1 0x565A1140BE
  40. #define VIZIT_2 0x365A398149
  41. #define ELTIS 0x0
  42. #define K0St25 0x2802AB1340D2 //0x0B57814601
  43. #define TOILET 0x2802AB1340 //BH352802AB1340D2
  44.  
  45. //uint64_t universalID[8] = {1099511627775, 233439314110, 8589934591, 370878267582, 233441952073, 0, 48712730113, 5675447};
  46. uint64_t universalID[] =
  47. {
  48.   METAKOM_CYFRAL,
  49.   METAKOM_1,
  50.   CYFRAL_1,
  51.   VIZIT_1,
  52.   VIZIT_2,
  53.   0,
  54.   K0St25,
  55.   TOILET
  56. };
  57. uint32_t nibleMask = 15;
  58.  
  59. #define BTN_UP   3
  60. #define BTN_DWN  5
  61. #define BTN_SEL  4
  62.  
  63. int8_t keyNumber = 0;
  64.    
  65.      
  66.  void draw0(void) {
  67.       u8g.setFont(u8g_font_unifont); //display.setCursor(0, 0);
  68.       u8g.drawStr(0,10, ">>1 Met_CY");
  69.       u8g.drawStr(0,26," 2 Met_1");
  70.       u8g.drawStr(0,40," 3 CY_1");
  71.       u8g.drawStr(0,54," 4 VIZ_1");
  72.      }
  73. void draw1(void) {
  74.       u8g.setFont(u8g_font_unifont); //display.setCursor(0, 0);
  75.       u8g.drawStr(0,10, "1 Met_CY");
  76.       u8g.drawStr(0,26,">> 2 Met_1");
  77.       u8g.drawStr(0,40," 3 CY_1");
  78.       u8g.drawStr(0,54," 4 VIZ_1");
  79.      }
  80.  void draw2(void) {
  81.       u8g.setFont(u8g_font_unifont); //display.setCursor(0, 0);
  82.       u8g.drawStr(0,10, "1 Met_CY");
  83.       u8g.drawStr(0,26," 2 Met_1");
  84.       u8g.drawStr(0,40,">> 3 CY_1");
  85.       u8g.drawStr(0,54," 4 VIZ_1");
  86.      }
  87. void draw3(void) {
  88.       u8g.setFont(u8g_font_unifont);
  89.       u8g.drawStr(0,10, "1 Met_CY");
  90.       u8g.drawStr(0,26," 2 Met_1");
  91.       u8g.drawStr(0,40," 3 CY_1");
  92.       u8g.drawStr(0,54,">> 4 VIZ_1");
  93. }
  94. void draw4(void) {
  95.       u8g.setFont(u8g_font_unifont);  
  96.       u8g.drawStr(0,10,">5 VIZ_2");
  97.       u8g.drawStr(0,26," 6 ELT");
  98.       u8g.drawStr(0,40," 7 K0St25");
  99.       u8g.drawStr(0,54," 8 BH35");
  100. }
  101. void draw5(void) {
  102.       u8g.setFont(u8g_font_unifont);  
  103.       u8g.drawStr(0,10," 5 VIZ_2");
  104.       u8g.drawStr(0,26,"> 6 ELT");
  105.       u8g.drawStr(0,40," 7 K0St25");
  106.       u8g.drawStr(0,54," 8 BH35");
  107.       }
  108. void draw6(void) {
  109.       u8g.setFont(u8g_font_unifont);  
  110.       u8g.drawStr(0,10," 5 VIZ_2");
  111.       u8g.drawStr(0,26," 6 ELT");
  112.       u8g.drawStr(0,40,"> 7 K0St25");
  113.       u8g.drawStr(0,54," 8 BH35");
  114.       }
  115.  void draw7(void) {
  116.       u8g.setFont(u8g_font_unifont);  
  117.       u8g.drawStr(0,10," 5 VIZ_2");
  118.       u8g.drawStr(0,26," 6 ELT");
  119.       u8g.drawStr(0,40," 7 K0St25");
  120.       u8g.drawStr(0,54,">> 8 BH35");                  
  121.      }  
  122. void tr0(void) {
  123.       u8g.setFont(u8g_font_unifont);  
  124.       u8g.drawStr(0,10,"> MCOM_CY <");
  125. }
  126. void tr1(void) {
  127.       u8g.setFont(u8g_font_unifont);  
  128.       u8g.drawStr(0,10,"> MCOM_1 <");
  129. }
  130. void tr2(void) {
  131.       u8g.setFont(u8g_font_unifont);  
  132.       u8g.drawStr(0,10,"> CYF_1 <");
  133. }
  134. void tr3(void) {
  135.       u8g.setFont(u8g_font_unifont);  
  136.       u8g.drawStr(0,10,"> VIZ_1 <");
  137. }
  138. void tr4(void) {
  139.       u8g.setFont(u8g_font_unifont);  
  140.       u8g.drawStr(0,10,"> VIZ_2 <");
  141. }
  142. void tr5(void) {
  143.       u8g.setFont(u8g_font_unifont);  
  144.       u8g.drawStr(0,10,"> ELTIS <");
  145. }
  146. void tr6(void) {
  147.       u8g.setFont(u8g_font_unifont);  
  148.       u8g.drawStr(0,10,"> K0St25 <");
  149. }
  150. void tr7(void) {
  151.       u8g.setFont(u8g_font_unifont);  
  152.       u8g.drawStr(0,10,"> BH35 <");
  153. }
  154.  
  155.  
  156. void setup()
  157. {
  158.  // Serial.begin(115200);
  159.  
  160.   pinMode(BTN_UP, INPUT_PULLUP);
  161.   pinMode(BTN_DWN, INPUT_PULLUP);
  162.   pinMode(BTN_SEL, INPUT_PULLUP);
  163.  
  164.   pinMode(COIL, OUTPUT);
  165.   digitalWrite(COIL, LOW);
  166. // flip screen, if required
  167. //  u8g.setRot180();
  168.  u8g.begin();
  169.  // display.init();  
  170.  // display.backlight();
  171. //u8g.setFont(u8g_font_unifont);
  172. }
  173.  
  174. void loop(void)
  175. {
  176.   //Serial.println(keyNumber);
  177.  
  178.   if (digitalRead(BTN_UP) == LOW)
  179.   {
  180.     keyNumber++;
  181.     if (keyNumber == 8) keyNumber = 0;
  182.     while (digitalRead(BTN_UP) == LOW);
  183.     //display.clear();
  184.   }
  185.  
  186.   if (digitalRead(BTN_DWN) == LOW)
  187.   {
  188.     keyNumber--;
  189.     if (keyNumber == -1) keyNumber = 7;
  190.     while (digitalRead(BTN_DWN) == LOW);
  191.     //display.clear();
  192.   }
  193.  
  194.   switch (keyNumber)
  195.   {
  196.  case 0:
  197.  
  198.       u8g.firstPage();  
  199.   do {
  200.     draw0();
  201.   } while( u8g.nextPage() );
  202.       //display.display();
  203.       break;
  204.  case 1:
  205.       u8g.firstPage();  
  206.   do {
  207.     draw1();
  208.   } while( u8g.nextPage() );
  209.       //display.display();
  210.       break;
  211.  case 2:
  212.       u8g.firstPage();  
  213.   do {
  214.     draw2();
  215.   } while( u8g.nextPage() );
  216.       //display.display();
  217.       break;
  218.  case 3:
  219.       u8g.firstPage();  
  220.   do {
  221.     draw3();
  222.   } while( u8g.nextPage() );
  223.       //display.display();
  224.       break;
  225.     case 4:
  226.       u8g.firstPage();  
  227.   do {
  228.     draw4();
  229.   } while( u8g.nextPage() );
  230.       break;
  231.     case 5:
  232.       u8g.firstPage();  
  233.   do {
  234.     draw5();
  235.   } while( u8g.nextPage() );
  236.       break;
  237.     case 6:
  238.       u8g.firstPage();  
  239.   do {
  240.     draw6();
  241.   } while( u8g.nextPage() );
  242.       break;
  243.     case 7:
  244.       u8g.firstPage();  
  245.   do {
  246.     draw7();
  247.   } while( u8g.nextPage() );
  248.       break;
  249.   }
  250.  
  251.   if (digitalRead(BTN_SEL) == LOW)
  252.   {
  253.     //display.clear();
  254.     switch (keyNumber)
  255.     {
  256.       case 0:
  257.         u8g.firstPage();  
  258.   do {
  259.     tr0();
  260.   } while( u8g.nextPage() );
  261.         break;
  262.       case 1:
  263.         u8g.firstPage();  
  264.   do {
  265.     tr1();
  266.   } while( u8g.nextPage() );
  267.         break;
  268.       case 2:
  269.         u8g.firstPage();  
  270.         do {
  271.         tr2();
  272.          } while( u8g.nextPage() );
  273.         break;
  274.       case 3:
  275.         u8g.firstPage();  
  276.         do {
  277.         tr3();
  278.          } while( u8g.nextPage() );
  279.         break;
  280.       case 4:
  281.         u8g.firstPage();  
  282.         do {
  283.         tr4();
  284.          } while( u8g.nextPage() );
  285.         break;
  286.       case 5:
  287.         u8g.firstPage();  
  288.         do {
  289.         tr5();
  290.          } while( u8g.nextPage() );
  291.         break;
  292.       case 6:
  293.         u8g.firstPage();  
  294.         do {
  295.         tr6();
  296.          } while( u8g.nextPage() );
  297.         break;
  298.       case 7:
  299.         u8g.firstPage();  
  300.         do {
  301.         tr7();
  302.          } while( u8g.nextPage() );
  303.         break;
  304.     }
  305.     /*display.print("Press reset");
  306.     display.print("to continue...");
  307.     display.display();
  308. */
  309.     facility[0] = universalID[keyNumber] >> 36 & nibleMask;
  310.     facility[1] = universalID[keyNumber] >> 32 & nibleMask;
  311.  
  312.     for (uint8_t i = 0; i < 8; ++i ) //забиваем десятичный ID карты в массив
  313.     {
  314.       cardID[i] = (universalID[keyNumber] >> ((7 - i) * 4)) & nibleMask; //в нулевой элемент массива надо записывать старший разряд, поэтому 7-i
  315.     }
  316.  
  317.     EmulateCard();  // start card emulation
  318.   }  
  319.  
  320.  
  321. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement