Advertisement
Guest User

Untitled

a guest
Aug 25th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Definicja operacji logicznych
  2. #define AND &&
  3. #define OR ||
  4.  
  5. // Definicja pinów przycisków do wciskania
  6. #define PRZYCISK_GORA 5
  7. #define PRZYCISK_DOL 3
  8. #define PRZYCISK_MY 4
  9. #define PRZYCISK_MENU 2
  10.  
  11. // Definicja poleceń ESP
  12. #define POLECENIE_GORA 10
  13. #define POLECENIE_MY 11
  14. #define POLECENIE_DOL 12
  15.  
  16. // Definicja rolet ESP
  17. #define ROLETA_1 6
  18. #define ROLETA_2 7
  19. #define ROLETA_3 8
  20. #define ROLETA_4 9
  21.  
  22. // Definicja czasu wciśnięcia przycisku
  23. #define czekaj 250
  24.  
  25. // Zmienne globalne
  26. char co_robic = 'n'     // Początkowa zmienna sprawdzazjąca co program ma robić
  27. int jaki_kanal = 0      // Początkowy kanał
  28.  
  29. void setup() {
  30.  
  31.     // Serial debuging
  32.     Serial.begin(9600);
  33.  
  34.     // Ustawienie przycisków sterujących pilotem
  35.     pinMode(PRZYCISK_GORA, OUTPUT);     digitalWrite(PRZYCISK_GORA, HIGH);
  36.     pinMode(PRZYCISK_DOL, OUTPUT);      digitalWrite(PRZYCISK_DOL, HIGH);
  37.     pinMode(PRZYCISK_MENU, OUTPUT);     digitalWrite(PRZYCISK_MENU, HIGH);
  38.     pinMode(PRZYCISK_MY, OUTPUT);       digitalWrite(PRZYCISK_MY, HIGH);
  39. }
  40.  
  41.  
  42. int odczyt_analogowy(int port){
  43. // Trochę ulepszona funkcja wykorzystująca analogRead.
  44.     int stan = 0;
  45.     for (int i = 0; i < 10; i++){
  46.         if (analogRead(port) < 500) stan = 1;
  47.         delay(10);
  48.     }
  49.     return stan;
  50. }
  51.  
  52. int sprawdz_kanal_pilot(){
  53.     int stan = 0;
  54.     int LED1 = 0;
  55.     int LED2 = 0;
  56.     int LED3 = 0;
  57.     int LED4 = 0;
  58.  
  59.     LED1 |= odczyt_analogowy(0);
  60.     LED2 |= odczyt_analogowy(1);
  61.     LED3 |= odczyt_analogowy(2);
  62.     LED4 |= odczyt_analogowy(3);
  63.  
  64.     LED1 <<= 3;
  65.     LED2 <<= 2;
  66.     LED3 <<= 1;
  67.     LED4 <<= 0;
  68.  
  69.     stan = LED1 | LED2 | LED3 | LED4;
  70.  
  71.     switch (stan){
  72.         case 15: return 5; break;
  73.         case 8: return 1; break;
  74.         case 4: return 2; break;
  75.         case 2: return 3; break;
  76.         case 1: return 4; break;
  77.         case 0: return 0; break;
  78.     }
  79. }
  80.  
  81. void wcisnij_przycisk(char przycisk){  
  82. // Sterowanie roletami
  83. //  z - zmien (przycisk menu)
  84. //  d - rolety w dół (przycisk w dół)
  85. //  g - rolety w górę (przycisk w górę)
  86. //  m - rolety na pozuycję "My" (przycisk My)
  87.  
  88.     if(przycisk == 'z'){
  89.         digitalWrite(PRZYCISK_MENU, LOW);
  90.         delay(czekaj);
  91.         digitalWrite(PRZYCISK_MENU, HIGH);
  92.     }
  93.     if(przycisk == 'd'){
  94.         digitalWrite(PRZYCISK_DOL, LOW);
  95.         delay(czekaj);
  96.         digitalWrite(PRZYCISK_DOL, HIGH);
  97.     }
  98.     if(przycisk == 'g'){
  99.         digitalWrite(PRZYCISK_GORA, LOW);
  100.         delay(czekaj);
  101.         digitalWrite(PRZYCISK_GORA, HIGH);
  102.     }
  103.     if(przycisk == 'm'){
  104.         digitalWrite(PRZYCISK_MY, LOW);
  105.         delay(czekaj);
  106.         digitalWrite(PRZYCISK_MY, HIGH);
  107.     }
  108. }
  109.  
  110. char sprawdz_polecenie_esp(){
  111. // Zwraca polecenie ESP
  112. // d - roleta w dol
  113. // g - roleta w gore
  114. // m - pozycja "My Rolety"
  115. // n - nic nie robi
  116.     int polecenie = 'n';
  117.    
  118.     if (digitalRead(POLECENIE_DOL) == 1) return 'd';
  119.     else if (digitalRead(POLECENIE_MY == 1) return 'm';
  120.     else if (digitalRead(POLECENIE_GORA) == 1) return 'g';
  121.    
  122.     return polecenie;
  123. }
  124.  
  125. int sprawdz_kanal_esp(){
  126. // Polecenie zwraca rolete która ma wysterowac Arduino
  127. // ROLETA_1 - roleta duża w pokoju dużym
  128. // ROLETA_2 - roleta mała w pokoju duzym
  129. // ROLETA_3 - roleta w pokoju małym
  130. // ROLETA_4 (wszystkie diody na raz) - ROLETA_1 i ROLETA_2 razem
  131. // Dioda 4 odpowiada za wszystkie rolety.
  132.  
  133.     int kanal = 0;
  134.    
  135.     if ((digitalRead(ROLETA_1) == 1) AND (digitalRead(ROLETA_2) == 1) AND (digitalRead(ROLETA_3) == 1) AND (digitalRead(ROLETA_4) == 1)) return 5;
  136.     else if (digitalRead(ROLETA_1) == 1) return 1;
  137.     else if (digitalRead(ROLETA_2) == 1) return 2;
  138.     else if (digitalRead(ROLETA_3) == 1) return 3;
  139.     else if (digitalRead(ROLETA_4) == 1) return 4;
  140.    
  141.     return kanal;
  142. }
  143.  
  144. void loop() {
  145.     co_robic = sprawdz_polecenie_esp();
  146.     jaki_kanal = sprawdz_kanal_esp();
  147.     if (co_robic == 'n'){
  148.         delay(100);
  149.         return;
  150.     } else {
  151.         switch (co_robic){
  152.             case 'd':
  153.                 while (sprawdz_kanal_pilot() != jaki_kanal){
  154.                     wcisnij_przycisk('z');
  155.                     delay(czekaj);
  156.                 }
  157.                 wcisnij_przycisk('d');
  158.             break;
  159.             case 'm':
  160.                 while (sprawdz_kanal_pilot() != jaki_kanal){
  161.                     wcisnij_przycisk('z');
  162.                     delay(czekaj);
  163.                 }
  164.                 wcisnij_przycisk('m');
  165.             break;
  166.             case 'g':
  167.                 while (sprawdz_kanal_pilot() != jaki_kanal){
  168.                     wcisnij_przycisk('z');
  169.                     delay(czekaj);
  170.                 }
  171.                 wcisnij_przycisk('g');
  172.             break;
  173.         }
  174.     }
  175.     delay(czekaj*20);
  176.    
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement