Skocz do zawartości

Pomoc z else if'ami


Mikolajkie

Pomocna odpowiedź

Chodzi o wykrywanie stanu wciśnięcia, a po wciśnięciu zmienna typu float o nazwie frequency ma zmienić się o +0.1, lub w przypadku drugiego przycisku -0.1.

Po tym ma się wyświetlić na lcd 2x16 zmienna frequency [lcd.print(frequency)]. Potem wywoła się funkcja do zmiany częstotliwości w radiu.

Link do komentarza
Share on other sites

(edytowany)

@farmaceuta Wydaje mi się, że lepiej użyć else/if. Tutaj poniżej jest fragment kodu (napisany na szybko) przycisku do podświetlenia (przycisk będzie jeden). Na Tinkercadzie wszystko działało dobrze, ale chce się upewnić.

[...]

boolean backlight = false;

void setup() {
  [...]
}
  
void loop() {
  [...]
	if(backlightButton == LOW && backlight == false) {
      lcd.noBacklight(); // wylaczenie podswietlenia w lcd
      backlight = true;
      delay(100);
    } else if(backlightButton == LOW && backlight == true) {
      lcd.backlight(); // wlaczenie podswietlenia
      backlight = false;
      delay(100);
    }
   }

 

Edytowano przez Mikolajkie
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

Tak wygląda przełączanie częstotliwości, czy wszystko jest dobrze? Wiem, że brakuje funkcji sterującej modułem tea5767, ale tak poza tym to chyba jest dobrze.

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

float frequency = 104.1; // jakas przykladowa czestotliwosc

byte state = 0;

void setup()
{
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("FM ");
  lcd.print(frequency, 1);
  lcd.print(" MHz");
}

void loop()
{
  switch(state) {
    case 0:
    if(digitalRead(10) == LOW) {
      frequency = frequency + 0.1;
      if(frequency > 108.0) {
        frequency = 108.0;
      }
      lcd.setCursor(0,0);
      lcd.print("FM ");
      lcd.print(frequency, 1);
      lcd.print(" MHz ");
      delay(100);
    } else if(digitalRead(9) == LOW) {
      frequency = frequency - 0.1;
      if(frequency < 87.5) {
        frequency = 87.5;
      }
      lcd.setCursor(0,0);
      lcd.print("FM ");
      lcd.print(frequency, 1);
      lcd.print(" MHz ");
      delay(100);
    }
    break;
  }
}

 

Edytowano przez Mikolajkie
Link do komentarza
Share on other sites

(edytowany)

@Mikolajkie może byc z tym że teraz tak jak jest bez żadnych "opóźniaczy" po wciśnięciu guzika częstotliwość przewinienie w mgnieniu oka bo kod wykonuje się bardzo szybko 

Edit...teraz zauważyłem delay'a,no to w sumie na początek mogło by być 😉

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

(edytowany)

- tea5767, zostaw to . piszczy, syczy kiepskie jako radio.

- ja robię na tef6686 v 205

TEF6686.thumb.jpg.c903a4026492098776d9db67181daedc.jpg

Edytowano przez 99teki
Link do komentarza
Share on other sites

@farmaceuta Czy takie coś działało by dobrze (zmienna dystans przechowuje odczyt z czujnika odległości)?

To jest fragment kodu i chodzi mi o else/if'y 🙂

if(dystans > 20 && dystans < 40) {
  digitalWrite(buzzer, HIGH);
} else if(digitalRead(przycisk) == LOW) {
  digitalWrite(buzzer, HIGH);
} else {
  digitalWrite(buzzer, LOW);
}

 

Link do komentarza
Share on other sites

(edytowany)

Jeżeli chodzi o to żeby guzik nie był sprawdzany w sytuacji kiedy dystans jest w zakresie 20-40 to jest dobrze😉 

Kiedy zakres będzie większy lub mniejszy to guzikiem będzie można włączyć buzzer, a kiedy nie wciśnięty to będzie buzzer wylaczony

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.