Skocz do zawartości
Komentator

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

Udostępnij ten post


Link to post
Share on other sites

@ceiem przyznam że kod wygląda bardzo przejrzyście 🙂 a dlaczego stosujesz do...while() ?

Udostępnij ten post


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 🙂

Udostępnij ten post


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

Udostępnij ten post


Link to post
Share on other sites
2 minuty temu, Gieneq napisał:

reakcji na zbocza przy obsłudze przycisków

A co to oznacza? 🙂

Udostępnij ten post


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

Udostępnij ten post


Link to post
Share on other sites

A jak to zrobić w kodzie?

Udostępnij ten post


Link to post
Share on other sites

Ciekawe 🙂 Dziękuję bardzo! Potestuję!

Ile ja się od Was uczę 🙂 Fajnie 🙂 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Akurat wczoraj skończyłem tą cześć kursu a dzisiaj reklama mi wskoczyła na FB z waszym kursem i nie mogłem wstawić zdjęcia w komentarzu.
Dziękuję forbot za waszą ciężką prac

103451552_255805808979243_2160479876473645838_n.jpg

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@pancerz1d dzięki, miło słyszeć się się podoba 🙂 Powodzenia podczas dalszej nauki!

Udostępnij ten post


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. 

Udostępnij ten post


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

Udostępnij ten post


Link to post
Share on other sites

@Gieneq aaaa teraz rozumiem. Dziękuję bardzo 🙂 

Zamówiłem wczoraj zestaw do drugiej części i działam dalej... Świetny kurs.

  • Lubię! 2

Udostępnij ten post


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

 

Udostępnij ten post


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