Skocz do zawartości

qro9qs

Użytkownicy
  • Zawartość

    10
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O qro9qs

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. #include <Keypad.h> //biblioteka od klawiatury #include <LiquidCrystal_I2C.h> //biblioteka dla LCD z I2C #include <Wire.h> const byte ROWS = 4; // ile wierszy const byte COLS = 4; //ile kolumn byte rowPins[ROWS] = {5, 4, 3, 2}; //piny wierszy byte colPins[COLS] = {6, 7, 8, 9}; //piny kolum int previousMode = -1; //definiowanie zmiennej zapamiętującej pasmo int currentMode = -1; //definiowanie zmiennej zapamiętującej pasmo char keys[ROWS][COLS] = { //mapowanie klawiatury {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury LiquidCrystal_I2C lcd(0x27, 20, 4); //stworzony obiekt LCD o podanych z I2C Scanner parametrach int odczytanaWartosc0; //odczytanie wartości napięcia na wejściu A0 do wyboru pasma /**************************************************/ void setup(){ lcd.begin(); lcd.setCursor(0, 0); //Ustawienie kursora pinMode(13, INPUT); //wejście PTT } /**************************************************/ void loop(){ if(currentMode != previousMode){ lcd.clear(); previousMode = currentMode; }//warunek do czyszczenia wyświetlacza przy zmianie pasma odczytanaWartosc0 = analogRead(A0); Serial.println(odczytanaWartosc0); //odczytanie wartości napięcia na A0 dla wybranego pasma char klawisz; if(digitalRead(13) == HIGH){ klawisz = klawiatura.getKey(); } Serial.println(klawisz); //blokada klawiatury jeśli TX i odczytanie znaku z klawiatury /**************************160M************************/ if (odczytanaWartosc0 >= 0 && odczytanaWartosc0 <= 100) { currentMode = 0; lcd.setCursor(0,0); lcd.print("Band:160M"); lcd.setCursor(2,1); lcd.print("Vertical"); lcd.setCursor(12,0); //K9AY lcd.print("K9AY:"); //K9AY switch(klawisz){ case '1': lcd.setCursor(0,1); lcd.print((char)255); digitalWrite(10,HIGH);break; case '7': lcd.setCursor(17,0);lcd.print("USA");break; //K9AY case '8': lcd.setCursor(17,0);lcd.print("JA ");break; //K9AY case '0': lcd.setCursor(17,0);lcd.print("VK ");break; //K9AY case '*': lcd.setCursor(17,0);lcd.print("PY ");break; //K9AY } } /**************************80M************************/ else if (odczytanaWartosc0 >= 110 && odczytanaWartosc0 <= 160) { currentMode = 1; lcd.setCursor(0,0); lcd.print("Band:80M"); lcd.setCursor(2,1); lcd.print("Spitfire"); lcd.setCursor(2,2); lcd.print("Delta"); lcd.setCursor(12,0); //K9AY lcd.print("K9AY:"); //K9AY switch(klawisz){ case '1': lcd.setCursor(0,1); lcd.print((char)255);lcd.setCursor(0,2); lcd.print(" "); break; case '2': lcd.setCursor(0,2); lcd.print((char)255);lcd.setCursor(0,1); lcd.print(" "); break; case 'A': lcd.setCursor(10,1);lcd.print(":USA ");break; case 'B': lcd.setCursor(10,1);lcd.print(":JA ");break; case 'C': lcd.setCursor(10,1);lcd.print(":VK ");break; case 'D': lcd.setCursor(10,1);lcd.print(":PY ");break; case '#': lcd.setCursor(10,1);lcd.print(":CENT");break; case '7': lcd.setCursor(17,0);lcd.print("USA");break; //K9AY case '8': lcd.setCursor(17,0);lcd.print("JA ");break; //K9AY case '0': lcd.setCursor(17,0);lcd.print("VK ");break; //K9AY case '*': lcd.setCursor(17,0);lcd.print("PY ");break; //K9AY } } /***************************40M***********************/ else if (odczytanaWartosc0 >= 240 && odczytanaWartosc0 <= 300) { currentMode = 2; lcd.setCursor(0,0); lcd.print("Band:40M"); lcd.setCursor(2,1); lcd.print("Yagi"); lcd.setCursor(2,2); lcd.print("Vertical"); lcd.setCursor(12,0); //K9AY lcd.print("K9AY:"); //K9AY switch(klawisz){ case '1': lcd.setCursor(0,1); lcd.print((char)255);lcd.setCursor(0,2); lcd.print(" "); break; case '2': lcd.setCursor(0,2); lcd.print((char)255);lcd.setCursor(0,1); lcd.print(" "); break; case 'A': lcd.setCursor(7,1);lcd.print(":Front ");break; case 'B': lcd.setCursor(7,1);lcd.print(":Back ");break; case 'C': lcd.setCursor(7,1);lcd.print(":Center");break; case '7': lcd.setCursor(17,0);lcd.print("USA");break; //K9AY case '8': lcd.setCursor(17,0);lcd.print("JA ");break; //K9AY case '0': lcd.setCursor(17,0);lcd.print("VK ");break; //K9AY case '*': lcd.setCursor(17,0);lcd.print("PY ");break; //K9AY } } /************************20M**************************/ else if (odczytanaWartosc0 >= 350 && odczytanaWartosc0 <= 450) { currentMode = 3; lcd.setCursor(0,0); lcd.print("Band:20M"); lcd.setCursor(2,1); lcd.print("OB16-3"); lcd.setCursor(2,2); lcd.print("QQ 2el"); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,1); lcd.print((char)255); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,2); lcd.print((char)255); digitalWrite(10,HIGH);break; } } /************************15M**************************/ else if (odczytanaWartosc0 >= 500 && odczytanaWartosc0 <= 600) { currentMode = 4; lcd.setCursor(0,0); lcd.print("Band:15M"); lcd.setCursor(2,1); lcd.print("OB16-3"); lcd.setCursor(2,2); lcd.print("QQ 2el"); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,1); lcd.print((char)255); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,2); lcd.print((char)255); digitalWrite(10,HIGH);break; } } /************************10M**************************/ else if (odczytanaWartosc0 >= 650 && odczytanaWartosc0 <= 700) { currentMode = 5; lcd.setCursor(0,0); lcd.print("Band:10M"); lcd.setCursor(2,1); lcd.print("OB16-3"); lcd.setCursor(2,2); lcd.print("QQ 2el"); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,1); lcd.print((char)255); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,2); lcd.print((char)255); digitalWrite(10,HIGH);break; } } } Udało się poprawić kod i co nieco dodać. Ekran czyści się po zmianie pasma instrukcją if. Dodatkowo dołożona funkcja, która blokuje działanie klawiatury (dzięki której możemy zmienić antenę i jej kierunek) gdy mamy załączony nadajnik aby nie uszkodzić przekaźników wykonawczych łukiem elektrycznym.
  2. Nie, zmiana zachodzi po zmianie np. z 160m na 80m. Wszystko działa jak należy ze zmianą pasma. Zostawmy to. Zapytałem w jaki sposób przechodząc z jednego if do kolejnego if czyścić wyświetlacz zanim wyświetlą się nowe napisy na LCD. lcd.clear() na początku każdej if nie robi tego poprawnie ponieważ odświeża co chwilę wyświetlacz usuwając to co zostało już wybrane na tym zakresie
  3. #include <Keypad.h> //biblioteka od klawiatury #include <LiquidCrystal_I2C.h> //biblioteka dla LCD z I2C #include <Wire.h> const byte ROWS = 4; // ile wierszy const byte COLS = 4; //ile kolumn byte rowPins[ROWS] = {5, 4, 3, 2}; //piny wierszy byte colPins[COLS] = {6, 7, 8, 9}; //piny kolum char keys[ROWS][COLS] = { //mapowanie klawiatury {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury LiquidCrystal_I2C lcd(0x27, 20, 4); //stworzony obiekt LCD o podanych z I2C Scanner parametrach int odczytanaWartosc0; /**************************************************/ void setup(){ lcd.begin(); lcd.setCursor(0, 0); //Ustawienie kursora } /**************************************************/ void loop(){ odczytanaWartosc0 = analogRead(A0); Serial.println(odczytanaWartosc0); /**************************160M************************/ if (odczytanaWartosc0 >= 0 && odczytanaWartosc0 <= 100) { lcd.setCursor(2,0); lcd.print("160m Vertical"); lcd.setCursor(2,1); lcd.print("160m Dipol"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,0); lcd.print((char)255); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,1); lcd.print((char)255); digitalWrite(10,HIGH);break; } } /**************************80M************************/ else if (odczytanaWartosc0 >= 110 && odczytanaWartosc0 <= 160) { lcd.setCursor(2,0); lcd.print("80m Spitfire"); lcd.setCursor(2,1); lcd.print("80m Delta"); lcd.setCursor(2,3); //K9AY lcd.print("K9AY: "); //K9AY char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.setCursor(0,0); lcd.print((char)255);lcd.setCursor(0,1); lcd.print(" "); break; case '2': lcd.setCursor(0,1); lcd.print((char)255);lcd.setCursor(0,0); lcd.print(" "); break; case 'A': lcd.setCursor(17,0);lcd.print("USA");break; case 'B': lcd.setCursor(17,0);lcd.print("JA");break; case 'C': lcd.setCursor(17,0);lcd.print("VK");break; case 'D': lcd.setCursor(17,0);lcd.print("PY");break; case '7': lcd.clear(); lcd.setCursor(8,3);lcd.print("USA");break; //K9AY case '8': lcd.clear(); lcd.setCursor(8,3);lcd.print("JA");break; //K9AY case '0': lcd.clear(); lcd.setCursor(8,3);lcd.print("VK");break; //K9AY case '*': lcd.clear(); lcd.setCursor(8,3);lcd.print("PY");break; //K9AY } } /***************************40M***********************/ else if (odczytanaWartosc0 >= 240 && odczytanaWartosc0 <= 300) { lcd.setCursor(2,0); lcd.print("40m Yagi"); lcd.setCursor(2,1); lcd.print("40m Vertical"); lcd.setCursor(2,3); //K9AY lcd.print("K9AY: "); //K9AY char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.setCursor(0,0); lcd.print((char)255);lcd.setCursor(0,1); lcd.print(" "); break; case '2': lcd.setCursor(0,1); lcd.print((char)255);lcd.setCursor(0,0); lcd.print(" "); break; case 'A': lcd.setCursor(12,0);lcd.print("Front");break; case 'B': lcd.setCursor(12,0);lcd.print("Back");break; case 'C': lcd.setCursor(12,0);lcd.print("Center");break; case '7': lcd.clear(); lcd.setCursor(8,3);lcd.print("USA");break; //K9AY case '8': lcd.clear(); lcd.setCursor(8,3);lcd.print("JA");break; //K9AY case '0': lcd.clear(); lcd.setCursor(8,3);lcd.print("VK");break; //K9AY case '*': lcd.clear(); lcd.setCursor(8,3);lcd.print("PY");break; //K9AY } } /************************20M**************************/ else if (odczytanaWartosc0 >= 350 && odczytanaWartosc0 <= 450) { lcd.setCursor(2,0); lcd.print("20m OB16-3"); lcd.setCursor(2,1); lcd.print("20m QQ 2el"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,0); lcd.print((char)255); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,1); lcd.print((char)255); digitalWrite(10,HIGH);break; } } /************************15M**************************/ else if (odczytanaWartosc0 >= 500 && odczytanaWartosc0 <= 600) { lcd.setCursor(2,0); lcd.print("15m OB16-3"); lcd.setCursor(2,1); lcd.print("15m QQ 2el"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,0); lcd.print((char)255); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,1); lcd.print((char)255); digitalWrite(10,HIGH);break; } } /************************10M**************************/ else if (odczytanaWartosc0 >= 650 && odczytanaWartosc0 <= 700) { lcd.setCursor(2,0); lcd.print("10m OB16-3"); lcd.setCursor(2,1); lcd.print("10m QQ 2el"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,0); lcd.print((char)255); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,1); lcd.print((char)255); digitalWrite(10,HIGH);break; } } } *po przejściu z warunku do warunku (zmiana pasma)
  4. Sprawdzając wartości odczytywane przez arduino po wybraniu zakresu ustawiłem te przedziały (z zapasem)
  5. [...]else if (odczytanaWartosc0 >= 350 && odczytanaWartosc0 <= 450) [...] Dziękuję. Dalej działa jak należy. W którym miejscu czyścić ekran po przejściu z warunku if do kolejnego? Za pomocą lcd.clear()? Jeśli tak to odświeża się non stop i ekran miga.
  6. W porządku, zagłębię się w to. Jednak obecnie po kilkunasto krotnym sprawdzeniu nie było sytuacji aby zakres nie odpalił się po wybraniu zakresu na przełączniku. Za każdym razem wybiera poprawnie. Dziękuję. A co z funkcją kasującą wyświetlone znaki na LCD po przejściu na kolejny zakres?
  7. Gdy na A0 pojawi się sygnał o wartości między 500 a 600 to załącza się wybrany zakres. W tym wypadku 15M
  8. Przepraszam, pętle zostały zmienione na if. Co do dziwnej konstrukcji... Mam 6 zakresów przełączanych przełącznikiem obrotowym z dzielnika napięcia. Sygnał podany na A0. Po odczytaniu odpowiedniej wartości napięcia (podzielonej przez dzielnik) zostaje wybrany odpowiedni zakres.
  9. #include <Keypad.h> //biblioteka od klawiatury #include <LiquidCrystal_I2C.h> //biblioteka dla LCD z I2C #include <Wire.h> const byte ROWS = 4; // ile wierszy const byte COLS = 4; //ile kolumn byte rowPins[ROWS] = {5, 4, 3, 2}; //piny wierszy byte colPins[COLS] = {6, 7, 8, 9}; //piny kolum char keys[ROWS][COLS] = { //mapowanie klawiatury {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury LiquidCrystal_I2C lcd(0x27, 20, 4); //stworzony obiekt LCD o podanych z I2C Scanner parametrach int odczytanaWartosc0; /**************************************************/ void setup(){ lcd.begin(); lcd.setCursor(0, 0); //Ustawienie kursora } /**************************************************/ void loop(){ odczytanaWartosc0 = analogRead(A0); Serial.println(odczytanaWartosc0); /**************************160M************************/ if (odczytanaWartosc0 == random(0, 100)) { lcd.setCursor(2,0); lcd.print("160m Vertical"); lcd.setCursor(2,1); lcd.print("160m Dipol"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,0); lcd.print("X"); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,1); lcd.print("X"); digitalWrite(10,HIGH);break; } } /**************************80M************************/ else if (odczytanaWartosc0 == random(110, 160)) { lcd.setCursor(2,0); lcd.print("80m Spitfire"); lcd.setCursor(2,1); lcd.print("80m Delta"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.setCursor(0,0); lcd.print("X");lcd.setCursor(0,1); lcd.print(" "); break; case '2': lcd.setCursor(0,1); lcd.print("X");lcd.setCursor(0,0); lcd.print(" "); break; case 'A': lcd.setCursor(17,0);lcd.print("USA");break; case 'B': lcd.setCursor(17,0);lcd.print("JA");break; case 'C': lcd.setCursor(17,0);lcd.print("VK");break; case 'D': lcd.setCursor(17,0);lcd.print("PY");break; } } /***************************40M***********************/ else if (odczytanaWartosc0 == random(240, 300)) { lcd.setCursor(2,0); lcd.print("40m Yagi"); lcd.setCursor(2,1); lcd.print("40m Vertical"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.setCursor(0,0); lcd.print("X");lcd.setCursor(0,1); lcd.print(" "); break; case '2': lcd.setCursor(0,1); lcd.print("X");lcd.setCursor(0,0); lcd.print(" "); break; case '4': lcd.setCursor(12,0);lcd.print("Front");break; case '5': lcd.setCursor(12,0);lcd.print("Back");break; case '6': lcd.setCursor(12,0);lcd.print("Center");break; } } /************************20M**************************/ else if (odczytanaWartosc0 == random(350, 450)) { lcd.setCursor(2,0); lcd.print("20m OB16-3"); lcd.setCursor(2,1); lcd.print("20m QQ 2el"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,0); lcd.print("X"); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,1); lcd.print("X"); digitalWrite(10,HIGH);break; } } /************************15M**************************/ else if (odczytanaWartosc0 == random(500, 600)) { lcd.setCursor(2,0); lcd.print("15m OB16-3"); lcd.setCursor(2,1); lcd.print("15m QQ 2el"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,0); lcd.print("X"); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,1); lcd.print("X"); digitalWrite(10,HIGH);break; } } /************************10M**************************/ else if (odczytanaWartosc0 == random(650, 700)) { lcd.setCursor(2,0); lcd.print("10m OB16-3"); lcd.setCursor(2,1); lcd.print("10m QQ 2el"); char klawisz = klawiatura.getKey(); Serial.println(klawisz); switch(klawisz){ case '1': lcd.clear();lcd.setCursor(0,0); lcd.print("X"); digitalWrite(10,HIGH);break; case '2': lcd.clear();lcd.setCursor(0,1); lcd.print("X"); digitalWrite(10,HIGH);break; } } } Brakuje tylko stanów wyjść dopisanych przy każdej opcji. Lada chwila się pojawią jednak póki co walczę ze zmianą opisów na wyświetlaczu po zmianie pasma.
  10. Witam Mam mały problem z programem w Arduino. W głównej pętli programu mam kilka pętli if w których wyświetlam dane na wyświetlaczu oraz używam klawiatury załączając wyjścia cyfrowe. Przełączam się z pętli na pętle przy pomocy dzielnika napięcia z przełącznikiem na A0. W jaki sposób przechodząc z pętli if do kolejnej pętli if czyścić LCD oraz wyłączać wszystkie włączone wyjścia cyfrowe?
×
×
  • Utwórz nowe...