Nyt
uskoin tuolle joutilaalle Arduino MICROlle löytäväni käyttöä
tässä hiukan laajemmassa näppäinprojektissa. Minulla oli
tavoitteena liittää yhteen Arduino, 16 painikkeen näppäimistö ja
LCD-näyttö. Tavoitteena oli tehdä kiinteämpi kytkentä ja
toteutus, ajatuksena käyttää sitä myöhemmin ja monipuolisemmin.
Ensimmäinen
testikytkentähässäkkä oheisessa kuvassa.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBaPw0PkEe3h7sd5gMTqbt0xAqApGiTeLmJKjLYAN31DO9dy49GPk1FTUR-Yq5VMv9re7WqgH3Ji6pCVVOzhHqgqOiN4wihXt_aGsIGGc-iMjNyZ6S5EeY0Rw2f2nY4EsdJO1QySN5-Ixh/s200/Kuva_1mp.jpg)
Testeissä nousi esiin, että 5V
regulaattori kävi varsin kuumana, joten tuo arvio Micron
rikkoutumisesta lienee oikeaan osunut. LCD-näyttö imi noin 160mA
virran 5 voltin jännitteestä. Toisessa kuvassa valmis toteutus
näkyy vinosti takaa. Jouduin nimittäin lisäämään laitteen
takaosaan alumiinilevyn juuri tuon 5V:n regulaattorin jäähdytystä
varten.
Regulaattoripiirit
(7809 9V ja 7805 5V) sekä niihin liittyvät
suodatinelektrolyyttikondensaattorit ovat alimmalla Vero-levyllä.
Samoin rinnan-/sarjapiirit (74HCT165), kuten myös liittimet ulkoisia
kytkentöjä varten. Tämän levyn päälle liittyy liittimien
välityksellä Arduino LEONARDO ja ylimpänä toinen koelevy, missä
on 16 kpl painikkeita sekä kaksi 8 x 10kohm:in vastushybridipiiriä
digitaalitulojen kuormitusta varten
![]() |
Arduino on alaspäin olevilla piikeillä pohjalevyn liittimissä |
Päällekkäisrakenne
ilmenee oheisesta kuvasta. Noita pieniä liittimiä olen saanut
tuhoamistani Arduinoista. Aina tulee sähellettyä! Onneksi kamaa voi
kierrättää.
Seuraavana kaksi
urospiikkiä, jotka on liitetty Arduinon sarjaliikennepinneihin (D0
RX ja D1 TX). Tässä olen samalla tehnyt ristikytkennän, joten
liitettäessä tämä laite toiseen
Arduinoon, voi käyttää suoraa
parijohdinta.
Sitten
on kolme naaraspinniä, jotka on liitetty vapaana oleviin digitali
I/O:n (D11, D12 ja D13). Viimeisenä neljä (4) naaraspinniä
analogiatuloihin (A0 .. A3). Vain neljä on liitetty, koska sopivaa
kuuden (6) pinnin liitintä ei ollut. Noilla neljälläkin pärjää
aika pitkälle.
Lopputulos
näyttää seuraavalta: ihan oikealta ITEprototyypiltä.
Näytön
yläriville Arduino on ilmaissut asenteensa tätä minun
blogiprojektiani kohtaan ja alarivilla vasemmalla painikkeen numero
(1 .. 16) ja oikealla vastaava bittijono (bitin paikka).
YouTube-videolla (antinarduvideo37.youtube.com)
on
pieni esittely näppäimistöstä. Siinä numerot vaihtuvat välillä1
.. 16, eli painikkeen numero näkyy vasemmalla ja vastaavasti paikka
bittijonossa oikealla.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyqcoXGmbYFRDn-V9mb2SzbO5_P2Dlx0cIapJ5NLshUWx3FvaFmIWU6YY5PLcvrrWUfpBEyqOiAyYtZweEiFx7wW8EIFYy6ypt39tr5dOqGIrdDduOqh0bo_yugvXXFuanEnAN5SVkGm9_/s200/N%25C3%25A4pp%25C3%25A4imist%25C3%25B6_v1.jpg)
Painikeryhmän
kaavio ohessa. Siihen on merkitty kunkin painikkeen numeerinen arvo
(0 .. 15). Tässä toteutuksessa ne ovat ainoastaan painikkeita,
jotka voidaan erottaa toisistaan. Myöhemmin ne saavat varsinaisia
toimintoja. Seuraavassa koko hässähän kytkentä:
Ja
lopuksi tämän kertaisen sovelluksen ohjelma. Tästä ohjelmasta
olen jättänyt pois kaiken sellaisen, mikä ei liity juuri tähän
toteutukseen.
OHJELMA
37
/***************************************
*
Ohjelma 37
*
09.02.2017
*
Bitit ja painikkeen numero
**************************************/
//
MÄÄRITTELYT:
//
LCD-näyttö
#include
<LiquidCrystal.h>
LiquidCrystal
lcd(3, 2, 7,6,5,4);
boolean
Arr_DATA[16];
int
Int_Numero = 0;
//
ALIOHJELMAT
//
LCD aliohjelman määrittelyt
void
Fun_LCD(int start, int rivi, int paikka, int data){
//
Näytön valintasekvenssi
int
Seq_LCD = start;
switch
(Seq_LCD){
case
2:
lcd.setCursor(paikka, rivi);
lcd.print("LAITAN TAAS
HANTTIIN");
Seq_LCD = 0;
break;
case
11:
lcd.setCursor(paikka, rivi);
lcd.print(data);
Seq_LCD = 0;
break;
}//
Valintasekvenssin loppu
}// Funktion LCD loppu
//
Funktio Parallel IN serial OUT (Rinnan sisään, sarjassa ulos)
//
SarjaIN_Ali_v1.No4Tam17
void
Fun_LueRsSu(int PL, int CP, int Data){
pinMode(PL,
OUTPUT); // pinnin numero kutsussa
pinMode (CP, OUTPUT); // pinnin numero kutsussa
pinMode (Data, INPUT);// pinnin numero
kutsussa
//
Rinnakkaisdatan siirto
digitalWrite(PL, LOW);
digitalWrite (PL, HIGH);
for(int
i = 0; i < 16; i ++){Arr_DATA[i] = 0;}// tyjennys
for(int
j = 0; j < 16; j++){ // luku
Arr_DATA[j] = digitalRead(Data);
digitalWrite(CP, HIGH);
digitalWrite(CP, LOW);
}//
sarjaluennan loppu
}//
Funtion loppu
//
ASETUKSET:
void
setup(){
Serial.begin(9600);
lcd.begin(20,2);
lcd.clear();
//
Tekstit näyttöön, suoritetaan kerran
Fun_LCD(2,0,0,0);
}//
Asetuksen loppu
//
PÄÄLOOPPI
void
loop(){
Fun_LueRsSu(8, 9, 10);
for(int
No = 0; No < 16; No++){ // Numeron näyttö
if(Arr_DATA[15-No] == 1){
Int_Numero = No + 1;
if(Int_Numero < 10){ // Numerot 0
.. 9
Fun_LCD(11,1,1,Int_Numero);
lcd.setCursor(0,1);
lcd.print(" "); //
Tyjennetään kymppien paikka
}else{
Fun_LCD(11,1,0,Int_Numero);
}
// else if loppu
}//
if loppu
}//
for loppu
for(int
No = 0; No < 16; No++){ // bittien näyttö
lcd.setCursor(No + 4, 1);
lcd.print(Arr_DATA[No]);
}//
for loppu
delay(1);
}
// Pääohjelma LOPPU
Ei kommentteja:
Lähetä kommentti