const unsigned char ssdlut[] = {0b00111111, 0b00000110,
0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101,
0b00000111, 0b01111111, 0b01101111};
volatile unsigned int cnt = 0;
const int pinINT0 = 20;
long long int wait = 0;
void setup() {
// put your setup code here, to run once:
pinMode(pinINT0, INPUT);
digitalWrite(pinINT0, HIGH);
DDRA = 0b11111111;
attachInterrupt(digitalPinToInterrupt(pinINT0), functie, RISING);
}
void loop() {
// put your main code here, to run repeatedly:
int u = cnt % 10;
int z = cnt / 10;
unsigned char a = ~ssdlut[u];
PORTA = a;
delay(100);
unsigned char b = ~((ssdlut[z]) | (0b10000000));
PORTA = b;
delay(100);
}
void functie() {
if(micros() > wait) {
int aux = (cnt + 1) % 100;
cnt = aux;
wait = micros() + 500000;
}
}
// const unsigned char ssdlut[] = {0b00111111, 0b00000110,
// 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101,
// 0b00000111, 0b01111111, 0b01101111
// };
// // dimensiunea LUT-ului
// const int lutsize = 10;
// int cpos = 0; // poziția curentă
// int cdigit = 0; // prima cifră din cele două
// unsigned char outvalue = 0;
// void setup() {
// // activare PORTA ca ieșire
// DDRA = 0b11111111;
// }
// void loop() {
// outvalue = cdigit > 0 ? 0x80 : 0;
// // care catod îl aprindem ? (00000000 sau 10000000)
// // catodul este legat la bitul 7 din portul A, prin
// //această operaţie punem
// // bitul 7 pe 1 sau pe 0, alternativ, urmând ca ceilalți
// //biți să fie atașați
// // prin OR logic, în linia de cod următoare
// PORTA = ~(ssdlut[cpos] | outvalue); // facem OR între
// cpos++; // incrementăm poziția curentă
// if (cpos >= lutsize) { // dacă am ajuns la capăt
// cpos = 0; // revenim la zero
// cdigit ^= 1; // dacă cifra anterioară a fost 0, acum e
// //1, dacă a fost 1, acum e zero (^ = XOR)
// }
// // așteptare 0.5 sec
// delay(500);
// }