Eli minulla olisi yhdessä taulukossa tekstiä heksa, binääri tai desimaali muodossa, ja haluaisin tulostaa tämän tekstin. Eli millä tavalla se tulostus onnistuu niin että näytölle saataisiin teksti kirjaimin.
Kyseessä on siis AVR ohjelmointi ja taulukko saa tekstintä sarjaväylästä ja tulostus tapahtuisi LCD näytölle. Laitteita ei minulla tässä nyt ole joten eri variaatioita en pääse nyt "yrittämään" vaan ajattelin kysäistä eka.
terv. Dukex
Mitä heksamuoto tarkoittaa tässä tapauksessa? Jos näytölle pitää tulostaa vaikka kirjain A, niin mitä lukuja tai merkkejä ohjelma saa tietoonsa?
ohjelma lukee sarjaportista tulevat tiedot taulukkomuuttujaan, ja jos taulukon tulostaa sellaisenaan niin näytöllä kirjaimet näkyvät desimaalimuotona. Otsikko sinänsä oli vähä huono tähän.
Millä koodilla tulostat taulukon nykyään ja mitä näytölle tulee ja mitä näytölle kuuluisi tulla?
LCD näytölle tulostukseen käytän opettajan tekemää kirjastoa. Ja tulostus tapahtuu komennolla:
WriteInt(1,1,10,0,muuttuja[i]); // neljä lukua ennen muuttujaa määrää sijainnin ja varatun koon näytöllä
Näytölle tulostuu tieto desimaalilukuna eli 0-255. Mutta tieto kuuluisi tulostua tekstinä.
Mietin että ehkä pelkkä yläpilkkujen lisäys ei toimi. eli
'muuttuja[i]'
En ole siis paljoa C koodia kirjoitellut eli ratkaisu voi olla hyvinki yksinkertainen. Mutta ehkä jotain % merkkejä tjs pitäisi lisäillä enne tai jälkeen muuttujan. Tai sitte pitäisi olla jokin oma kirjasto.
Tuo WriteInt
kuulostaa siltä, että se on lukujen tulostusta varten. Onko kirjastossa muita tulostukseen käytettäviä komentoja (WriteChar
tms)?
Jos tekstiä haluaa tulostaa niin käytetään Write(1,1,"Teksti").
Voisiko tähän löytyä vastaus tuosta Write -kirjastosta?
Funktiolla Write homman pitäisi onnistua, kunhan luot ensin merkkijonon, johon lisäät merkiksi muutetun luvun. Merkkijono on char-tyyppinen taulukko, jonka viimeisenä alkiona on luku 0.
Eli jos haluat tulostaa vaikka merkit A, B ja C, kirjoita näin:
char teksti[10]; // tilaa korkeintaan 9 merkille teksti[0] = 65; // A:n ASCII-koodi on 65 teksti[1] = 66; teksti[2] = 67; teksti[3] = 0; // merkki 0 päättää merkkijonon
Jos taas sinulla on merkki jossain int-muuttujassa, voit menetellä näin:
teksti[0] = (char)luku; // teksti[0] = (char)muuttuja[i]; teksti[1] = 0;
Sitten kun merkkijono on valmis, se pitää enää tulostaa:
Write(1, 1, teksti);
Minkä tyyppinen valmiina oleva taulukko muuten on? Jos se on char-tyyppinen, se on melkein valmis merkkijono, lisää vain viimeiseksi alkioksi nolla. Jos se on int-tyyppinen, kopioi kaikki alkiot char-taulukkoon ja lisää loppuun nolla.
No tällähetkellä taulukko on int muotoinen, mutta eipä se hankalaa oo vaihtaa. Yritän koittaa tuota vielä tänään ja kerron miten kävi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.