www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Učenje Arduino

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
StricGeza
Član
Član



Pridružen-a: Ned 01 Apr 2007 11:53
Prispevkov: 1047
Aktiv.: 4.72
Kraj: Gradišče pri Divači

PrispevekObjavljeno: Sre Jan 23, 2013 5:33 pm    Naslov sporočila:  Učenje Arduino Odgovori s citatom

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 Mr. Green

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
Obelix
Član
Član



Pridružen-a: Pon 19 Maj 2008 13:59
Prispevkov: 1881
Aktiv.: 9.05
Kraj: Maribor

PrispevekObjavljeno: Sre Jan 23, 2013 5:41 pm    Naslov sporočila:   Odgovori s citatom

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 Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.33

PrispevekObjavljeno: Sre Jan 23, 2013 6:17 pm    Naslov sporočila:  Re: Učenje Arduino Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
StricGeza
Član
Član



Pridružen-a: Ned 01 Apr 2007 11:53
Prispevkov: 1047
Aktiv.: 4.72
Kraj: Gradišče pri Divači

PrispevekObjavljeno: Sre Jan 23, 2013 7:53 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.33

PrispevekObjavljeno: Sre Jan 23, 2013 9:20 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
martinopresnik
Član
Član



Pridružen-a: Pet 29 Okt 2010 14:42
Prispevkov: 213
Aktiv.: 1.20
Kraj: Šentrupert nad laškim

PrispevekObjavljeno: Sre Jan 23, 2013 9:49 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group