Arduino Polska Forum

Pełna wersja: Kilka zadań naraz
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam, mam taki sketch http://wklej.org/id/1786470/ i chciałbym aby czas odświeżał się co sekunde a jasność co 1/4 sekundy jak to zrobić? Pomocy!
Napisałem ci nowy programik na podstawie przerwania bez funkcji delay , niestety dokładność zegarka jest taka sobie na 5 minut ucieka około 4 sekundy możesz to sobie wyregulować zmienną "interval" która odświeża nam całość co 250 milisekund . Zmień tylko biblioteki i ustawienia wyświetlacza bo ja korzystam z wyświetlaczy sterowanych 2 pinami na scalaku 74hc164 i zwykłych nie mam a rozlutowywać mi się nie chciało .

P.s. w przyszłych projektach omijaj z dala lcd.cear(); w pętli głównej bo wyświetlacz zaczyna migotać i nic na nim nie widać , staraj się tak robić aby dane się nadpisywały wtedy masz ładny czytelny obraz


Kod:
#include <ShiftRegLCD123.h>
ShiftRegLCD123 srlcd(10, 11, SRLCD123);

int czas=0,godz,minu,sek,minu2;

float swiatlo;

unsigned long previousMillis = 0;
const long interval = 250;
int x=0 ;

void setup(){
 
srlcd.begin(16,2);

}
void loop(){
 
 unsigned long currentMillis = millis();
 
 if(currentMillis - previousMillis >= interval){
   
    previousMillis = currentMillis;
   
   srlcd.setCursor(8,1);
   srlcd.print(swiatlo);
   srlcd.print("lx ");
   x++;
   
   if ( x > 3 ){x = 0; czas++;sek++;}  
  }
   
 int sensorValue = analogRead(A0);

 swiatlo = sensorValue * (100.0 / 1023.0);

 if(czas==60) minu++, minu2++,czas=0;
 if(minu==60) godz++, minu2=0;

 srlcd.setCursor(0,0);

 srlcd.print("Godzina:");
 if ( godz < 10 ){srlcd.print("0");srlcd.print(godz);}
 else {srlcd.print(godz);}
 srlcd.print(":");
 if ( minu2 < 10 ){srlcd.print("0");srlcd.print(minu2);}
 else {srlcd.print(minu2);}
 srlcd.print(":");
 if ( czas < 10 ){srlcd.print("0");srlcd.print(czas);}
 else {srlcd.print(czas);}
 srlcd.setCursor(0,1);
 srlcd.print("Jasnosc:");
 
}

A niech będzie tutaj pod zwykły wyświetlacz LCD 16x2

Kod:
#include <LiquidCrystal.h>

LiquidCrystal lcd(13,11,6,5,4,3);

int czas=0,godz,minu,sek,minu2;

float swiatlo;

unsigned long previousMillis = 0;
const long interval = 250;
int x=0 ;

void setup(){
 
lcd.begin(16,2);

}
void loop(){
 
 unsigned long currentMillis = millis();
 
 if(currentMillis - previousMillis >= interval){
   
    previousMillis = currentMillis;
   
   lcd.setCursor(8,1);
   lcd.print(swiatlo);
   lcd.print("lx ");
   x++;
   
   if ( x > 3 ){x = 0; czas++;sek++;}  
  }
   
 int sensorValue = analogRead(A0);

 swiatlo = sensorValue * (100.0 / 1023.0);

 if(czas==60) minu++, minu2++,czas=0;
 if(minu==60) godz++, minu2=0;

 lcd.setCursor(0,0);

 lcd.print("Godzina:");
 if ( godz < 10 ){lcd.print("0");lcd.print(godz);}
 else {lcd.print(godz);}
 lcd.print(":");
 if ( minu2 < 10 ){lcd.print("0");lcd.print(minu2);}
 else {lcd.print(minu2);}
 lcd.print(":");
 if ( czas < 10 ){lcd.print("0");lcd.print(czas);}
 else {lcd.print(czas);}
 lcd.setCursor(0,1);
 lcd.print("Jasnosc:");
 
}