crsandu icon

Arduino Ceas Animatie

crsandu | PRO | 10/18/19 02:22:04 PM UTC | 0 ⭐ | 340 👁️ | Never ⏰ | []
C |

2.89 KB

|

None

|

0 👍

/

0 👎

 
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
volatile int state = 0;
volatile int increm = 0;
 
byte show[8]={
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
};
byte ceasH[8][8] = {
  {
    B00000,
    B00000,
    B00100,
    B00100,
    B00000,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00010,
    B00100,
    B00000,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B00110,
    B00000,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B00100,
    B00010,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B00100,
    B00100,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B00100,
    B01000,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B01100,
    B00000,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B01000,
    B00100,
    B00000,
    B00000,
    B00000,
  },
};
 
byte ceasM[8][8] = {
  {
    B00000,
    B00100,
    B00100,
    B00100,
    B00000,
    B00000,
    B00000,
  },
    {
    B00000,
    B00001,
    B00010,
    B00100,
    B00000,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B00111,
    B00000,
    B00000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B00100,
    B00010,
    B00001,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B00100,
    B00100,
    B00100,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B00100,
    B01000,
    B10000,
    B00000,
  },
    {
    B00000,
    B00000,
    B00000,
    B11100,
    B00000,
    B00000,
    B00000,
  },
    {
    B00000,
    B10000,
    B01000,
    B00100,
    B00000,
    B00000,
    B00000,
  },
}; 
 
ISR(INT0_vect)
{ 
  //reset
  state = 0;
}
//Rutina pentru tratarea intreruperii atasata la INT0
ISR(INT1_vect)
{
  increm = increm == 1? 0: 1;
} 
 
void setup() { 
  lcd.begin(16, 2);
  
 
}
// FuncŃia loop ramane nefolosita, puteti să o folositi pentru a extinde funcționalitatea
void loop()
{
  state += increm;
  state = state == 64? 0:state;
  for(int i=0; i<7; i++){
    show[i] = (byte)ceasM[state%8][i] | (byte)ceasH[state/8][i];
  }
  
  pinMode(21 ,INPUT); 
  pinMode(20, INPUT); 
 
  EIMSK |= (1 << INT0); //activam punctual intreruperea INT0
  EIMSK |= (1 << INT1); //activam punctual intreruperea INT1
  
  EICRA |= (1 << ISC01); //activam intreruperea 0 pentru front descrescător.
  EICRA |= (1 << ISC11); //ca si mai sus, pentru intreruperea 1
  sei(); //activam intreruperile la nivel global
 
 
  lcd.createChar(1, show); 
  lcd.setCursor(1, 1); 
  lcd.write(1); // cand referiti caractere diferite de „0” nu mai este necesar cast-ul;
  delay(1000);
}

Comments