LCD - näytöt

Hei! tällaista kysymystä tuli mieleen:
tarviiko tätä jos haluaa arduinolla ohjata lcd-näyttöä?:
http://paeae.com/serial-lcd-backpack.html

ja sisältääkö nämä lcd-näytöt sen HD44780 -piirin?
http://paeae.com/components/lcd/lcd-128x64gfx.html

Niksa:
Hei! tällaista kysymystä tuli mieleen:
tarviiko tätä jos haluaa arduinolla ohjata lcd-näyttöä?:
http://paeae.com/serial-lcd-backpack.html[/quote}

Ei välttämättä, mutta pinnejä menee paljon vähemmän jos käytät tuollaista serial boardia.

ja sisältääkö nämä lcd-näytöt sen HD44780 -piirin?
http://paeae.com/components/lcd/lcd-128x64gfx.html

Tuossa ei ole HD44780 vaan KS0108B piiri. Graafiset näytöt on suht monimutkaisia käyttää verrattuna tavallisiin HD44780 merkkinäyttöihin mutta on niihin kirjastoja kirjoitettu kuitenkin.

itse hommasin robomaalta tuon i2c näytön tosin "vain 16x2" mutta toimii ilman turhia hdpiirien pähkäilyjä ja syö vain 2 pinniä ja v in ja ground.
helppo ei tarvita mitään turhia lisähärpäkkeitä näytön ohjailuun ja juotella mitään turhuuksia.
eikä mene kaikki pinnit jonkin näytön käyttöön vaan niihin sensoreihin ja muihin tarpeellisiin.
kirjastoon lisää vain wire.h tiedoston ja liguiddisplay.h niin toimii.en varma mikä tuon liguidlcdcristall kirjaston nimi nyt oli kun ei ole koodia tässä lähistöllä.robomaan sivulla kumminkin linkit näytön alla examplesiin ja data sivuille.löytyy zip pakettina nuo näytön kirjasto ja wire on arduinolla itessään.siis ohjelman kirjastoissa.
addres piti muuttaa esimerkkeihin kun joissakin 0x27 ja näyttö käytti 0x21 osoitetta. etin kauan mistä johtuu ettei toimi ennekuin hoksasin tuon näytön osoitteen olevan väärä :smiley:

joo,komiasti tuli näyttöä kehuttua,no toimiihan se esimerkki ohjelmilla mitä netistä hain "hello worrld" yms,
nyt ongelma,en saa toimimaan mitenkään ohjelman pätkällä esimerkiksi
hall anturin tieto ->lcd. serial print toimii ja serial monitoriin tekstit tulee,miten hemmetissä nuo saa siirrettyä näytölle ????
perus ohjelmana nyt kokeilussa,lue hall näytä tulos, lähinnä pyörivän magneetin luku kpl määr/kierros nyt ekaksi,
lisäsisn leikkaa/liimaa tyyliin toimivaan koodiin tuon wire.h liguidcrystal_i2c.h ja serial begin 9600 sekä lcd addres 0x21,16,2, mutta ei näytä serial print tietoa lcd:ssä ????
siis serial print toimii pc:llä mutta miten hemmetissä saman saa näyttöön ?????
esimerkkejä on kaiveltu tuntikausia netistä ja yritetty pähkäillä miten tuon saisi toimimaan,
koodiin kirjoiteltu nuo vaadittavat (ehkä kaikki mitä tarvii)että näyttö toimii,

esim1: toimii ilman lcd:tä kyllä
countteri

nt ledPin = 12; // LED connected to digital pin 13
int inPin = 2; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
int cnt =0; // var for counting the presses
int tog =0; //bit used to toggle and keep track of when the button is pressd or not

void setup() // run once, when the sketch starts
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(inPin, INPUT); // declare pushbutton as input
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps

}

void loop() // run over and over again
{
val = digitalRead(inPin); // read input value
if (val == HIGH) { // check if the input is HIGH (button released)
digitalWrite(ledPin, LOW); // turn LED OFF
if (tog ==0){
tog++;}
else{
while ( tog == 1) {
cnt++;
Serial.print(cnt, DEC);
Serial.print("\t");
Serial.print(tog, DEC);
Serial.print("\t");
tog = 2;
}
}
}
else
{
digitalWrite(ledPin, HIGH); // turn LED ON
tog =0;
}
}

esim2:
int ledPin = 13; // choose the pin for the LED
int switchPin =2; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
int counter = 0;
int currentState = 0;
int previousState = 0;
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(switchPin, INPUT); // declare pushbutton as input
Serial.begin(9600);
}
void loop(){
val = digitalRead(switchPin); // read input value
if (val == HIGH) { // check if the input is HIGH (button released)
digitalWrite(ledPin, HIGH); // turn LED on
currentState = 1;
}
else {
digitalWrite(ledPin, LOW); // turn LED off
currentState = 0;
}
if(currentState != previousState){
if(currentState == 1){
counter = counter + 1;
Serial.println(counter);
}
}
previousState = currentState;
delay(250);
}

Mikä näyttö ottaa vain kaksi pinniä? Jokin I2C/SPI näyttö? Anyways, oma LCD-näyttöni on vasta postissa, joten en tiedä vielä. Eräs hello world-koodinpätkä kuitenkin näyttää siltä, että riittää alustaa LCD näyttö ensin initillä, laittaa taustavalo päälle, ja sitten vain kutsuu lcd.print("teksti"). Tässä lcd on rajapintaluokan instanssi. Jos tämä on SPI-näyttö, niin pitäisi tietää ainakin sen näytön osoite varmaksi, onko se varmasti 0x21.

Osoitteet voi kyllä skannata esiin, jos tässä olisi vaikka käynyt niin, että laite vastaisi ihan toisesta osoitteesta, kuin mistä huhuilet sitä?
http://playground.arduino.cc//Main/I2cScanner

Kaiken lisäksi Arduinon kirjaston ymmärtämät osoitteet ovat 7-bittisiä, kun spekseissä kerrotaan yleensä 8-bittiset osoitteet. 7-bittiseen osoitteeseen pääsee jakamalla kahdella, tai shiftaamalla bittejä oikealle (addr = addr>>1).

En minä näe koodissasi mitään sellaista, mikä saattaisi häiritä väylän toimintaa. Tuskin se tuo Serialin alustuskaan on. Kokeile jotain toisia pinnejä napille, viimeinen ajatus.

tuo näyttö vie vain sen 2 pinniä + power+,-,

osoite on oikein 0x27 kun muutin, toimii hyvin dfroboticin esimerkeillä ja muilla kokeilluilla koodin pätkillä,
Ongelmana vain tuo oma laskuri esimerkkini mitä lisään mihinkin että rupeaa näytöösäkin näkymään kun serial monitorissahan nuo laskun tulos näkyy.

kokeilut jos mitäkin kokeilla, lisäännyt aina nuo wire,h ja liguidcrystal i_2c,h
init lcd 0x27,16,2 //osoite,rivit,columnit
serial,begin();
lcd,begin(16,2);

mutta ei vain näytöllä näy mitään :frowning:

En ole vielä nähnyt sinulta koodia, mikä instantioisi tai käyttäisi rajapintaluokkaa, enkä ihan kyllä ymmärtänyt mistä voisi olla kiinni. Arvailen. Instantiointi ja setup kuitenkin jotenkin tähän tyyliin:

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()
{
  lcd.init(); // alustus
  lcd.backlight(); // taustavalo
  Serial.begin(9600);
}

Serial.println(counter) ei tietääkseni pidäkään näkyä lcd:llä vaan sarjamonitorissa. lcd.print saattaisi näkyä ja luulisin, että se ottaa int-arvon ihan samalla tavalla kuin tuo ei-i2c -kirjastokin..

lcd.clear();
lcd.setCursor(0, 0);
lcd.print(counter);

Joka välissä lcd.clear() kutsuminen voi vähän himmentää tai vilkuttaa piirtoa, mutta jos sen ottaa pois, niin sitten vanha luku jäisi alle sotkemaan. Sen saa kikkailtua siistimmäksikin kyllä. Esimerkkikoodien perusteella ei tarvitse kutsua uudestaan lcd.begin(16,2), jos näytön koko on jo annettu instantioinnissa.

Toinen arvaus on se, että ehkä tässä saattaa olla nappi samassa pinnissä kuin mitä SDA tai SCL pinni on. Arduinossa ne ovat joskus pinnit 2 ja 3 (Leonardo), joskus ne ovat jotain muuta. Siirrä nappi varmuuden vuoksi muualle, vaikka int inPin = 4; Koodissa on ledPin 12 esim1:ssä ja 13 esim2:ssa. Se tuskin vaikuttaa, mutta eipähän vilku ledi toisella, jos ajat juuri noita koodeja vuorotellen prosessorille.

hmm,pitääpä kokeilla,kiitos. tarkistin napit niin nappi oikein, lcd sda/scl on aina noissa valmistajan suosittelemissa(heidän koodiesimerkki)A4,jaA5 toimii hello world esimerkissäkin hyvin.
nappi siirretty digital 3 muutan koodiin tuonkin oikein.
lisäilin tuon liguidcrydtal_i2c ja init taustavalo,serialbegin alkuun,
lisään arduinon omalla vielä alkuun nuo kirjastot wire,h ja licuid_i2c.h
serial print (counter)poistin ja tilalle tuo lcd tyhjennys,kursori nollaan ja print counter.

toivottavasti alkaa toimia,on tää erinomaista,saa näköjään plc:hen verraten olla tarkempi kaiken kanssa ja puolet vielä hakusessa mitä mikin pitää ja on ja on olemassa, täytyy olla.

KIITOS tästäkin avusta,kokeilen tänään mitä tapahtuu :slight_smile:
juu kokeilin ja NYT pukkaa erroreita vallan kaameesti

sketch_jan27a.ino: In function 'void setup()':
sketch_jan27a:25: error: a function-definition is not allowed here before '{' token
sketch_jan27a:32: error: a function-definition is not allowed here before '{' token
sketch_jan27a:57: error: expected `}' at end of input
ei hajuakaan mitä nuo edes tarkoittaa :frowning: pysähtyy kuitenkin compileri tuohon void setup kohtaan.

noita" " error, "{" ja token error tulee kaikkiin mahdollisiin esimerkkeihin ja omiin kokeiluihini jatkuvasti. ei vaan ymmärrä vaikka jotkut vain copy pastella lisännyt,jotku toimii jotku ei :frowning:
no olkoon tältä päivältä,rupee päätä nykyisin särkeen kun tuntikausia tappelen ja mitään ei selkene.

Menivät esim. päivittämään jonkun headerin nimen WProgram.h -> Arduino.h ja tällaista pientä kiusaa, mutta en tiedä oliko tämä se. Eli IDE:n 1.0.3 versiossa käytetään toista headeria, ja lähes kaikki vanhat kirjastot menivät rikki siinä. Mutta enemmän tuo virhe kuullostaa siltä, että puuttuu puolipiste rivin lopusta jostain.

myös,olen päivittänyt IDE:n 1.01---> 1.03 seen ja en ainakaan huomaa mitään eroa,
jotkut examplesit ei vain toimi,esim,keybad.h valitusta tulee .(4x4)
lcd toimii kuten ennenkin eli jollaikin esimerkillä toimii toisella ei ollenkaan noiden errorien takia.
rupee menemään sekin vähä yli hilseen mitä jo oppinut tähänmennessä noilla esimerkeillä.
eikä koneelta löydy kyllä mistään moisia wprogram.h tai arduino.h mistään ?????
nyt kokeiltu yksittäisiä osia ja kaikki toimii yksinään joillakin koodeilla,mutta yhdessä ei mitenkään.
keybad ok,yhdellä ohjelmalla(ei kutsu mitään H kirjastoa)
lcd hello word ok,liguidcrystall.h ok
7 segment ok
hall ok
temp ok (lm35)
motor drive shield,testaamatta L298p 2A dfrobot.koe testi ok,
akkumittari autossa ok
bensamittari (työn alla,purkamatta tankkia ja mittaamatta vastusta,eli empiirisillä mittauksilla eri volt arvoilla ajossa/tankkauksen jälkeen)
sopivaa koodia gyro+acceletometer ei vielä löytynyt suomessa saataville sensoreille,liian uusia(digitaaliset)koodit kaikki analogisille.
acceletolle ADXL 203 ja 335 kyllä löytyy koodia muttei saatavilla oleviin 345 ja mpu 6050 tms uudempiin.
pirun iso työ lähteä keksimään pyörää uusiksi anturin takia.olkoon vielä.
en vielä siis tilannut antureita kun ei varmaa toimiiko samoilla koodeilla edes,tuskin pelaa.

enkuksi en saanut selvää,kirjastot pitää lisätä(keybad.h)siis arduinon library kansioon omiin kansioihin esim,kansio ,nimi,lcd, kansio nimi keybad, tms, wire. ja siellä sisällä siis nuo H kirjastot. lcd.h+lcd.cpp tai wire.h+wire.cpp tai keybad.h+keybad.cpp esimerkiksi ? ettei siis library kansion juureen haeta/lisätä nuo h kirjastot niistä alikansioista kopy pastella.vaan omiin kansioihinsa ja löytää sieltä itse ne ?
kun jotkut koodit herjaa keybad.h not found, tms. tai riveillä erroria const int ROW, const int COLUMN ei siis tunnista tuollaisia käskyjä ja ei compileeraa ?
vai oliko se const int byte ROW.
rupee olemaan ihan liikaa harmia koodeista,miksihän,(muutenkuin tyhmyyttäni) :smiley:
parempi kai kun vain siirtyy takaisin työpaikan PLC:hen ni osaa ainakin :slight_smile: (siemens7,omron,crousec,philips,hp)
tai kotona keskittyy picaxeen vaan :slight_smile:

Minä olen lisännyt noita kirjastoja My Documents\Arduino\libraries alle. Sen alta löytyy sitten hakemistoja esim. LiquidCrystal_I2C, jonka alla taas suoraan kirjastojen koodit (.cpp ja h). Saattaa löytyä vielä examples -hakemisto, jonka sisältö näkyy sitten IDE:n sketchbook tai examples-menun alla kätevästi.. Ihan en ole vielä hahmottanut miten IDE on rakennettu hakemaan kirjastoja juuri tuolta, mutta niin se vaan suurimman osan ajasta kuitenkin toimii jopa ilman makefile-tiedosta, joka yleensä kertoisi mitä kääntäjän pitää kääntää. Vasta tänä vuonna aloitin Arduinolla leikkimisen.

juu,kyllähän nuo kirjastot alkoi tomimaan kun laittooi oikeaan kansioon, Näyttö toimii upesti ja vie tosiaan vain sen 2 pinniä + 5V,gnd.
kaikki esimerkit vain netissä tahtoo olla noilla hd yhteensopivilla jotka syö sen 8 pinniä kortista heti turhiin näyttö juttuihinsa.
Mutta sekin jo selvitetty,Vaihdan vain wire ja liguidc i2c kirjastot sekä jokusen pätkän koodia nini toimii nuokin jo.

Nyt ollut ongelmana uusi rojecti jota en niin tarkalleen oikein ymmärrä. links2sf_inout v4 exe hoitelee pc-ardunion välistä kommunikaatiota lentosimuilussa muttta arduino ja serial monitori toimii muttei tuo links2fsinout exe tai simu ei toimi tuon kanssa,tiedä yhtään miten tuo mahtanee toimia, ei vaan ymmärrä tuota.Pitäs esimerkeillä toimia mutta ?
jimspace.co.nz sivuilla löytyy. jos jotakin muuta myös kiinnostaa.yritellyt nyt tuota starter1 ja 2 esimerkkejä saada pelaamaan, serial monitorissa kyllä tunnistaa keypadin. painallukset.

Mie laitoin vanhan Nokia 5110:n näytön kiinni ja hyvin pelaa ilman mitään ihme kirjastoja