Arduino kezdő
Arduino kezdő
Sziasztok!
Kezdőként szeretnék segítséget kérni van egy program aminek az értelmezésében szeretnék segítséget kérni.
void loop()függvénytől a kijelző vezérlésig szeretnék egy sorról sorra történő magyarázatot.
Köszönöm Tamás
Kezdőként szeretnék segítséget kérni van egy program aminek az értelmezésében szeretnék segítséget kérni.
void loop()függvénytől a kijelző vezérlésig szeretnék egy sorról sorra történő magyarázatot.
Köszönöm Tamás
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Re: Arduino kezdő
Kapcsolási rajz azért sokat könnyítene....
Kód: Egész kijelölése
void loop()
{
vin=analogRead(input);
//vin beolvasod a "input" csatorna értékét (vin=0...1023)
vin=vin/2.046;
//Osztasz 2.046-tal (ennyi a külső referenciafeszültség?)
a = vin%10;
//Vin / 10 és a maradék kerül az "a" változóba. Gyakorlatillag a vin utoplsó számjegyre
//nem világos Vin: integer (egész, 0....655535). Ez nem osztható 2.xxx törtszámmal! A háttérben a tényleges számolás tippem szerint eddigiek:
//Vin=Vin/2
//a=vin-(egészrész(vin/10)*10)
if(a<=5)
{a=0;}
else
{a=5;}
//Ez a kerekítés :)
//A kiírás vége 5 vagy 0 (azaz a mérési bizonytalanság/lebegés utolsó tizede ne mozogjon)
//Utána s szegmensek kiírása következik.
digitalWrite(disp1,LOW);
digitalWrite(disp2,LOW);
digitalWrite(disp3, HIGH);
digitalWrite(segDP,HIGH);
display(a);
delay(5);
vin = vin/10;
a = vin%10;
digitalWrite(disp3,LOW);
digitalWrite(disp2,HIGH);
digitalWrite(segDP,HIGH);
display(a);
delay(5);
vin=vin/10;
a=vin;
digitalWrite(disp2,LOW);
digitalWrite(disp1,HIGH);
digitalWrite(segDP,LOW);
display(a);
delay(5);
//kijelzés vezérlés indul
}
int display (int a)
{
switch (a)
{
case 0:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
break;
case 1:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 2:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 3:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 4:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 5:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 6:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 7:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 8:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 9:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
//kijelzés vezérlés vége
break;
}}
Re: Arduino kezdő
mi a kérdésed?
miben akadtál el? mit nem értesz?
ez egy 3 jegyű 7szegmenses kijelzőn megvalósított feszültségmérő.
megnézed az analog input specifikációját,
abból látod, milyen feszültséghatárok között mér, és milyen értéket ad vissza
a példa kedvéért végy az értékkészlet közepéről egy tetszőleges értéket ezt használjuk a későbbiekben (vin=____)
ezután elvégzed a műveletet, és megvan a kiírandó számod (vin=____)
(itt van egy elég erős type missmatch: egész értéket lebegőpontossal osztani, és beletenni egészbe (de működik)
ezután megnézed , hogy mit jelent a % operátor
megvan az a első értéke (a=____)
kiértékeled a feltételt, aszerint módosítod a értékét (a=____)
kijelölöd, melyik 7szegmenses kijelzőt akarod vezérelni,
kioltod a tizedespontot,
és kiiratod a értékét
vársz 5ms-t, majd
fogod a következő a értékét (a=____),kijelőlöd a köv. digitet kigyújtod a tizedespontot,kiíratod a-t,
vársz 5ms-t, majd
fogod a következő a értékét (a=____),kijelőlöd a köv. digitet, kioltod a tizedespontot,kiíratod a-t,
vársz 5ms-t,
majd a loop indul elölről
ha érted, mit csinál a program, akkor meg tudod mondani, hogy a 63.3 kijelzéséhez kb mekkora bemenőfesz tartozik?
miben akadtál el? mit nem értesz?
ez egy 3 jegyű 7szegmenses kijelzőn megvalósított feszültségmérő.
megnézed az analog input specifikációját,
abból látod, milyen feszültséghatárok között mér, és milyen értéket ad vissza
a példa kedvéért végy az értékkészlet közepéről egy tetszőleges értéket ezt használjuk a későbbiekben (vin=____)
ezután elvégzed a műveletet, és megvan a kiírandó számod (vin=____)
(itt van egy elég erős type missmatch: egész értéket lebegőpontossal osztani, és beletenni egészbe (de működik)
ezután megnézed , hogy mit jelent a % operátor
megvan az a első értéke (a=____)
kiértékeled a feltételt, aszerint módosítod a értékét (a=____)
kijelölöd, melyik 7szegmenses kijelzőt akarod vezérelni,
kioltod a tizedespontot,
és kiiratod a értékét
vársz 5ms-t, majd
fogod a következő a értékét (a=____),kijelőlöd a köv. digitet kigyújtod a tizedespontot,kiíratod a-t,
vársz 5ms-t, majd
fogod a következő a értékét (a=____),kijelőlöd a köv. digitet, kioltod a tizedespontot,kiíratod a-t,
vársz 5ms-t,
majd a loop indul elölről
ha érted, mit csinál a program, akkor meg tudod mondani, hogy a 63.3 kijelzéséhez kb mekkora bemenőfesz tartozik?
Re: Arduino kezdő
Robert
Köszönöm a választ, Kapcsolás innen van.
http://www.circuitstoday.com/voltmeter-using-arduino
Köszönöm a választ, Kapcsolás innen van.
http://www.circuitstoday.com/voltmeter-using-arduino
Re: Arduino kezdő
Csegebiga
30,9 jól gondolom?
30,9 jól gondolom?
Re: Arduino kezdő
nem igazán,
több sebből is vérzik a "megoldásod"
1. mi a mértékegység? kiloKolbász?
2. hol a számtás? mint tudod, a végeredmény odabiggyesztése nem értékelhető megoldásként.
3. ha ez Voltban megadott érték, akkor ez egy igazi füstgépet csinálna az eszközből. (30V-ot kötnél az 5Vos bemenetre)
4. ha ez milliVoltban megadott érték, akkor a maximálisan kijelezhető érték 50mV alatt lenne 5V helyett (max kijelzés=99.5)
5. ránézésre sem lehet a megldás jó,mivel az eszköz nem tud 63.3-at kiírni ezzel a programmal
6. miért nem?
több sebből is vérzik a "megoldásod"
1. mi a mértékegység? kiloKolbász?
2. hol a számtás? mint tudod, a végeredmény odabiggyesztése nem értékelhető megoldásként.
3. ha ez Voltban megadott érték, akkor ez egy igazi füstgépet csinálna az eszközből. (30V-ot kötnél az 5Vos bemenetre)
4. ha ez milliVoltban megadott érték, akkor a maximálisan kijelezhető érték 50mV alatt lenne 5V helyett (max kijelzés=99.5)
5. ránézésre sem lehet a megldás jó,mivel az eszköz nem tud 63.3-at kiírni ezzel a programmal
6. miért nem?
Re: Arduino kezdő
elnézést kérek, belementem az erdőbe.
elnéztem a tizedespont helyét, így nem .0 és.5 a vége a displaynek, hanem x.x0 vagy x.x5
az előbbi hszem 4.es pontja storno
ebből adódik, hogy nem 99.5 a max kijelezhető érték, hanem 4.90
de a kérdés még mindig áll:
milyen bemenőfesz kell a 63 kijelzéséhez?
elnéztem a tizedespont helyét, így nem .0 és.5 a vége a displaynek, hanem x.x0 vagy x.x5
az előbbi hszem 4.es pontja storno
ebből adódik, hogy nem 99.5 a max kijelezhető érték, hanem 4.90
de a kérdés még mindig áll:
milyen bemenőfesz kell a 63 kijelzéséhez?
Re: Arduino kezdő
63 az micsoda krumpli?
csak nem gondolod hogy egy egész egyenlet levezetést fogok neked ide írni.
Tanárnak képzeled magad te mindent tudsz????
csak nem gondolod hogy egy egész egyenlet levezetést fogok neked ide írni.
Tanárnak képzeled magad te mindent tudsz????
Re: Arduino kezdő
mivel a kijelzőn nincs mértékegység kijelzés, ezért ott te csak egy számot látsz, neked kell tudni, hogy az kilóKrumpli, vagy Volt, vagy akármi más
nem kell tanárnak képzelnem magam, nem tudok mindent, sőt. mint fentebb láthattad, én is elnézhetek akármit.
ez nem számonkérés volt, hanem játék.
sajnos nem jött be.
egy kicsi logika kellett volna az agresszió helyett:
ez egy Voltmérő porogram. 0-5Vig mér. tehát, ha 63-t ír ki az csak 0.63V esetén megvalósítható vele
1.63 nál 163, 2.63nál 263(stb) lesz kiírva. plusz a tizedespont
ennyi az egész "egyenletrendszered"
de ha számolni akarnál:
((63*2.046)/1023)*5(V)=0.63V
teljesüljön minden kívánságod!
(ősi kínai átok)
nem kell tanárnak képzelnem magam, nem tudok mindent, sőt. mint fentebb láthattad, én is elnézhetek akármit.
ez nem számonkérés volt, hanem játék.
sajnos nem jött be.
egy kicsi logika kellett volna az agresszió helyett:
ez egy Voltmérő porogram. 0-5Vig mér. tehát, ha 63-t ír ki az csak 0.63V esetén megvalósítható vele
1.63 nál 163, 2.63nál 263(stb) lesz kiírva. plusz a tizedespont
ennyi az egész "egyenletrendszered"
de ha számolni akarnál:
((63*2.046)/1023)*5(V)=0.63V
teljesüljön minden kívánságod!
(ősi kínai átok)
Re: Arduino kezdő
Mtom75! A HSZ-ed, indulatébresztő volt!mtom75 írta:63 az micsoda krumpli?
csak nem gondolod hogy egy egész egyenlet levezetést fogok neked ide írni.
Tanárnak képzeled magad te mindent tudsz????
Re: Arduino kezdő
viewtopic.php?f=23&t=828
Visszatérve. Ez műszaki fórum. Egzakt megfogalmazások nem ártanak....
A kódban az "integer=integer/2.046" sort nem értem. A 2.046 honnan jött ki?
"Néhány jótanács, ha hozzászólást írsz:
Új topic-ot indítva válassz kifejező címet. Hamarabb kapsz választ így a fórumban a kérdésekre. Ezt a hozzászólás írása, cím kitöltése, majd az 'új téma' gombra kattintva teheted meg.
Ha programozási kérdés merül fel, akkor programkód nélkül nagyon nagy a kihívás. Bár ötletbörzét is lehet tartani .
.
.
.
.
A Fórum az egy beszélgetős hely. NEM műszaki szakszolgálat. Aki itt van, az is tanulta a hobbit/szakmát évek alatt. Nem minden részt látunk át, mindenkinek van 1-2-5-10 terület amit jobban ismer.
A Smile és egyéb ikonokat használd nyugodtan. Lehet, hogy egy-egy vicces megjegyzés bántó lehet. Élőszóban ott a hangsúly. Itt csak a smile gombok.
"
Visszatérve. Ez műszaki fórum. Egzakt megfogalmazások nem ártanak....
A kódban az "integer=integer/2.046" sort nem értem. A 2.046 honnan jött ki?
Re: Arduino kezdő
A programot nem én írta feljebb belinkeltem az oldalt.
Egy mãsik forumon azt mondták azért kell osztani 2.046 mertAzért kell osztani mert az analóg bejárata 10 bites komparátort tartalmaz. Nem tudom ez segįtség e vagy helyes e.
Egy mãsik forumon azt mondták azért kell osztani 2.046 mertAzért kell osztani mert az analóg bejárata 10 bites komparátort tartalmaz. Nem tudom ez segįtség e vagy helyes e.
Re: Arduino kezdő
Az analog bemenet 10 bites Analóg.-Digital átalakítót tartalmaz. 0...1023 érték.
5V referenciafesz esetén 1 osztás: 5V/1024: 1 osztás: 4.8828mV
A linkelt oldalon sincsen semmi értelmes infó róla. A referenciafesz chipen belül is 2.56V vagy 1.1V.
Azaz semmi köze hozzá
5V referenciafesz esetén 1 osztás: 5V/1024: 1 osztás: 4.8828mV
A linkelt oldalon sincsen semmi értelmes infó róla. A referenciafesz chipen belül is 2.56V vagy 1.1V.
Azaz semmi köze hozzá
Re: Arduino kezdő
Robert:
5Vos bemenő feszültségnél cél az 500 kiirása
ilyenkor az ADC kimenete 1023 at mond ugye?
ha ezt osztavánk kettővel, az 511-et adna
ez nem elég pontos
ezért csinál egy 1023-->1000 konverziót
majd ezt osztja 2 vel
vigyázat! számok következnek! gyengébb idegzetűek most foduljnak el!
1000 re konvertálás:
1023/1000=1.023
ezzel elosztva a Vin értékét megkapod 0-1000 értéktartományban
és hogy köze legyen a valósághoz, osztani kell még 2 vel
és megvan a 0-500ig terjedő intervallum
tehát:
(Vin/1.023)/2=Vin/2.046
nahát ezért ez a bűvös szám.
és igen, a rendszer valószínűleg kiszámolja a lebegőpontos osztásértékét, és annak teszi be az egészrészét az int változóba a végén.
tehát nem Vin/INT(2.046) hanem INT(Vin/2.046) a művelet
5Vos bemenő feszültségnél cél az 500 kiirása
ilyenkor az ADC kimenete 1023 at mond ugye?
ha ezt osztavánk kettővel, az 511-et adna
ez nem elég pontos
ezért csinál egy 1023-->1000 konverziót
majd ezt osztja 2 vel
vigyázat! számok következnek! gyengébb idegzetűek most foduljnak el!
1000 re konvertálás:
1023/1000=1.023
ezzel elosztva a Vin értékét megkapod 0-1000 értéktartományban
és hogy köze legyen a valósághoz, osztani kell még 2 vel
és megvan a 0-500ig terjedő intervallum
tehát:
(Vin/1.023)/2=Vin/2.046
nahát ezért ez a bűvös szám.
és igen, a rendszer valószínűleg kiszámolja a lebegőpontos osztásértékét, és annak teszi be az egészrészét az int változóba a végén.
tehát nem Vin/INT(2.046) hanem INT(Vin/2.046) a művelet
Re: Arduino kezdő
A linkelt oldalon (egy sajtóhibával) így magyarázták:
az osztó értéke helyesen 2.046The analog voltage applied to analog input pin A0 is read using analogRead function. The digital equivalent on the analog input voltage is stored in variable vin. For example if 2.5V is the analog input, then the data loaded into variable “vin” after analogRead will be 2.5V/4.8mV= 511. The digital value in variable “vin” is divided by2.056 in order to make a 0 t0 500 swing in the digital reading corresponding to the 0 to 5V swing in the input voltage. The variable “vin” is over written by the result of the division.