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

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

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
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
  • 3 tygodnie później...

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
  • 2 tygodnie później...

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. 

@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
  • 1 miesiąc później...

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

 

  • Pomogłeś! 1

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...