Arduino Polska Forum

Pełna wersja: Czas zapalania led wyświetlany na LCD i regulowany potencjometrem
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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);
}
(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?