Montaa¾      Teegid      Ülesanded      
Lühem ja lihtsam kood Vaatame mõned näited, kuidas saab koodikirjutamist lihtsustada, et see oleks lühem ja ülevaatlikum. println(" kasti"); delay(100); digitalWrite(ledInfo, LOW);}lastStateInfo = p_info; delay(50);}if (r1 == 1){c[1]++;}if (r2 == 1){c[1]--;}if (r3 == 1){pr("Loendur " + c[1] + " Kasti");}if (i1 + i2 + i3 == 3){c[1] = 0; pr("loendur on nullitud");}Lühem ja lihtsam kood

Programmeerimine

C++ keele põhjal, praktiliste harjutustega

Lühem ja lihtsam kood

Vaatame mõned näited, kuidas saab koodikirjutamist lihtsustada, et see oleks lühem ja ülevaatlikum.

Lühem ja lihtsam kood

if (r4 == 1 and lasto4 == 0){
if (r4){

 

// teegi tasandil juba eelmist i4 väärtust võrreldud
// ei ole vaja koodis enam definerida ega võrrelda

 

if (o1 == 0 and o2 == 0 and o3 == 0){
if (!(o1 + o2 + o3)){

 

// kui mitu muutujat peavad kõik olema nullis, siis peab ka 
// nende summa olema null, ehk ei ole midagi muud kui null

 

EnnePärast

//X-telg
if (r1 == 1 and lasto1 == 0){
  o1 = !o1;
    if (o1 and o4 == 0)
      print("X-telg Liigub edasi");
    else if (o4 == 0)
     print("X-telg ei liigu");


if (r1 == 1 and lasto1 == 0 and o4)
  if (o1){
    print("X-telg liigub tagasi");
}
  else if (o4 == 1){
    print("X-telg ei liigu");
}

//X-telg

if (r1){// kui mootor 1 nuppu vajutatakse

    o1 = !o1; // muuda re¾iim
    if (o1 & !o4)

        print("Mootor liigub edasi");  
    else if (o1)
        print("Mootor liigub tagasi");

    else

        print("Mootor seisab");

}

// dubleerib "X-telg ei liigu" lauset// lihtsustatud if ... else struktuur, ei dubleeri

 

EnnePärast

//X-telg

if (r1){// kui mootor 1 nuppu vajutatakse

    o1 = !o1; // muuda re¾iim
    if (o1 & !o4)

        print("Mootor liigub edasi");  
    else if (o1)
        print("Mootor liigub tagasi");

    else

        print("Mootor seisab");

}

//X-telg

if (r1){// kui mootor 1 nuppu vajutatakse

    o1 = !o1; // muuda re¾iim
    if (o1)

        print("Mootor liigub", !o4 ? "edasi":"tagasi");    

    else

        print("Mootor seisab");

}

// kasutab if ... else tingimuslauset// lühem tingimusoperaator ehk ternaarne operaator

 

Kui väljundid on 0 või 1 väärtusega, siis on need ka matemaatilistes tehetes kasutatavad, sh. liidetavad

EnnePärast

int loendur1 = 0;
// defineerib eelnevalt lisamuutuja

 

loendur1 = latch1+latch2+latch3;
if (loendur1 >= 2){// kui summa on üle 1

 

if ((o1+o2+o3) > 1){// summa üle 1

// kasutab eraldi int muutujat, liidab summa// lihtne liitmistehe tingimuslause sees

 

Enamasti on sulud täieliku kindlusega liitmisjärjekorda määravad, igaks juhuks tasub üle vaadata ka tingimuslausetes kasutatavate operaatorite prioriteetide järjekorra reeglid

 

Teegi tasandil on kõigi sisendite ja väljundite esmaseks andmetüübiks int, mis on omakorda paigutatud massiivi (ingl. array) ja neid saab kasutada indeksipõhiselt - näiteks esimene sisend on i[1], teine i[2] jne

Sarnaselt on defineeritud väljundid o[1], o[2] jne. tõususerv r[1], r[2] ning langev serv f[1], f[2] jne

Pikem, kordustegaLühem, for tsükliga

if (r[1]){

    o[1] = !o[1];

}

if (r[2]){

    o[2] = !o[2];

}

if (r[3]){

    o[3] = !o[3];

}

if (r[4]){

    o[4] = !o[4];

}

for (int a = 1; a < 5; a++){

    if (r[a]){

        o[a] = !o[a];

   }

}

// iga sarnane koodiplokk on korratud// for tsüklis dünaamiliselt

 

Teegi tasandil on kõigi sisendite ja väljundite esmaseks andmetüübiks int, mis on omakorda paigutatud massiivi (ingl. array) ja neid saab kasutada indeksipõhiselt - näiteks esimene sisend on i[1], teine i[2] jne

Sarnaselt on defineeritud väljundid o[1], o[2] jne. tõususerv r[1], r[2] ning langev serv f[1], f[2] jne

Loogeliste sulgudega, if lausegaTernaarse operaatoriga

for (int a = 1; a < 5; a++){

    if (r[a]){

        o[a] = !o[a];

   }

}

 

for (int a = 1; a < 5; a++)
    o[a] = r[a] ? !o[a] : o[a];

// kasutab if tingimust ja loogelisi sulge

// lühivariant, ternaarse operaatoriga

// nimetatud ka küsimärgi-kooloni operaatoriks

 

Eraldi liitmineTingimuslause sees

  int koik1 = o1 + o2 + o3;


  if (r4 == 1){
    if (koik1 >= 2){

  if (r4 == 1){
    if ((o1 + o2 + o3) // liidab kokku
        > 1){// kui lampidest vähemalt 2 on
Kasutab eraldi muutujat summa jaoksEraldi ridadel, tingimuslauses ja kommentaaridega

 

Geneeriline lahendus on oluliselt pikem, ega täida päris täpselt ülesandepüstituses kirjeldatut

GeneerilineTeegiga

const int btnPlus = 8;      // Nupp +1
const int btnMinus = 7;     // Nupp -1
const int btnInfo = A6;     // Nupp Info (Analoogsisend)

const int ledPlus = 12;   
const int ledMinus = 11; 
const int ledInfo = 10; 

int kogus = 0;              // Tomatikastide arv

// Nuppude eelmised olekud (et lugeda vajutust, mitte hoidmist)
bool lastStatePlus = false;
bool lastStateMinus = false;
bool lastStateInfo = false;

void setup(){
  // Seadistame jadaühenduse
  Serial.begin(9600); 

  // Seadistame sisendid ja väljundid
  pinMode(btnPlus, INPUT);
  pinMode(btnMinus, INPUT);
  // A6 on alati INPUT, pinMode pole kohustuslik, aga hea tava
  
  pinMode(ledPlus, OUTPUT);
  pinMode(ledMinus, OUTPUT);
  pinMode(ledInfo, OUTPUT);
  
  Serial.println("--- Tomatiloendur Valmis ---");
}

void loop(){
  // 1. Loeme nuppude hetkeolekud
  // A6 puhul eeldame, et nupp annab vajutades tugeva signaali (>500)
  bool p_plus = digitalRead(btnPlus);
  bool p_minus = digitalRead(btnMinus);
  bool p_info = analogRead(btnInfo) > 500; 

  // 2. NULLIMINE (Kõik kolm nuppu korraga)
  if (p_plus && p_minus && p_info){
    kogus = 0;
    digitalWrite(ledInfo, HIGH);
    Serial.println("Loendur on nullitud");
    
    // Ootame, kuni nupud vabastatakse, et vältida kohest uuesti lugemist
    while(digitalRead(btnPlus) || digitalRead(btnMinus) || analogRead(btnInfo) > 500){delay(10);}
    digitalWrite(ledInfo, LOW);
    return; // Alustame loopi otsast
 }

  // 3. Loendur +1
  if (p_plus && !lastStatePlus){// Tuvastame vajutuse hetke (rising edge)
    kogus++;
    digitalWrite(ledPlus, HIGH); // LED korraks põlema
    delay(100);                  // Väike viide ja debounce
    digitalWrite(ledPlus, LOW);
 }
  lastStatePlus = p_plus; // Salvestame oleku

  // 4. Loendur -1
  if (p_minus && !lastStateMinus){
    if (kogus > 0) kogus--; // Väldime negatiivseid kaste
    digitalWrite(ledMinus, HIGH);
    delay(100);
    digitalWrite(ledMinus, LOW);
 }
  lastStateMinus = p_minus;

  // 5. Info kuvamine (Serial Monitor)
  if (p_info && !lastStateInfo){
    digitalWrite(ledInfo, HIGH);
    // Kompaktne väljastus ühel real
    Serial.print("Loendur "); Serial.print(kogus); Serial.println(" kasti");
    delay(100);
    digitalWrite(ledInfo, LOW);
 }
  lastStateInfo = p_info;

  delay(50); 
}

  if (r1 == 1){
     c[1]++;
 }
  if (r2 == 1){
     c[1]--;
  }
  if (r3 == 1){
    pr("Loendur " + c[1] + " Kasti");
 }
  if (i1 + i2 + i3 == 3){
    c[1] = 0;
    pr("loendur on nullitud");
 }
  

 

Monteeri lihtsalt ja kiiresti

Riistvara montaa¾ on jaotatud etappideks ja toetatud õppevideodega. Vaata lähemalt.

 

Tarkvaratugi

Loe riistvaralist portide lugemist ja muutujate defineerimist toetava tarkvarateegi kohta

C++ on masinate keel
Maailmas kõige enam kasutusel olev seadmete programmeerimiseks kasutatav keel on C++ mis võimaldab väikestel kiipidel ökonoomselt programmiloogikat lahendada ja teha ka suuri kõrgkeelele omaseid andmetöötlusi. 

Populaarne Nano standard
Laiendusplaadi nanoTronic disainimisel on aluseks võetud Arduino Nano standard, mis võimaldab teha nii automatiseerimist, vanade asjade digitaliseerimist kui ka luua akutoitel töötavaid ökonoomseid mobiilsid seadmeid. 

Ülesanded samm-sammult
Selleks, et C++ paremini tundma õppida on loodud ülesannetekogu, milles saab alguses teha lihtsamaid, samm-sammult keele võimalusi tutvustavaid harjutusi ja siirduda siis järjest edasi jõukohaste väljakutsetega.

Projekti fookusest
Projekt nanoTronic on loodud eelkõige hariduslikel eesmärkidel, et edendada mehhatroonika erialal programmeerimise süvendatud õpet, parema struktuuri ja loogikakasutusega skriptide kirjutamist. 

Veebilehe disain ja CMS

Lühem ja lihtsam kood

if (r4 == 1 and lasto4 == 0){if (r4){// teegi tasandil juba eelmist i4 väärtust võrreldud // ei ole vaja koodis enam definerida ega võrrelda if (o1 == 0 and o2 == 0 and o3 == 0){if (!(o1 + o2 + o3)){// kui mitu muutujat peavad kõik olema nullis, siis peab ka // nende summa olema null, ehk ei ole midagi muud kui null Enne Pärast //X-telg if (r1 == 1 and lasto1 == 0){o1 = !o1; if (o1 and o4 == 0) print("X-telg Liigub edasi"); else if (o4 == 0) print("X-telg ei liigu");}if (r1 == 1 and lasto1 == 0 and o4) if (o1){print("X-telg liigub tagasi");}else if (o4 == 1){print("X-telg ei liigu");}//X-telg if (r1){// kui mootor 1 nuppu vajutatakse o1 = !o1; // muuda re¾iim if (o1 & !o4) print("Mootor liigub edasi"); else if (o1) print("Mootor liigub tagasi"); else print("Mootor seisab");}// dubleerib "X-telg ei liigu" lauset // lihtsustatud if Vaatame mõned näited, kuidas saab koodikirjutamist lihtsustada, et see oleks lühem ja ülevaatlikum.

Lühem ja lihtsam kood

nanotronic.eu © 2025 nanoTronic » Populaarne standard ja suur jõudlus