Advertisement
Guest User

Untitled

a guest
Feb 8th, 2021
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.68 KB | None | 0 0
  1. #include <LiquidCrystal_I2C.h>// подключаем библиотеку для i2с шины дисплея
  2. #include <IRremote.h> // подключаем библиотеку для IR приемника
  3.  
  4. IRrecv irrecv(14); // указываем пин, к которому подключен IR приемник
  5. LiquidCrystal_I2C lcd(0x27, 16, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
  6. byte relN = 1;
  7. bool a[] = {true, true, true, true, true, true, true, true};
  8. String r = "Relay ";
  9. bool topStr = true;
  10. decode_results results;
  11.  
  12. void setup() {
  13. pinMode(14, INPUT);
  14. pinMode(15, OUTPUT);
  15. pinMode(16, OUTPUT);
  16. digitalWrite(15, LOW);
  17. digitalWrite(16, HIGH);
  18. for (int i = 2; i <= 9; i++) {
  19. pinMode(i, OUTPUT);
  20. digitalWrite(i, HIGH);
  21. }
  22. irrecv.enableIRIn(); // запускаем прием
  23. Serial.begin(9600); // подключаем монитор порта
  24. lcd.init(); // initialize the lcd
  25. lcd.backlight();
  26. lcd.setCursor(0, 0);
  27. lcd.print(">");
  28. lcd.setCursor(1, 0);
  29. lcd.print(r + relN);
  30. lcd.setCursor(1, 1);
  31. lcd.print(r + (relN + 1));
  32. lcd.setCursor(13, 0);
  33. lcd.print(digRead(a[relN - 1]));
  34. lcd.setCursor(13, 1);
  35. lcd.print(digRead(a[relN]));
  36.  
  37. }
  38.  
  39. void loop() {
  40. if (irrecv.decode(&results)) { // если данные пришли выполняем команды
  41. Serial.println(results.value, HEX); // отправляем полученные данные на порт
  42. shiftCursor(); //Проверяем, являются ли нажатые кнопки стрелками. Если да, то курсор меняет строку, а номер реле меняется.
  43. if (results.value == 0xFF38C7)switchR(relN, topStr);
  44. Serial.println(relN);
  45. //Serial.println(topStr);
  46. delay(200);
  47. irrecv.resume();
  48. }
  49. }
  50.  
  51. void shiftCursor() { //метод, изменяющий строку курсора принажатии клавиш пульта "вверх" и "вниз", а так же номер выбранного реле
  52. if (results.value == 0xFF4AB5 | results.value == 0xFF18E7) {
  53. if (topStr) {
  54. lcd.setCursor(0, 0);
  55. lcd.print(" ");
  56. lcd.setCursor(0, 1);
  57. lcd.print(">");
  58. topStr = !topStr;
  59. } else {
  60. lcd.setCursor(0, 1);
  61. lcd.print(" ");
  62. lcd.setCursor(0, 0);
  63. lcd.print(">");
  64. topStr = !topStr;
  65. }
  66. }
  67. if (results.value == 0xFF4AB5) {
  68. shiftNum(relN++);
  69. relN = shiftNum(relN);
  70. if (topStr) {
  71. printStrD(relN);
  72. }
  73. }
  74. if (results.value == 0xFF18E7) {
  75. shiftNum(relN--);
  76. relN = shiftNum(relN);
  77. if (!topStr) {
  78. printStrU(relN);
  79. }
  80. }
  81. }
  82.  
  83. void printStrD(byte c) { //метод, меняющий название и номер реле при нажатии кнопки "вниз"
  84. c = shiftNum(c);
  85. lcd.setCursor(1, 0);
  86. lcd.print(r + c + " " + digRead(a[c - 1]));
  87. lcd.setCursor(1, 1);
  88. lcd.print(r + (c + 1) + " " + digRead(a[c]));
  89. }
  90.  
  91. void printStrU(byte c) { //метод, меняющий название и номер реле при нажатии кнопки "вверх"
  92. c = shiftNum(c);
  93. lcd.setCursor(1, 0);
  94. lcd.print(r + (c - 1) + " " + digRead(a[c - 2]));
  95. lcd.setCursor(1, 1);
  96. lcd.print(r + (c) + " " + digRead(a[c - 1]));
  97. }
  98.  
  99. byte shiftNum(byte n) { //метод, организующий циклическое пролистывание номеров реле
  100. if (n >= 9) {
  101. return 1;
  102. }
  103. if (n <= 0) {
  104. return 8;
  105. }
  106. else {
  107. return n;
  108. }
  109. }
  110.  
  111. String digRead(bool b) { //метод, возвращающий статус работы реле в строковом виде
  112. if (b) {
  113. return "OFF";
  114. } else {
  115. return " ON";
  116. }
  117. }
  118.  
  119. void switchR(byte s, bool t) { //метод, выводящий статус работы реле на дисплей в формате "он-офф" и изменяющий состояние реле при нажатии кнопки "ок"
  120. a[s - 1] = !a[s - 1];
  121. digitalWrite(s+1, a[s-1]);
  122. Serial.println(a[s - 1]);
  123. if (t) {
  124. lcd.setCursor(13, 0);
  125. lcd.print(digRead(a[relN - 1]));
  126. } else {
  127. lcd.setCursor(13, 1);
  128. lcd.print(digRead(a[relN - 1]));
  129. }
  130. }
  131.  
  132.  
  133. //FF18E7 вверх
  134. //FF4AB5 вниз
  135. //FF38C7 ок
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement