Odpowiedz 
 
Ocena wątku:
  • 6 Głosów - 4 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #103
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Weekend, weekend i po weekendzie... fajnie że tyle osób testuje złomka. To budujące że ktoś to buduje i testuje. A zatem do dzieła jedziemy dalej.

Dzisiaj zanim pójdę spać bo rano w trasę Wink Postanowiłem przepisać obsługę klawiszy STEP i RIT, a konkretnie wzorem z Heńka przewalić je na jedno wejście, bo przyda nam się parę fajnych klawiszy a wejść jest jak na lekarstwo. Dodatkowo przeniosłem sygnał PTT z pinu 12 na 2, a dlaczego o tym na końcu.

Zacząłem od tego że przygotowałem dwie zmienne typu boolean by przechowywać status tych przycisków.

Kod:
boolean step_button_pressed = false;
boolean rit_button_pressed = false;

Do sprawdzania stanu wciśnięcia przycisków użyjemy jednego z wejść, dokładnie tego którego używaliśmy do obsługi przycisku krok syntezy, w tym miejscu by mocno w kodzie nie mieszać poprostu zapalamy flagi wciśniętych klawiszy:

Kod:
const int buttons_input = A2;

A robimy to tak:

Kod:
if(analogRead(buttons_input) < 1000){         //jeśli cokolwiek jest wciśnięte to sprawdźmy co to
    delay(10);                                  //male opoźnienie by się ustabilizował stan
    int adc_value = analogRead(buttons_input);
    Serial.println(adc_value);                  //w tym miejscu sprawdzisz jaka wartość ma wcisnięty klawisz patrz port RS232 debugowanie
    if(adc_value < 10){                         //pierwszy przycisk
      step_button_pressed = true;
    }
    if(adc_value > 10 && adc_value < 100){      //drugi przycisk
      rit_button_pressed = true;
    }
    
  }else{                                  //w każdym innym przypadku resetujemy flagi przycisków
      step_button_pressed = false;        //reset przycisku step
      rit_button_pressed = false;         //przycisk rita
  }

Uwagę proszę zwrócić na pierwszą linię tej funkcji, by nie opóźniać procesora podczas normalnej pracy gdy żaden z przycisków nie jest naciśnięty, funkcja ta nie sprawdza już nic więcej tylko resetuje flagi przycisków.

Poszczególne funkcje które dotychczas sprawdzały stan wejść teraz sprawdzają tylko stan flag przycisków.

Było tak:

Kod:
//obsługa klawisza zmiany kroku
  if(digitalRead(step_input) == LOW){     //sprawdzanie czy przycisk jest wcisnięty
    delay(50);                            //zwłoka by wyeliminować drgania styków
    if(digitalRead(step_input) == LOW){
......

a teraz jest tak:

Kod:
//obsługa klawisza zmiany kroku
  if(step_button_pressed == true){        //sprawdzanie czy przycisk jest wcisnięty
    delay(50);                            //zwłoka by wyeliminować drgania styków
    if(step_button_pressed == true){
....

Podobnie zrobiłem w części kodu obsługującego klawisz RIT.

Jesli chodzi zaś o przeniesienie sygnału PTT na pin 2 to intencją było zwolnienie pinu 12-tego który może pracować jako PWM. A na nim zrobimy sobie w następnym odcinku ściemnianie podświetlenia wyświetlacza. Taki wypas Wink

İmage
Mały schemat podłączenia przycisków.

W załączeniu kod po ostatnich zmianach.


Załączone pliki
.zip  zlomek_v_1_0_12-141026b.zip (Rozmiar: 6.91 KB / Pobrań: 380)

...przede wszystkim nie zakłócać...
26-10-2014 23:35
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO - SQ9MDD - 26-10-2014 23:35

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości