Tällä ohjelmalla tulostetaan ASCII-merkkejä LCD-näytölle.
Taistelin epävarmana kehittäessäni yhtä sovellusta siitä, miten saisin ääkkösten isot kirjaimet (Ä ja Ö) tulostettua tuon pienelle kaksiriviselle LCD_näytölle. En netistä enkä muistakaan lähteistä löytänyt apua ongelmaani. Tuon puutteen ajamana syntyi tämä pieni ohjelma, jonka ajattelin ladata tänne sivullenikin. Toivottavasti joku hyötyisikin siitä.
Ohjelmassa syötetään binäärimuodossa (byte) muuttuja väliltä B00000000 .. B11111111 ja tulostetaan LCD-näytön alariville. (Itse asiassa suurin luku menee hiukan tuon ylikin, sillä muuttujan kasvu ei pysähdy suurimpaan ASCII-numeroon, eli lukuun 255. Se on sentään mitätön haitta.)
Painamalla painiketta muuttuja kasvaa aina kahdellakymmenellä ja jatkuu täten aina lukuun 260 saakka, minkä jälkeen se aloittaa uudelleen nollasta. Välillä riville ei tulostu mitään. Hyvin suuri osa merkeistä on kiinalaisia. Sieltä löytyvät kyllä kaikki standardin mukaiset ASCII-merkit ja myöskin pieni ä ja pieni ö, jotka pitää nyt sitten hyväksyä isojen kirjaimien tilalle.
Sovelluksessa on hyödynnetty Rich UNO R3 kehityspohjaa, joten esimerkiksi painikevärähtelyä ei tarvitse itse ohjelmassa huomioida ja valvoa.
/***************************************
* Ohjelman nimi: LCD_AskiiB
* 19.12.2023
* ASCII-bittien muunnos
* LCD-näytölle
**************************************/
#include <Arduino.h>
// MÄÄRITTELYT:
// LCD-näyttö
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 13,12,11,10);
byte alku = B00000000;
// Liityntöjen määrittelyt
const int Con_TCH1 = 3; // Kosketuspainike 1
boolean Bol_TCH1 = false;
int Seq_TCH1 = 0;
boolean Kep_TCH1 = false; // Ohjausbitti
int kerta = 0;
int No = 1;
// ALIOHJELMAT
// Merkkien päivitys LCD-näytölle
void Fun_Jakso(int kohta, int rivi, int lukema){
lcd.setCursor(kohta, rivi);
lcd.print(lukema);
}// Numerotulostuksen loppu
void Fun_Merkki(int kohta, int rivi, char merkki){
lcd.setCursor(kohta, rivi);
lcd.print(merkki);
}// Teksti_ali loppu
void Fun_Lause(int kohta, int rivi, String teksti){
lcd.setCursor(kohta, rivi);
lcd.print(teksti);}
// ASETUKSET:
void setup(){
Serial.begin(9600);
lcd.begin(20,2);
lcd.clear();
pinMode(Con_TCH1, INPUT); // Kosketuspainike
}// Asetuksen loppu
// PÄÄLOOPPI
void loop(){
// Painikkeen luku
Bol_TCH1 = digitalRead(Con_TCH1);
if(Bol_TCH1 == true && Kep_TCH1 == false && Seq_TCH1 == 0){
Kep_TCH1 = true;
Seq_TCH1 = 1;
}// Painike 1
// Painikesekvenssi
switch (Seq_TCH1) {
case 1:
if(Kep_TCH1 == true && Kep_TCH1 == true){
Fun_Lause(0,0,"ASCII jakso:");
Fun_Jakso(12,0,kerta);
Fun_Merkki(15,0,'-');
Fun_Jakso(17,0,kerta+19);
for(int i=0;i<20;i++){
Fun_Merkki(i,1,alku+i+kerta);}
Kep_TCH1 = false;}
if(Bol_TCH1 == false){
Seq_TCH1 = 2;}
break;
case 2:
No++;
Seq_TCH1 = 3;
break;
case 3:
kerta = kerta + 20;
if(kerta > 260){
kerta = 0; lcd.clear();};
if(Bol_TCH1 == false){Seq_TCH1 = 1;}
Seq_TCH1 = 0;
break;
}// Painikesekvenssin loppu
delay(1);
} // Pääohjelma LOPPU
Ei kommentteja:
Lähetä kommentti