• 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
Timer kuchenny ze starego tunera sat
#1
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 .

[Obrazek: led1.jpg]
[Obrazek: led2.jpg]

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 Wink
 
Odpowiedź
#2
Świetna robota! Smile Dzięki takim sposobom można ożywić stare i niepotrzebne sprzęty i sprawić, że jednak można jeszcze coś z nich wycisnąć. Wink
[Obrazek: Sygnatura1-w60.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości