Skocz do zawartości

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.

(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
(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
(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
(edytowany)

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

- ja robię na tef6686 v 205

TEF6686.thumb.jpg.c903a4026492098776d9db67181daedc.jpg

Edytowano przez 99teki

Robiłem już takie radio, nie miałem żadnych problemów, jak dałem kondensatory 220nf na wyjścia dźwięku.

@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);
}

 

(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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...