Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Definicja operacji logicznych
- #define AND &&
- #define OR ||
- // Definicja pinów przycisków do wciskania
- #define PRZYCISK_GORA 5
- #define PRZYCISK_DOL 3
- #define PRZYCISK_MY 4
- #define PRZYCISK_MENU 2
- // Definicja poleceń ESP
- #define POLECENIE_GORA 10
- #define POLECENIE_MY 11
- #define POLECENIE_DOL 12
- // Definicja rolet ESP
- #define ROLETA_1 6
- #define ROLETA_2 7
- #define ROLETA_3 8
- #define ROLETA_4 9
- // Definicja czasu wciśnięcia przycisku
- #define czekaj 250
- // Zmienne globalne
- char co_robic = 'n' // Początkowa zmienna sprawdzazjąca co program ma robić
- int jaki_kanal = 0 // Początkowy kanał
- void setup() {
- // Serial debuging
- Serial.begin(9600);
- // Ustawienie przycisków sterujących pilotem
- pinMode(PRZYCISK_GORA, OUTPUT); digitalWrite(PRZYCISK_GORA, HIGH);
- pinMode(PRZYCISK_DOL, OUTPUT); digitalWrite(PRZYCISK_DOL, HIGH);
- pinMode(PRZYCISK_MENU, OUTPUT); digitalWrite(PRZYCISK_MENU, HIGH);
- pinMode(PRZYCISK_MY, OUTPUT); digitalWrite(PRZYCISK_MY, HIGH);
- }
- int odczyt_analogowy(int port){
- // Trochę ulepszona funkcja wykorzystująca analogRead.
- int stan = 0;
- for (int i = 0; i < 10; i++){
- if (analogRead(port) < 500) stan = 1;
- delay(10);
- }
- return stan;
- }
- int sprawdz_kanal_pilot(){
- int stan = 0;
- int LED1 = 0;
- int LED2 = 0;
- int LED3 = 0;
- int LED4 = 0;
- LED1 |= odczyt_analogowy(0);
- LED2 |= odczyt_analogowy(1);
- LED3 |= odczyt_analogowy(2);
- LED4 |= odczyt_analogowy(3);
- LED1 <<= 3;
- LED2 <<= 2;
- LED3 <<= 1;
- LED4 <<= 0;
- stan = LED1 | LED2 | LED3 | LED4;
- switch (stan){
- case 15: return 5; break;
- case 8: return 1; break;
- case 4: return 2; break;
- case 2: return 3; break;
- case 1: return 4; break;
- case 0: return 0; break;
- }
- }
- void wcisnij_przycisk(char przycisk){
- // Sterowanie roletami
- // z - zmien (przycisk menu)
- // d - rolety w dół (przycisk w dół)
- // g - rolety w górę (przycisk w górę)
- // m - rolety na pozuycję "My" (przycisk My)
- if(przycisk == 'z'){
- digitalWrite(PRZYCISK_MENU, LOW);
- delay(czekaj);
- digitalWrite(PRZYCISK_MENU, HIGH);
- }
- if(przycisk == 'd'){
- digitalWrite(PRZYCISK_DOL, LOW);
- delay(czekaj);
- digitalWrite(PRZYCISK_DOL, HIGH);
- }
- if(przycisk == 'g'){
- digitalWrite(PRZYCISK_GORA, LOW);
- delay(czekaj);
- digitalWrite(PRZYCISK_GORA, HIGH);
- }
- if(przycisk == 'm'){
- digitalWrite(PRZYCISK_MY, LOW);
- delay(czekaj);
- digitalWrite(PRZYCISK_MY, HIGH);
- }
- }
- char sprawdz_polecenie_esp(){
- // Zwraca polecenie ESP
- // d - roleta w dol
- // g - roleta w gore
- // m - pozycja "My Rolety"
- // n - nic nie robi
- int polecenie = 'n';
- if (digitalRead(POLECENIE_DOL) == 1) return 'd';
- else if (digitalRead(POLECENIE_MY == 1) return 'm';
- else if (digitalRead(POLECENIE_GORA) == 1) return 'g';
- return polecenie;
- }
- int sprawdz_kanal_esp(){
- // Polecenie zwraca rolete która ma wysterowac Arduino
- // ROLETA_1 - roleta duża w pokoju dużym
- // ROLETA_2 - roleta mała w pokoju duzym
- // ROLETA_3 - roleta w pokoju małym
- // ROLETA_4 (wszystkie diody na raz) - ROLETA_1 i ROLETA_2 razem
- // Dioda 4 odpowiada za wszystkie rolety.
- int kanal = 0;
- if ((digitalRead(ROLETA_1) == 1) AND (digitalRead(ROLETA_2) == 1) AND (digitalRead(ROLETA_3) == 1) AND (digitalRead(ROLETA_4) == 1)) return 5;
- else if (digitalRead(ROLETA_1) == 1) return 1;
- else if (digitalRead(ROLETA_2) == 1) return 2;
- else if (digitalRead(ROLETA_3) == 1) return 3;
- else if (digitalRead(ROLETA_4) == 1) return 4;
- return kanal;
- }
- void loop() {
- co_robic = sprawdz_polecenie_esp();
- jaki_kanal = sprawdz_kanal_esp();
- if (co_robic == 'n'){
- delay(100);
- return;
- } else {
- switch (co_robic){
- case 'd':
- while (sprawdz_kanal_pilot() != jaki_kanal){
- wcisnij_przycisk('z');
- delay(czekaj);
- }
- wcisnij_przycisk('d');
- break;
- case 'm':
- while (sprawdz_kanal_pilot() != jaki_kanal){
- wcisnij_przycisk('z');
- delay(czekaj);
- }
- wcisnij_przycisk('m');
- break;
- case 'g':
- while (sprawdz_kanal_pilot() != jaki_kanal){
- wcisnij_przycisk('z');
- delay(czekaj);
- }
- wcisnij_przycisk('g');
- break;
- }
- }
- delay(czekaj*20);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement