Pomagając ostatnio koledze z forum uruchomić program na attiny4413 przypomniało mi się że gdzieś leży stary wyświetlacz led z tunera cyfrowego polsatu . Z ciekawości zacząłem się nim bawić , niestety ilość miejsca na procku wystarcza na bardzo niewiele , sama obsługa wyświetlcza zjadła ponad 80% miejsca ale na prosty programik sekundnika wystarczyło. Po 2 godzinkach kod był gotowy i dopracowany . Timerek ustawiamy 3 przyciskami + start - po . Naciśnięcie naraz + i - zatrzymuje odliczanie , po odliczeniu do 0 włącza się sygnał buzzera na około 4 sekundy . Niestety musiałem rozlutować wyświetlacz i przełożyć wyżej bo nie zmieściłbym klawiatury . Poniżej zdjęcia przed i po modyfikacji .
Kod:
// Timer kuchenny z modułu dekodera polsatu
//
// By JasQ wwwArduinopolska.com
//
// Attiny 2313 + 4x7 LED
int t1 = 12;
int t2 = 11;
int t3 = 10;
int t4 = 9;
int A = 0;
int B = 1;
int C = 4;
int D = 5;
int E = 6;
int F = 7;
int G = 8;
int x = 600 ;
long pm ;
byte y = 0 ;
byte z = 0 ;
void setup() {
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(t1, OUTPUT);
pinMode(t2, OUTPUT);
pinMode(t3, OUTPUT);
pinMode(t4, OUTPUT);
pinMode(13, OUTPUT);
pinMode(16,INPUT_PULLUP);
pinMode(14,INPUT_PULLUP);
pinMode(15,INPUT_PULLUP);
while (digitalRead(16) != LOW ){
long cm = millis();
if ( cm - pm >= 50 ){
if (digitalRead(14) == LOW and z <= 60 ){x = x + 1;z = z + 1;}
if (digitalRead(14) == LOW and z >= 60 )x = x + 10;
if ( x > 9999 )x = 9999;
if (digitalRead(15) == LOW and z <= 60){x = x - 1;z = z + 1;}
if (digitalRead(15) == LOW and z >= 60)x = x - 10;
if ( x < 0 )x = 0;
if (digitalRead(15) != LOW && digitalRead(14) != LOW)z = 0 ;
if (digitalRead(16) == LOW ){y = 0;break;}
pm = cm;}
displayNumber(x);
}
}
void loop() {
long cm = millis();
if ( cm - pm >= 1000 ){pm = cm;x = x-1;}
if ( x <= 0 ){ x = 0; y++;digitalWrite(13,HIGH);}
if ( y >= 250 ){y = 0;digitalWrite(13,LOW);setup();}
if (digitalRead(14) == LOW and digitalRead(15) == LOW )setup();
displayNumber(x);
}
void displayNumber(int toDisplay) {
#define DISPLAY_BRIGHTNESS 5000
#define D_ON HIGH
#define D_OFF LOW
long beginTime = millis();
for(int digit = 4 ; digit > 0 ; digit--) {
switch(digit) {
case 1:
digitalWrite(t1, D_ON);
break;
case 2:
digitalWrite(t2, D_ON);
break;
case 3:
digitalWrite(t3, D_ON);
break;
case 4:
digitalWrite(t4, D_ON);
break;
}
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
lightNumber(10);
digitalWrite(t1, D_OFF);
digitalWrite(t2, D_OFF);
digitalWrite(t3, D_OFF);
digitalWrite(t4, D_OFF);
}
while( (millis() - beginTime) < 10) ;
}
void lightNumber(int numberToDisplay) {
#define S_ON LOW
#define S_OFF HIGH
switch (numberToDisplay){
case 0:
digitalWrite(A, S_ON);
digitalWrite(B, S_ON);
digitalWrite(C, S_ON);
digitalWrite(D, S_ON);
digitalWrite(E, S_ON);
digitalWrite(F, S_ON);
digitalWrite(G, S_OFF);
break;
case 1:
digitalWrite(A, S_OFF);
digitalWrite(B, S_ON);
digitalWrite(C, S_ON);
digitalWrite(D, S_OFF);
digitalWrite(E, S_OFF);
digitalWrite(F, S_OFF);
digitalWrite(G, S_OFF);
break;
case 2:
digitalWrite(A, S_ON);
digitalWrite(B, S_ON);
digitalWrite(C, S_OFF);
digitalWrite(D, S_ON);
digitalWrite(E, S_ON);
digitalWrite(F, S_OFF);
digitalWrite(G, S_ON);
break;
case 3:
digitalWrite(A, S_ON);
digitalWrite(B, S_ON);
digitalWrite(C, S_ON);
digitalWrite(D, S_ON);
digitalWrite(E, S_OFF);
digitalWrite(F, S_OFF);
digitalWrite(G, S_ON);
break;
case 4:
digitalWrite(A, S_OFF);
digitalWrite(B, S_ON);
digitalWrite(C, S_ON);
digitalWrite(D, S_OFF);
digitalWrite(E, S_OFF);
digitalWrite(F, S_ON);
digitalWrite(G, S_ON);
break;
case 5:
digitalWrite(A, S_ON);
digitalWrite(B, S_OFF);
digitalWrite(C, S_ON);
digitalWrite(D, S_ON);
digitalWrite(E, S_OFF);
digitalWrite(F, S_ON);
digitalWrite(G, S_ON);
break;
case 6:
digitalWrite(A, S_ON);
digitalWrite(B, S_OFF);
digitalWrite(C, S_ON);
digitalWrite(D, S_ON);
digitalWrite(E, S_ON);
digitalWrite(F, S_ON);
digitalWrite(G, S_ON);
break;
case 7:
digitalWrite(A, S_ON);
digitalWrite(B, S_ON);
digitalWrite(C, S_ON);
digitalWrite(D, S_OFF);
digitalWrite(E, S_OFF);
digitalWrite(F, S_OFF);
digitalWrite(G, S_OFF);
break;
case 8:
digitalWrite(A, S_ON);
digitalWrite(B, S_ON);
digitalWrite(C, S_ON);
digitalWrite(D, S_ON);
digitalWrite(E, S_ON);
digitalWrite(F, S_ON);
digitalWrite(G, S_ON);
break;
case 9:
digitalWrite(A, S_ON);
digitalWrite(B, S_ON);
digitalWrite(C, S_ON);
digitalWrite(D, S_ON);
digitalWrite(E, S_OFF);
digitalWrite(F, S_ON);
digitalWrite(G, S_ON);
break;
case 10:
digitalWrite(A, S_OFF);
digitalWrite(B, S_OFF);
digitalWrite(C, S_OFF);
digitalWrite(D, S_OFF);
digitalWrite(E, S_OFF);
digitalWrite(F, S_OFF);
digitalWrite(G, S_OFF);
break;
}
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji