 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
StricGeza Član

Pridružen-a: Ned 01 Apr 2007 11:53 Prispevkov: 1047 Aktiv.: 4.72 Kraj: Gradišče pri Divači
|
Objavljeno: Sre Jan 23, 2013 5:33 pm Naslov sporočila: Učenje Arduino |
|
|
Tudi sam se nekaj mučim z Arduinom, ampak zeloooooo počasi. S programiranjem se srečujem prvič tako tako da upam da boste potrpežljivi
Pomagam si z vodiči na Arduino strani pa mi ni ravno vse jasno.
ARDUINO-Spremenljivke
Muči me naslednje:
int pin = 13;
int pin2 = pin;
pin = 12;
Jaz si zgornje razlagam takole:
nastavimo spremenljivko "pin" na vrednost 13,
uvedemo novo spremenljivko "pin2" in ga izenačimo z "pin" (torej pin2 ima sedaj vrednost 13)
potem je spremenljivka "pin" prazna in ji lahko določimo drugo vrednost torej se prva vrsta spremeni v int pin = 12 _________________ Človek,kateri ne dela napak,običajno ne dela nič!!! |
|
Nazaj na vrh |
|
 |
Obelix Član

Pridružen-a: Pon 19 Maj 2008 13:59 Prispevkov: 1881 Aktiv.: 9.05 Kraj: Maribor
|
Objavljeno: Sre Jan 23, 2013 5:41 pm Naslov sporočila: |
|
|
Skoraj.
Z "int pin = 13" deklariramo spremenljivko tipa integer, ji damo ime pin in ji priredimo vrednost 13.
Z "int pin2 = pin" deklariramo novo spremenljivko tipa integer, ji damo ime pin2 in ji priredimo vrednost spremenljivke int. To je 13.
Ampak pin s tem ni prazna in ima še vedno vrednost 13.
S "pin = 12" pa sedaj priredimo spremenljivki pin novo vrednost. To je 12.
Tako smo pred četrt stoletja to razlagali  |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
Objavljeno: Sre Jan 23, 2013 6:17 pm Naslov sporočila: Re: Učenje Arduino |
|
|
Nekaj me je zmotilo...
StricGeza je napisal/a: |
...torej se prva vrsta spremeni v int pin = 12 |
prva vrsta se nič ne spremeni. Prva vrsta je samo en korak v izvajanju programa in pomeni, da bo definirana nova spremenljivka v RAMu, kateri bo prirejena vrednost 13. Program se izvaja z zaporedjem ukazov in ne moreš govoriti o spremembi vrstice.
V tretji vrstici tvojega programa se bo spremenila vrednost te spremenljivke,kar pa nima vpliva na prvo vrstico. Sem malo pikolovski, samo se hočem prepričati, da poznaš logiko delovanja C programa... _________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
StricGeza Član

Pridružen-a: Ned 01 Apr 2007 11:53 Prispevkov: 1047 Aktiv.: 4.72 Kraj: Gradišče pri Divači
|
Objavljeno: Sre Jan 23, 2013 7:53 pm Naslov sporočila: |
|
|
Ok sedaj mi je bolj jasno, hvala za razlago.
Sem iz čisto druge stroke (strojništvo) in v dosedanjem šolanju nisem še prišel v stik z drugim programiranjem kot programiranjem G kode.
Torej, igram se z RGB ledico in dvemi tipkami, želim da:
če ni pritisnjena nobena tipka => modra LED
če je pritisnjena samo tipka 1 => rdeča LED
če je pritisnjena samo tipka 2 => zelena LED
do tule program dela BP
Koda: |
int buttonPin1 = 2; //tipka 1
int buttonPin2 = 3; //tipka 2
int redPin = 11; //rdeča LED
int greenPin = 10; //zelena LED
int bluePin = 9; //modra LED
// setup starta serijsko komunikacijo in dafinira vhode in izhode
void setup()
{
Serial.begin(9600); //startamo serijsko komunikacijo
//definiramo vhode
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
//prižgemo notranje pull-upe na vhodih
digitalWrite(buttonPin1,HIGH);
digitalWrite(buttonPin2,HIGH);
//definiramo izhode
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
/*
loop sledi pritiskom tipke 1 in 2 in prižiga LED
če ni pritisnjena nobena tipka => modra LED
če je pritisnjena samo tipka 1 => rdeča LED
če je pritisnjena samo tipka 2 => zelena LED
*/
void loop()
{
if (digitalRead(buttonPin1) == HIGH && digitalRead(buttonPin2) == HIGH)
{
Serial.println("modra");
digitalWrite(bluePin, HIGH);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
}
if (digitalRead(buttonPin1) == LOW)
{
Serial.println("rdeca");
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(redPin, HIGH);
}
if (digitalRead(buttonPin2) == LOW)
{
Serial.println("Zelena");
digitalWrite(bluePin, LOW );
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
}
delay(500);
}
|
Če pa držim tipko 1 in nato pritisnem še tipko2 se mi prižge zelena LED.
Če pa naredim obratno, da držim tipko2 in nato pritisnem tipko1 ostane zelena LED prižgana, rdeča pa ne.
Torej rad bi da sveti tista led katere tipko zadnjo pritisnem; zanima me če moram dodati novo if zanko v kateri bi popisal stanje na tipkah, ali je kakšna druga rešitev. _________________ Človek,kateri ne dela napak,običajno ne dela nič!!! |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
Objavljeno: Sre Jan 23, 2013 9:20 pm Naslov sporočila: |
|
|
V tem primeru pa imaš pogoj, ki je vezan na časovno zaporedje eventov. Ne bo dovolj samo še dodaten if stavek, moral boš dodati še spremenljivko z zastavicami, da boš lahko programu povedal, kateri gumb je bil pritisnjen prvi.
Zdaj se ti program obnaša kot si napisal, ker ko se izvaja v zanki pri pritisnjenih obeh gumbih, najprej preveri pogoj rdeče LED, ki jo seveda prižge, takoj za tem pa izpolni pogoj prižiga zelene LED. Po tem pa za novi cikel čaka v delayu. Dejansko v ciklu svetita obe, ampak zaradi delaya vidiš samo zeleno, ne glede v kakšnem zaporedju si pritisnil tipki. Rdeča je tako prižgana samo delček cikla. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
martinopresnik Član


Pridružen-a: Pet 29 Okt 2010 14:42 Prispevkov: 213 Aktiv.: 1.20 Kraj: Šentrupert nad laškim
|
Objavljeno: Sre Jan 23, 2013 9:49 pm Naslov sporočila: |
|
|
Upam da dela, ker nisem preizkušal.
Koda: |
int buttonPin1 = 2; //tipka 1
int buttonPin2 = 3; //tipka 2
int redPin = 11; //rdeča LED
int greenPin = 10; //zelena LED
int bluePin = 9; //modra LED
// setup starta serijsko komunikacijo in dafinira vhode in izhode
void setup()
{
Serial.begin(9600); //startamo serijsko komunikacijo
//definiramo vhode
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
//prižgemo notranje pull-upe na vhodih
digitalWrite(buttonPin1,HIGH);
digitalWrite(buttonPin2,HIGH);
//definiramo izhode
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
/*
loop sledi pritiskom tipke 1 in 2 in prižiga LED
če ni pritisnjena nobena tipka => modra LED
če je pritisnjena samo tipka 1 => rdeča LED
če je pritisnjena samo tipka 2 => zelena LED
*/
bool prejsnja1, prejsnja2;
byte ZadnjaTipka;
void loop()
{
bool trenutna1, trenutna2;
trenutna1 = (digitalRead(buttonPin1) == HIGH);
trenutna2 = (digitalRead(buttonPin2) == HIGH);
if(trenutna1 != prejsnja1) //če je sprememba pri prvi tipki
{
prejsnja1= trenutna1;
if(trenutna1)ZadnjaTipka = 1;//če je pritisnjena
}
if(trenutna2 != prejsnja2) //če je sprememba na drugi tipki
{
prejsnja2= trenutna2;
if(trenutna2)ZadnjaTipka = 2; //če je pritisnjena
}
if (digitalRead(buttonPin1) == LOW && digitalRead(buttonPin2) == LOW)
{
Serial.println("modra");
digitalWrite(bluePin, HIGH);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
}
if (ZadnjaTipka==1)
{
Serial.println("rdeca");
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(redPin, HIGH);
}
if (ZadnjaTipka==2)
{
Serial.println("Zelena");
digitalWrite(bluePin, LOW );
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
}
delay(500);
}
|
Če kaj ni jasno, lahko razložim. Napaka se lahko pojavi, če je najprej pritisnjena druga in nato prva, v času, ko program čaka v delay-u. _________________ 1+1=10 |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|