2012.07.05.
18:05

Írta: harsanyireka

Hivatkozások 4.: Aritmetikai operátorok

= kijelőlő operátor

Az egyenlőségjel jobb oldalán található értéket eltárolja az egyenlőségjel bal oldalán lévő változóban. Kezdőérték megadásánál használjuk. Nem összetévesztendő a matematikai egyenlőség megadásával ami a dupla egyenlőségjel: ==

 

 

+ összeadás

- kivonás

* szorzás

/ osztás

 

szintaxisok:

eredmény = érték1 + érték2;

eredmény = érték1 - érték2;

eredmény = érték1 * érték2;

eredmény = érték1 / érték2; 

 

Az érték bármilyen állandó vagy változó lehet: int, float, double.

 

példa:

y = y + 3;

x = x - 7;

i = j * 6;

r = r / 5;

 

 

  

% moduló

Amikor egy egész számot elosztunk egy másikkal megmondja a maradék értékét. Nem működik float-tal csak int-tel.

szintaxis:

eredmény = osztandó % osztó

 

példa:

x = 7 % 5;   // x 2-t tartalmaz

x = 9 % 5;   // x 4-t tartalmaz

x = 5 % 5;   // x 0-t tartalmaz

x = 4 % 5;   // x 4-t tartalmaz

 

 

   

cc-by-sa3s.jpg

Szólj hozzá!

Címkék: hivatkozások

2012.07.04.
15:23

Írta: harsanyireka

Hivatkozások 3.: Összehasonlító operátorok

Az if, if-else feltételekkel együtt használjuk őket.

 

 x == y (x egyenlő y-nal)

 x != y (x nem egyenlő y-nal)

 x <  y (x kisebb mint y)  

 x >  y (x nagyobb mint y) 

 x <= y (x kisebb vagy egyenlő y-nal) 

 x >= y (x nagyobb vagy egyenlő y-nal)

 

Szólj hozzá!

Címkék: hivatkozások

2012.07.04.
14:55

Írta: harsanyireka

Hivatkozások 2.: További szintaxisok

; pontosvessző

Az állítások végén használjuk, lezárjuk vele.

int a = 13;
 
 

{ } kapcsos zárójel

A C programnyelv legfőbb eleme, különböző konstrukciókban használjuk. 

Ha van egy nyitó kapcsos zárójel akkor mindig kell hogy legyen egy hozzá tartozó záró is! Az Arduino fejlesztőkörnyezetébe be van építve hogy megmutassa melyik zárójelek tartoznak össze, amikor kijelölöd az egyiket. Az egyszerűség kedvéért, hogy ne felejds el bezárni a zárójelet tedd ki egyből mind a kettőt és utána írj be közé.

Függvényeknél, ciklusoknál és feltételeknél használjuk.

 
 

// megjegyzés

Két darab perjel mögé beírhatsz magadnak megjegyzéseket a programsorba, ezeket a fordítóprogram figyelmen kívűl hagyja, nem tölti fel őket az Atmega chip-re.

Ez a kommentezés csak egy sorra vonatkozik. Ha több sort akarsz írni használhatod a csillagos perjeleket:

/* ide jön

több sor 

megjegyzés */

 
 

#define

Egy állandó értékéhez hozzárendelhetünk nevet. Ez a könyebb átláthatóságot segíti. A fordítóprogram ezeket a háttérben behelyettesíti az állandó értékével. 

szintaxis, nincs a végén pontosvessző:

#define constantName value

példa:

#define ledPin 3

Haszálható helyette a const kulcsszó is állandók megadására.

 
 

#include

Ezzel hívunk meg külső könyvtárakat (library).

Bővebben: Library használata c. alatt.

Így néz ki a programban: 

#include <avr/pgmspace.h>

cc-by-sa3s.jpg

 

 

"Fordítóprogram (angol: compiler): olyan program, amely magasabb számítógépes nyelvi utasításokat dekódol és egy assembly language programot produkál (számítástechnika)" http://meszotar.hu/keres/compiler

Szólj hozzá!

Címkék: hivatkozások

2012.07.04.
13:31

Írta: harsanyireka

Hivatkozások 1.: Vezérlési szerkezetek

setup

void setup(){}

A kód legelején definiáljuk benne a változókat (inicializálás), pin módókat,
könyvtár használatát, stb. Csak egyszer fut le.

void setup() {

    Serial.begin(9600);

    pinMode(buttonPin, INPUT);

  }

 

 

loop 

void loop(){}

A setup után jön, folyamatosan azaz többször lefut, lehetővé teszi hogy
a program változzon és reagáljon.

void loop()

{

  if (digitalRead(buttonPin) == HIGH)

    serialWrite('H');

  else

    serialWrite('L');

   delay(1000);

}

 

 

VEZÉRLÉS

if

Feltétel és összehasonlító operátorok (mint nevük is sugallja, két érték
összehasonlítására szolgálnak).

Megvizsgálja, hogy az egyes feltételek teljesülnek-e, mint  pl. hogy a
bemeneti szám a megadott számérték felett marad-e. Ha a feltétel
teljesül lefut a kód, ha nem akkor átugorja a program. 

if (Változó > 50) {

   // csináld ezt

 }

 

A kapcsos zárójel elhagyható, a következő szintaxisok mind helyesek:

a) 

if (x > 120) digitalWrite(LEDpin, HIGH);

 

b) 

if (x > 120) digitalWrite(LEDpin, HIGH); 

 

c) 

if (x > 120){ digitalWrite(LEDpin, HIGH); } 

 

d)

if (x > 120){

     digitalWrite(LEDpin1, HIGH);

     digitalWrite(LEDpin2, HIGH);

   } 

                             

 

 

if - else

Ha az if-feltétel nem teljesül, akkor az else-feltétel fut le.

Az else folytatódhat egy másik if vizsgálattal, így összetettebb
vizsgálatokat futtathatunk ugyanazon időben végtelen számú
else if-feltételek vizsgálatával.

if (pin5Bemenet < 500) {

    // csináld A-t

  } else if (pin5Bemenet >= 1000) {

    // csináld B-t

  } else {

    // csináld C-t

  } 

 

 

for

Amíg a feltétel igaz, addig folyamatosan ismétlődve futnak le a kapcsos
zárójelben lévő állítások. Az inicializálás csak egyszer fut le, onnantól
mindig az aktuális állapotra vizsgálja meg a program, hogy igaz-e a feltétel,
ha igen elvégzi az érték növelését vagy csökkentését, lefutnak az állítások.
A folyamat akkor ér véget, amikor hamis lesz a feltétel.

Gyakran array-jel együtt használjuk. 

szintakszis: 

for (inicializálás; feltétel; növekedés értéke) {

//statement(s);

}

 

példa:

for (int i=0; i <= 255; i++){

           analogWrite(PWMpin, i);

           delay(10);

       } 

 

 

switch case

Az if-hez hasonlóan különböző feltételek végrehajtásához használjuk.
A switch állítás változó értékeit hasonlítja össze a case állításban
részletezett értékekkel, ha a két érték megyegyezik akkor lefut a case
állításban szereplő kód. Minden case álljtás végét a break kulcsszóval
adjuk meg, enélkül a következő kifejezés végrehajtása következne.

switch (var) {

    case 1:

      //csináld ezt ha a változó  1

      break;

    case 2:

      //csináld ezt ha a változó értéke egyenlő 2-vel

      break;

    default: 

      // ha semelyik nem egyezik, csináld az alapértelmezett 

      // állítást

      // az alapértelmezett állítás opcionális

  }

 

A var a változó értéke, amiket a különböző case állításokhoz hasonlítunk.
A label az érték amivel a változót összehasonlítjuk.

   case címke:

     // utasítások

     break;

  

  

while

Mindaddig folyamatosan fut le, amíg a kerek zárójelben lévő kifejezés hamissá
nem válik. Valaminek változnia kell a vizsgált változóban, különben a folyamat
soha nem ér véget. Ez történhet változó bevezetésével.

szintaxis:

while(kifejezés){

   // utasítás

}

 

példa: 

var = 0;

while(var < 200){

  // 200-szor lefutnak a ciklusban lévő utasítások

  var++;

 

  

do - while

A do a while-hoz hasonlóan működik, de a ciklus végén lévő feltételt vizsgálja,
ezért a do ciklus mindig lefut legalább egyszer.

Szintaxis:

do {

     // utasítás blokk

 } while (feltétel vizsgálata);

 

Példa:

do

{

  delay(50);          // várakozás a szenzorra

  x = readSensors();  // kiolvassa a szenzorból az értéket

} while (x < 100); // amit összehasonlít

 

  

  

break

A do, for, while ciklusokból és a switch állításból való kilépésre használjuk. Példa:

 

for (x = 0; x < 255; x ++)

{

    digitalWrite(PWMpin, x);

    sens = analogRead(sensorPin);  

    if (sens > threshold){      // bail out on sensor detect

       x = 0;

       break;

    }  

    delay(50);

}

  

  

continue

Átugorja az ismétlések lefuttatását a ciklusokban (do, for, while) majd a
feltétel vizsgálatával és a további ismétlésekkel (a példában for ciklus)
folytatja. Példa:

for (x = 0; x < 255; x ++)

{

    if (x > 40 && x < 120){      // ugrik az érték

        continue;

    }

    digitalWrite(PWMpin, x);

    delay(50);

}

 

 

return

Befejezi a függvényt és visszaállítja a függvényből származó értéket a
meghívott értékre, ha kell. Ebben az esetben az érték származhat bármilyen
változóból vagy állandóból.

Szintaxis, mindkettő forma érvényes:

return;

return value;  //value=érték, lehet bármilyen változó vagy állandó

 

Példa: A következő függvény a szenzorból kiolvasott értéket hasonlítja össze a
küszöbértékkel:

int checkSensor(){       

    if (analogRead(0) > 400) {

        return 1;   //érték nagyobb 400-nál, 1-re állítja (be)

    else{

        return 0;   //kisebb, 0-ra állítja az értéket (ki)

    }

  

 

goto

A program lefolyását áthelyezi a programban (általunk elnevezett) cimkével megjelölt ponthoz a következő paranccsal goto labelEzután  visszatér és tovább futtatja a többit.

Szintaxis:

label:

goto label; // a programfutást a címkéhez küldi

 

Példa:

for(byte r = 0; r < 255; r++){

    for(byte g = 255; g > -1; g--){

        for(byte b = 0; b < 255; b++){

            if (analogRead(0) > 250){ goto kisegites;}

// kisegites: általunk elnevezett

            // többi állítás ... 

        }

    }

}

cc-by-sa3s.jpg  

inicializálás: Kezdőérték adást jelent a deklarációban.

deklaráció: Ebben az esetben egyfajta definiálást jelent, közöljük a
programmal hogy az általunk magadott névvel létrehoztunk pl. egy
változót, aminek értékét később definiáljuk.

 

szintaxis: "A számítástechnikában egy programozási nyelv szintaxisa azt a szabályrendszert jelenti, amely meghatározza, hogy az adott nyelvben hogyan lehet az egyes nyelvi elemeket, utasításokat létrehozni. A szintaxis meghatározza a nyelv tágabb értelem vett ábécéjét, a használható szavakat – ez a nyelv kulcsszókészlete –, és megadja a nyelvi elemek felépítési szabályait (amelyeket a nyelv fordítójának szintaktikai elemzője ellenőriz). A nyelv szintaxisának leírására a metanyelvek szolgálnak.http://hu.wikipedia.org/wiki/Szintaxis


 

Szólj hozzá!

Címkék: hivatkozások

2012.01.21.
13:10

Írta: harsanyireka

Alapok: Minimum kód, LED villogtatása

Szükséges minimum kód

 

Arduino sketch írásnál a szükséges minimum a setup() és a loop() függvények meghívása (persze ehhez írhatunk saját függvényeket, de e nélkül nem fog működni a kódunk). 

A setup funkció a program futtatásakor csak egyszer fut le az elején. Itt adhatjuk meg hogy melyik pin-t hogyan akarjuk használni (bemenetként vagy kimenetként). Itt inicializáljuk a pineket (értékadás 0-val). Itt hívjuk meg a soros portot. ÁLLANDÓK

A loop funkció, mint a neve is mutatja, többször fut le egymás után. A bemeneti és kimeneti adatokat itt változtathatjuk. VÁLTOZÓK

Ezek dedikált funkciók, tehát be vannak építve a fejlesztőkörnyezetbe. Void-dal kell őket meghívni:  void setup(),  void loop().  Kapcsos zárójel jelzi a funkcióblokk elejét és végét. Kerek zárójelbe kerülnek a paraméterek. Az utasítások végét pontosvasszővel jelezzük. Ha egysoros kommentet akarsz írni azt dupla perjel // után megteheted, így nem zavar bele a kódba. Ha hosszabb szöveget akarsz akkor azt /* ilyen jelek közé tedd be. */

 

SZINTAXISUK: 

void setup() {
  // ide tedd az állandókat

}

void loop() {
  // ide jönnek a változók - ismétlődik a lefutás
  
}

 

LED villogtatása

 

220 Ohm-os ellenállás, 1db 5mm LED dióda - A LED negatív lába megy a földbe (rövidebb szára), a pozitív (hosszabb) pedig az ellenálláson keresztül a 13 digitális pinbe (ami a beépített LED kibezetése). Az ellenállás azért kell hogy csökkentsük a LEDhez jutó feszültséget. Az átlagos 5mm LEDek kb 20mA-t fogyasztanak és 2,2-3,4V-tal működnek. A gyártó adatlapján lehet megtudni hogy az adott LEDnek mik a paraméterei. Az ellenállások színkódolással rendelkeznek, azt kell róluk leolvasni hogy megtudjuk az értéküket.

Az egyszerűség kedvéért most kalkulátort használunk ehhez, egyébként táblázatból is visszakereshető lenne. Több online, ellenállás kalkulátor van. Némelyik ha rossz sorrendben adod meg a csíkokat, akkor figyelmeztet hogy ez nem szabványos érték, olyankor a fordított sorrend lesz a jó megoldás. Illetve ha megadunk egy értéket és hogy hány színkód legyen az ellenálláson akkor megmutatja a csíkok színét is. Példák:

ExampleCircuit_bb.png

 Arduinó kód:

/*
  Blink
  Turns on an LED on for one second, then off for one 
second, repeatedly. This example code is in the public domain. */ void setup() { // a 13 pint kimenetként használjuk //ha nem kötsz bele LEDet akkor a beépített fog villogni pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // LED bekapcsolása delay(1000); // 1 másodperc várakozás digitalWrite(13, LOW); // LED kikapcsolása delay(1000); //1 másodperc várakozás
}

 

SZINTAXISOK

pinMode(pin, mode);

Itt adjuk meg hogy melyik pin-t mire használjuk.

  • pin: az általad használt pin száma, digitálisokat számmal 0,1,2,, stb.), analógokat nagy A betű mellé írott számmal (A0, A1, stb.) jelőljük.
  • mode: bementként vagy kimenetként akarod használni: INPUT, OUTPUT

 

digitalWrite(pin, value);

Kimenetként használt digitális pin-t tudjuk vele be- és kikapcsolni.

  • pin: az általad használt pin száma, amit a pinMode-nál is megadtál
  • value: értéke lehet ki- (0V) vagy bekapcsolt (5V): LOW, HIGH

 

delay(ms);

Szüntet tart a futtatásban.

  • ms: milisecundumban kell megadni az értékét, 1000ms = 1s (másodperc)

 

FELADAT

Köss be 5db LEDet digitális pinekbe az eddigiek szerint és 1mp-ig világítsanak sorban oda-vissza.

 

forrás: http://arduino.cc/en/Tutorial/BareMinimumhttp://arduino.cc/en/Reference/Setup,

http://arduino.cc/en/Reference/Loophttp://arduino.cc/en/Reference/SemiColon

http://arduino.cc/en/Reference/Braceshttp://arduino.cc/en/Tutorial/Blink

http://arduino.cc/en/Reference/PinModehttp://arduino.cc/en/Reference/DigitalWrite

http://arduino.cc/en/Reference/Delay

 

cc-by-sa3s.jpg

Szólj hozzá!

Címkék: leckék

süti beállítások módosítása