Skocz do zawartości

Kurs Arduino - #7 - Wyświetlacz tekstowy, LCD 2x16


Pomocna odpowiedź

Zadanie 7.4.

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

#define rozpocznij 5
#define zakoncz  6

int sekundy = 0;
int minuty = 0;

void setup() 
{
  lcd.init();
  lcd.backlight(); 
  pinMode(rozpocznij,INPUT_PULLUP);
  pinMode(zakoncz,INPUT_PULLUP);
  lcd.print("Wcisnij aby");
  lcd.setCursor(0,1);
  lcd.print("rozpoczac!");
}
void loop() 
{
  if(digitalRead(rozpocznij) == LOW)
  {
    do
    {
       lcd.clear();
       sekundy++;
       lcd.print("odliczam: ");
       lcd.setCursor(0,1);
       lcd.print(sekundy);
       delay(1000);
    }
    while(digitalRead(zakoncz) == HIGH);
    
    if(digitalRead(zakoncz)==LOW)
    {
      lcd.clear();
      lcd.print("uplynelo: ");
      lcd.setCursor(0,1);
      lcd.print(sekundy);
      lcd.print(" sekund");
    }
  }
}

 

 

  • Pomogłeś! 1
Link to post
Share on other sites

No bo pierwsze wykonanie pętli jest niezależne od warunku i powinno się wykonać? Takie przyzwyczajenie z rozwiązywania zadań maturalnych 🙂

Link to post
Share on other sites

Jak celowo użyte to czemu nie, próbowałem sobie tylko wyobrazić sytuację gdzie miałoby to czemuś zapobiec. To by musiała być sytuacja, gdzie startuję odliczanie i zanim minie sekunda zacznę usiłować zakończyć odliczanie.

No i zwyczajowo zachęcam do reakcji na zbocza przy obsłudze przycisków, ale to taki już mój kaprys 😉 a tak to kod bardzo ładny. Tak trzymaj i powodzenia dalej! 

  • Lubię! 1
Link to post
Share on other sites
6 minut temu, ceiem napisał:

A co to oznacza?

A to oznacza, że zamiast na stan przycisku (np. "jest naciśnięty ale nie wiadomo od kiedy, może od wczoraj albo co") reagujesz na jego zmianę (np "przed chwilą nie był wciśnięty a teraz jest, czyli ktoś tam wsadził palucha").

 

  • Lubię! 2
Link to post
Share on other sites

Wydawało mi się, że jak podświetlimy fotorezystor, to opór maleje 

i napięcie powinno być większe? Teraz mam tak, że jak oświetlam fotorezystor to jest 1.53V

a po odsunięciu oświetlenia jest 4.55V. Nie rozumiem tego za bardzo. 

Link to post
Share on other sites

@tomaszkot witam na forum 🙂

A widzisz, dzieje się tak gdyż piszesz o 2 różnych sprawach - napięcie a prąd to nie to samo, bo trzeba uwzględnić to jak się coś mierzy. W fotorezystorze opór rośnie ze spadkie mjasności (odwrotnie: maleje ze wzrostem jasności).

Ale tu piszesz o napięciu, które zależy od sposobu podłączenia. W tym przypadku fotorezystor jest w dzielniku przy masie, stąd im większy jego opór tym mniej prądu przechodzi do masy (mniejszy ma ona wpływ) i większe zoczenie ma zasilanie. Jak to rozpisać to jest to w ten sposób (nie znam wartości rezystancji jasnej i ciemnej ale widać tu zależność):

image.thumb.png.32af7fc46952c06f573ca519b159d982.png

  • Pomogłeś! 1
Link to post
Share on other sites

Moja wersja stopera na maszynie stanów i czasem liczonym z funkcji millis.

#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);

float czas = 0.0;
int stan = 1;

unsigned long aktualnyCzas = 0;
unsigned long zmianaCzasu = 0;
unsigned long zmiana = 0;

void setup() {
  // put your setup code here, to run once:
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);

lcd.begin(16,2);
}

void loop() {
 aktualnyCzas = millis();
 
 switch(stan) {
  case 1:
  lcd.setCursor(0, 0);
  lcd.print("Wcisnij");
  lcd.setCursor(0, 1);
  lcd.print("przycisk");
  if (digitalRead(8) == LOW) {
    lcd.clear();
    zmianaCzasu = aktualnyCzas;
    stan = 2;
  }
  break;
 case 2:
 lcd.setCursor(0, 0);
 lcd.print("Pomiar czasu");
 
 zmiana = aktualnyCzas - zmianaCzasu;
 if (zmiana >= 10) {
  zmianaCzasu = aktualnyCzas;
  czas=czas+0.01;
 }
 lcd.setCursor(0, 1);
 lcd.print(czas);
 if(digitalRead(9) == LOW) {
  lcd.clear();
  stan=3;
 }
 break;

 case 3:
 lcd.setCursor(0, 0);
 lcd.print("Koniec pomiaru");
 lcd.setCursor(0, 1);
 lcd.print(czas);
 if (digitalRead(10) == LOW) {
  lcd.clear();
  czas=0;
  stan=1;
 }else if (digitalRead(8) == LOW) {
  lcd.clear();
  stan=2;
 }
 break;
}
}

 

Link to post
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

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.