2019-02-17
Egy olvasóm felhívott, és egy korábbi AVR-rel készített menetszámlálóm után érdeklődött. Sok mindenről beszéltünk, végül mondtam, hogy összerakok egy egyszerűbbet, kis kínai kütyükből. Kell hozzá egy Arduino Nano, egy LED & KEY modul, meg egy mikrokapcsoló. Ja, meg vezetékek, meg egy 5V-os táp. Ez most elmaradt, USB-ről kapja a kapcsolás az 5V-ot. A mikrokapcsolóhoz hozzá kell gondolni egy kis mechanikát, egy rugólapot, egy bütykös tengelyt, ami minden fordulat során működteti a kapcsolót. Ez az egész ami a képen látható, nem került 10 USD-be.
A számláló tud le/fel számolni, a Reset-elésen kívül
beállítható/módosítható a számláló állása. A gombok funkciója balról jobbra:
FEL - LE - RESET - - 1000 - 100 - 10 -1
A szám kapcsolókkal a fel/le
állapot szerint a számláló értéke állítható. Az alábbi program érdekessége,
hogy oda kellett figyelni mind a mikrokapcsoló, mind a billentyűzet
pergésmentesítésére. És ugye a program nem ragadhat le egyiknél sem, mert ha
folyamatosan nyomnánk valamelyik gombot, esetleg közben a tekercsünk
továbbcsévélődne, igaz ez nem életszerű. A kijelző panel egy TM1638 chip-re
épül, ami I2C soros vonalon vezérelhető, illetve olvasható. A neten találhatók
ezt kezelő library-k, én írtam hozzá egy sajátot.
/******************************************************************************
* Author - Kiraly Tibor
* http://www.tkiraaly.hu
* Date - 2019.02.17.
* Chip - Ardiono, LED & KEY Board (TM1638)
* Compiler - Arduino IDE
*
* Szamlalo (le/fel/0-9999) tekercselogephez
*
*******************************************************************************
*
* +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
* ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
* ! 7 ! ! 6 ! ! 5 ! ! 4 ! ! 3 ! ! 2 ! ! 1 ! ! 0 !
* ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
* +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
*
* +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
* ! O ! ! O ! ! O ! ! O ! ! O ! ! O ! ! O ! ! O !
* +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
* Fel Le Reset 1000 100 10 1
*
*******************************************************************************/
#include <kt_lkb.h>
int i; // munka valtozo
int n= -100; // szamlalo
int d= 0; // novekmeny
unsigned char irany= 1; // irany (1-fel, 2-le)
unsigned char kapcsolo_allapot= 8; // kapcsolo elozo allapot
unsigned char key;
kt_lkb k( 5, 6, 7); // data_io, clock, strobe
void setup()
{
pinMode( 2, INPUT_PULLUP); // erintkezok felhuzasa
pinMode( 3, INPUT_PULLUP);
}
void loop()
{
if ( ( digitalRead( 2) == 0) && ( kapcsolo_allapot == 0)) // kapcsolo be
{
kapcsolo_allapot= 1;
if( irany == 1) n+= 1;
else n-= 1;
}
if ( digitalRead( 3) == 0) kapcsolo_allapot= 0; // kapcsolo ki
i= k.inkey(); // bill. kezeles
if( i < 8 ) key= i; // bill. eltarolasa
else // bill. felengedve, kiertekeles (hogy ne peregjen)
{
if ( key == 7) irany= 1; // fel
if ( key == 6) irany= 2; // le
if ( key == 5) n= 0; // reset
if ( key == 3) d= 1000;
if ( key == 2) d= 100;
if ( key == 1) d= 10;
if ( key == 0) d= 1;
if( irany == 1) n+= d;
else n-= d;
d= 0;
key= 8;
}
if ( n < 0) n= 0; // limit
if ( n > 9999) n= 9999;
i= n; // szamlalo kiiras
k.write( i% 10, 0); // 1
i= i/ 10;
k.write( i% 10, 1); // 10
i= i/ 10;
k.write( i% 10, 2); // 100
i= i/ 10;
k.write( i% 10, 3); // 1000
if( irany == 1) // irany kiiras
{
k.write( 'F', 7);
k.write( 'E');
k.write( 'L');
}
else
{
k.write( 'L', 7);
k.write( 'E');
k.write( ' ');
}
k.show();
}
Ennyi az egész, itt a vége, fuss el véle.