Arduino Polska Forum
Czas zapalania led wyświetlany na LCD i regulowany potencjometrem - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Jak zacząć z Arduino (https://forum.arduinopolska.pl/dzial-jak-zacz%C4%85%C4%87-z-arduino)
+--- Wątek: Czas zapalania led wyświetlany na LCD i regulowany potencjometrem (/watek-czas-zapalania-led-wy%C5%9Bwietlany-na-lcd-i-regulowany-potencjometrem)



Czas zapalania led wyświetlany na LCD i regulowany potencjometrem - Panjarek - 10-02-2025

Cześć.
Koledzy tworzę właśnie coś takiego, że dioda zapala mi się na czas regulowany potencjometrem i czas ten wyświetlany jest na LCD.
Generalnie działa ale zmiany na potencjometrze widziane są dopiero po czasie jaki jest ustawiony dla świecenia diody.
Wiem dlaczego się tak dzieje ale jak zrobić to aby było bardziej płynnie?
Kod:
#include <LiquidCrystal.h> /

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int czas = 0;
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Milisekund:");
  lcd.setCursor(0,1);

}
double odczyt;
void loop()
{
  odczyt = analogRead(A0)*10.0;
  lcd.setCursor(0, 1);
  lcd.print(odczyt);
  czas = analogRead(A0)*10;
  digitalWrite(LED_BUILTIN, HIGH);
  delay(czas);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}



RE: Czas zapalania led wyświetlany na LCD i regulowany potencjometrem - oscarX - 10-02-2025

(10-02-2025, 14:57)Panjarek napisał(a): Cześć.
Koledzy tworzę właśnie coś takiego, że dioda zapala mi się na czas regulowany potencjometrem i czas ten wyświetlany jest na LCD.
Generalnie działa ale zmiany na potencjometrze widziane są dopiero po czasie jaki jest ustawiony dla świecenia diody.
Wiem dlaczego się tak dzieje ale jak zrobić to aby było bardziej płynnie?
Kod:
#include <LiquidCrystal.h> /

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int czas = 0;
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Milisekund:");
  lcd.setCursor(0,1);

}
double odczyt;
void loop()
{
  odczyt = analogRead(A0)*10.0;
  lcd.setCursor(0, 1);
  lcd.print(odczyt);
  czas = analogRead(A0)*10;
  digitalWrite(LED_BUILTIN, HIGH);
  delay(czas);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}
Bo działasz synchronicznie - czytasz wartość z potencjometru, włączasz diodę, czekasz odpowiedni czas i wyłączasz. Program musi skończyć zabawę z jedym zaświeceniem, zanim zajmie się następnym. Rozwiązanie polega na rezygnacji z funkcji delay() (a przynajmniej z długiego czekania) i użyciu szybkiej funkcji loop() i sprawdzaniu czasu za pomocą funkcji millis(). Musisz też przemyśleć jak to dokładnie ma pracować gdy ktoś poruszy potencjometrem w trakcie świecenia.

PS. A w jakim celu czytasz stan potencjometru kolejno dwa razy?