• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czas zapalania led wyświetlany na LCD i regulowany potencjometrem
#1
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);
}
 
Odpowiedź
#2
(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?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości