Arduino kezdő

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
mtom75
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. május 7. csütörtök, 18:47

Arduino kezdő

Hozzászólás Szerző: mtom75 »

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
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino kezdő

Hozzászólás Szerző: Robert »

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;
}}
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino kezdő

Hozzászólás Szerző: csegebiga »

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?
mtom75
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. május 7. csütörtök, 18:47

Re: Arduino kezdő

Hozzászólás Szerző: mtom75 »

Robert

Köszönöm a választ, Kapcsolás innen van.
http://www.circuitstoday.com/voltmeter-using-arduino
mtom75
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. május 7. csütörtök, 18:47

Re: Arduino kezdő

Hozzászólás Szerző: mtom75 »

Csegebiga

30,9 jól gondolom?
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino kezdő

Hozzászólás Szerző: csegebiga »

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?
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino kezdő

Hozzászólás Szerző: csegebiga »

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?
mtom75
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. május 7. csütörtök, 18:47

Re: Arduino kezdő

Hozzászólás Szerző: mtom75 »

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????
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino kezdő

Hozzászólás Szerző: csegebiga »

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)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Arduino kezdő

Hozzászólás Szerző: kapu48 »

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????
Mtom75! A HSZ-ed, indulatébresztő volt! :oops: :cry: :evil: :mrgreen:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino kezdő

Hozzászólás Szerző: Robert »

viewtopic.php?f=23&t=828
"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?
mtom75
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. május 7. csütörtök, 18:47

Re: Arduino kezdő

Hozzászólás Szerző: mtom75 »

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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino kezdő

Hozzászólás Szerző: Robert »

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á :(
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino kezdő

Hozzászólás Szerző: csegebiga »

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
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino kezdő

Hozzászólás Szerző: csegebiga »

A linkelt oldalon (egy sajtóhibával) így magyarázták:
The 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.
az osztó értéke helyesen 2.046
Válasz küldése