Težava z IF stavkom

Arduino je pojav za katerega bi težko rekli, da opisuje samo HW ali samo SW, zato mu tu namenajm poseben prostor.

Moderator: tilz0R

Težava z IF stavkom

Postby FilipN » 14 Apr 2018, 22:20

Lep pozdrav!
Začel sem z novim projektom na RC letalu in sicer z napeljavo lučk. Sem že skoraj zaključil vendar se mi je ustavilo pri programu. Težava se mi je pojavila v IF stavku, v katerem bi rad z napetostima (napetosti merim na led switch -u, ki spremeni signal s sprejemnika v različne kombinacije 0 / 5V) primerjal z neko številko npr.: prva napetost mora biti manjša od 0,5V ,druga pa večja od 4,5V. S tem bi rad spreminjal program lučk z daljinca glede na to v katerem delu leta bom. Če mi kdo zna kako pomagati, bom seveda vesel rešitve tega problema. V priponki sem dodal še program, da si ga lahko ogledate.
You do not have the required permissions to view the files attached to this post.
LP Filip
FilipN
 
Posts: 14
Joined: 01 Sep 2017, 14:42
Location: Vodice 1217
Has thanked: 10 times
Been thanked: 0 time
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 0

Re: Težava z IF stavkom

Postby 1tilen » 14 Apr 2018, 22:32

Glede iz napisanega nevem točno kje je problem...imaš probleme z različnimi napetostmi? Ti v kakšnem primeru kaj deluje kot bi moralo? Nisem pa popolnoma prepričan glede tvojih pretvorb iz ADC podatka v napetost. Načeloma če imaš na ADCju 5 V - torej prebrana vrednost 1023 bo tvoj program to napetost prebral kot 5.2V zaradi faktorja 1.04. Sicer pa glede na to, sta tvoja pogoja zgolj 0.5V in 4.5V v if stavkih primerjaš direktno ADC vrednosti.
Npr:
Code: Select all
 if((senzor1 < 102 )&& (senzor2 > 921))


Bi pa neglede rekel, da dodaj še dodatne oklepaje za posamezne pogoje, kot sem jaz napisal zgoraj v primeru...pa neglede, če delaš z napetostmi ali direktno ADC vrednostmi.

Lp
----
Tilen - S54B
User avatar
1tilen
 
Posts: 132
Joined: 18 Jan 2015, 01:12
Location: Sežana - JN65WQ
Has thanked: 53 times
Been thanked: 72 times
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 10

Re: Težava z IF stavkom

Postby forest70 » 15 Apr 2018, 00:35

FilipN wrote:Lep pozdrav!
Začel sem z novim projektom na RC letalu in sicer z napeljavo lučk. Sem že skoraj zaključil vendar se mi je ustavilo pri programu. Težava se mi je pojavila v IF stavku, v katerem bi rad z napetostima (napetosti merim na led switch -u, ki spremeni signal s sprejemnika v različne kombinacije 0 / 5V) primerjal z neko številko npr.: prva napetost mora biti manjša od 0,5V ,druga pa večja od 4,5V. S tem bi rad spreminjal program lučk z daljinca glede na to v katerem delu leta bom. Če mi kdo zna kako pomagati, bom seveda vesel rešitve tega problema. V priponki sem dodal še program, da si ga lahko ogledate.

Code: Select all
if(napetost1 < 0,5 && napetost2 < 0,5){

Ne uporabljaj vejic za decimalno ampak piko !!!
Tako:
Code: Select all
if(napetost1 < 0.5 && napetost2 < 0.5){

Poleg tega, po ne potrebnem meritve ki so tipa int, spreminjaš v float, saj lahko primerjaš v int obliki kot ti je predlagal 1tilen.
If you pay in bananas, you got monkeys.
User avatar
forest70
 
Posts: 1460
Joined: 14 Jan 2015, 01:11
Location: Koper
Has thanked: 303 times
Been thanked: 311 times
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 112

Re: Težava z IF stavkom

Postby forest70 » 15 Apr 2018, 00:44

Pa še to:
Code: Select all
pinMode(A1,INPUT);
pinMode(A2,INPUT);
//.
//.
//.
//.
int senzor1 = analogRead(A1);
int senzor2 = analogRead(A2);

Odloči se, kaj boš počel z A1 in A2 analogno ali digitalno, ker oboje hkrati ne gre.
If you pay in bananas, you got monkeys.
User avatar
forest70
 
Posts: 1460
Joined: 14 Jan 2015, 01:11
Location: Koper
Has thanked: 303 times
Been thanked: 311 times
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 112

Re: Težava z IF stavkom

Postby FilipN » 15 Apr 2018, 12:56

hvala za vse nasvete. najprej sem odpravil napako iz , v . in deluje. hvala še enkrat forest70
LP Filip
FilipN
 
Posts: 14
Joined: 01 Sep 2017, 14:42
Location: Vodice 1217
Has thanked: 10 times
Been thanked: 0 time
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 0

Re: Težava z IF stavkom

Postby forest70 » 15 Apr 2018, 13:50

FilipN wrote:hvala za vse nasvete. najprej sem odpravil napako iz , v . in deluje. hvala še enkrat forest70

Pa še to bi ti priporočal:
deklariraj spremenljivke vse na enem mestu!
Code: Select all
void loop() {
 int senzor1;
 int senzor2;
//Lahko tudi tako:
 int senzor1, senzor2;
float napetost1;
float napetost2;

senzor1 = analogRead(A1);
napetost1 = senzor1 * (5.0 / 1023.0)*1.04;
senzor2 = analogRead(A2);
napetost2 = senzor2 * (5.0 / 1023.0)*1.04;
// itd....
}


Če jih deklariraš na začetku datoteke (ni v funkciji), so to globalne spremenljivke.
Če jih deklariraš v funkciji, so pa lokalne.
Kadar deklariraš spremenljivko in veš, da gre od recimo 0 pa do 65536 (pozitivno) deklariraj tako:
Code: Select all
unsigned int senzor1;

Kaj sem s tem dobil? Ja to 65533 je pozitivna številka
Če pa je deklarirana kot int pa -3, velika razlika ko primerjaš številke med sabo.
Pri 16 bitni sremenljivki tipa int vse kar je več kot 0x7fff ali decimalno 32766, so negativne številke.
podobno je z char:
unsigned char bbb; //od 0 do 255
char bbb; // od -128 do 127
If you pay in bananas, you got monkeys.
User avatar
forest70
 
Posts: 1460
Joined: 14 Jan 2015, 01:11
Location: Koper
Has thanked: 303 times
Been thanked: 311 times
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 112

Re: Težava z IF stavkom

Postby tilz0R » 15 Apr 2018, 22:40

forest70 wrote:Kadar deklariraš spremenljivko in veš, da gre od recimo 0 pa do 65536 (pozitivno) deklariraj tako:
Code: Select all
unsigned int senzor1;

Kaj sem s tem dobil? Ja to 65533 je pozitivna številka
Če pa je deklarirana kot int pa -3, velika razlika ko primerjaš številke med sabo.
Pri 16 bitni sremenljivki tipa int vse kar je več kot 0x7fff ali decimalno 32766, so negativne številke.
podobno je z char:
unsigned char bbb; //od 0 do 255
char bbb; // od -128 do 127


Nikoli, ampak res nikoli, ne deklariraš spremenljivke z "int", "unsigned int" ali še slabše, "char".

V večini embedded prevajalnikov "char" NI signed in če narediš char a; ima ta a vrednosti od 0 do 255. Poleg tega NI nujno, da je char 8-biten, lahko je tudi 16.
Ker ima tudi int različne vrednosti in če bi rad kodo, ki bo delala na Arduino UNO in Arduino DUE isto (kar pričakuješ glede na Arduino), uporabljaš stdint.h knjižnico.

Code: Select all
uint16_t senzor
int8_t bbb;
signed char bbb; //To je tudi opcija.
Knowledge sharing is people' caring., T. MAJERLE
User avatar
tilz0R
 
Posts: 1393
Joined: 18 Jan 2015, 00:12
Location: Črnomelj
Has thanked: 182 times
Been thanked: 341 times
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Težava z IF stavkom

Postby VolkD » 15 Apr 2018, 23:44

Ja, večina ljudi se ob programiranju enega mikrokontrolerja fokusira na rezultat. Torej na to, da zadeva deluje. Mnogo njih, hobisti mislim, da nikoli, pa niti pomisli ne na to, da bi fokus mogoče lahko razširili na to, da stvar dela tudi še na kakem drugem mikrokontrolerju.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
User avatar
VolkD
Administratorji strani
 
Posts: 26495
Joined: 29 Dec 2014, 20:49
Location: Kačiče (Divača)
Has thanked: 4879 times
Been thanked: 3500 times
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255


Return to Arduino

Who is online

Users browsing this forum: CCBot/2.0 and 0 guests