• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
3 klik ;)
#1
Witam, właścicielem arduino jestem już kupe czasu. Służył mi do wielu projektów zaczynając od zapalenia światła przez sms do oświetlenia pokoju na ws2812b. Ale nie o tym, praktycznie nigdy nie napisałem kodu sam.. No niestety nie czułem takiej potrzeby ale aktualnie muszę napisać coś na 9.03, do rzeczy.
Posiadam arduino leonardo do którego podłączony jest przełącznik pod pin 2. Przełącznik ten ma działać tak że, po naciśnięciu na pinie 10 nie będzie sygnału ale po 3 kliknięciach przycisku a potem naciśnięciu tego samego przycisku na pinie 10 będzie już sygnał (załączenie mosfeta) i w drógą strone. Po 3 krotnym szybkim naciśnięciu przycisku a późniejszym naciśnięciu przycisku znów nie będzie napięcia na wyjściu (pin 10). Chodzi mi o taki "3 klik". Niestety siedze nad tym od wczoraj i nie mam kompletnego pomysłu jak to napisać. Nie chce żeby ktoś mi tłumaczył jak mam to napisać. Znaczy chce Wink Ale potrzebuje ten kod na szybko, dopiero po tym jak zobacze że to działa będę go analizował.. Byłby ktoś w stanie takie cuś napisać? Lub może ma ktoś taki kod.. Jeśli chce ktoś jakąś dobną zapłate to proszę się odezwać na pw. (Wiem że od tego jest jakaś giełda ale to takie wtrącenie do wątku).
Jeśli wybrałem zły dział to przepraszam i proszę o przeniesienie.
 
Odpowiedź
#2
Kod:
bool klik_SW = false;                // Przelacznik licznika klikniec
uint8_t data_klik_SW = 0;            // Licznik klikniec
uint8_t stan_short_SW;               // Zmienna stanu do krutkiego pezycisku
uint8_t stan_long_SW;                // Zmienna stanu do dlugiego przycisku reset
uint8_t ostatni_stan_SW = HIGH;      // Poprzedni stan odczytanu z pinu wejsciowego
uint32_t SW_Time;                    // Zmienna  czasu long/short
uint32_t klik_SW_Time;               // Zmienna  czasu licznika klikniec



void on_off_SW() {

  uint8_t odczyt_SW = digitalRead(SW_);     // Odczyt stanu przycisku do zmiennej  GPIO 0
  if (odczyt_SW != ostatni_stan_SW) {       // Jezeli wykryto inny stan wlacz odliczanie
    SW_Time = millis();
  }
  ostatni_stan_SW = odczyt_SW;              // Zapisywanie  odcztanej wartosci stanu przyciku

  if ((millis() - SW_Time) > 50) {          // Warunek czasu minimalnego krotkiego nacisniecia drganie stykow
    if (odczyt_SW != stan_short_SW) {
      stan_short_SW = odczyt_SW;
      if (stan_short_SW == LOW) {           // Jesli przycisk jest wcisniety (stan niski)
        klik_SW_Time=millis();              // Odliczanie czasu na drugie przycisniecie
        data_klik_SW++;                     // Licznik przycisnienc
        klik_SW=true;                       // Przelacznik zadzialania licznika
      }
    }
  }
 
  if ((millis() - klik_SW_Time) > 600 && odczyt_SW == HIGH){ // Czas na podliczenie licznika przycisniec i puszczeniu przycisku
    if (klik_SW == true){                   // Sprawdzanie  czy byl uruchomiony licznik przycisniec SW
      if (data_klik_SW == 1){               // Jezeli raz przycisnieto
       
       // funkcja 1xklik
      }
      if (data_klik_SW == 2){               // Jezeli przycisnieto dwa razy
       
        // funkcja 2xklik
      }
        klik_SW = false;                    // Zresetowanie uruchomionego licznika
        data_klik_SW = 0;                   // Zresetowanie licznika przycisku
       
    }
  }
   
  if ((millis() - SW_Time) > 2000) {       // Warunek czasu na przycisniecie dlugie
    if (odczyt_SW != stan_long_SW) {
      stan_long_SW = odczyt_SW;
      if (stan_long_SW == LOW) {           // Jezeli przycisk wcisniety ponad 2s
        klik_SW = false;                   // Zresetowanie uruchomionego licznika
        data_klik_SW = 0;                  // Zresetowanie licznika przycisku
       
        // funkcja do wywołania

      }
    }
  }
}


Przycisk  funkcyjny  drobne zmiany i działa jak chcesz..
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
dziękuje bardzo za odpowiedź ale niestety mam błąd


Kod:
C:\Users\Filip\Documents\Arduino\sketch_mar08a\sketch_mar08a.ino: In function 'void on_off_SW()':
sketch_mar08a:13:35: error: 'SW_' was not declared in this scope
  uint8_t odczyt_SW = digitalRead(SW_);    // Odczyt stanu przycisku do zmiennej  GPIO 0
                                  ^
exit status 1
'SW_' was not declared in this scope
 
Odpowiedź
#4
No wiesz nie dałem ci gotowca lecz przykład, na którym się możesz bazować....

zamiast digitalRead(SW_) daj digitalRead(10)

lub na początku

#define SW_ 10
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości