Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  C++ natuke abi märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
striker13
HV Guru
striker13

liitunud: 03.10.2005




sõnum 15.02.2014 14:37:35 C++ natuke abi vasta tsitaadiga

Arduinoga mässan niisama ja oleks vaja programmile väike lisa teha, aga ei oska leida mingit asjalikku õpetust.

Nimelt oleks siis vaja, et programm käivitaks loop osa alles siis, kui sensorValue on väiksem 300-st ja sellel ajal, kui väärtus on rohkem, väljastaks teksti "oota". Ja seda siis ainult käivitamisel. Kui ta hiljem uuesti alla 300 läheb, siis väljastaks ikka väärtust "0".

int sensorValue;

void setup()
{
  Serial.begin(9600);     
}

void loop()
{
  sensorValue = analogRead(0);       
  if(sensorValue < 749) Serial.println("0");
    if(sensorValue > 750 && sensorValue < 800) Serial.println("1");
    if(sensorValue > 801 && sensorValue < 850) Serial.println("2");
    if(sensorValue > 851 && sensorValue < 900) Serial.println("3");
    if(sensorValue > 901 && sensorValue < 925) Serial.println("4");
    if(sensorValue > 926 && sensorValue < 950) Serial.println("5");
    else;
  delay(1000);                       
}


ot:
kood ise ilmselt ei paku erilist silmailu ja annaks ka mugavamalt teha, aga töötab icon_lol.gif

_________________
Sarcasm is just one of the many services I offer to people who ask stupid questions.
Kommentaarid: 95 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 90
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 15.02.2014 14:52:42 vasta tsitaadiga

striker13, tekite üks loop juurde, mida käitataks enne peamist loopi senikaua, kuni väärtus on vähemalt 300?
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
striker13
HV Guru
striker13

liitunud: 03.10.2005




sõnum 15.02.2014 15:59:22 vasta tsitaadiga

milline see välja näeks? Niisama ühe void loop juurde teen, viskab errori
_________________
Sarcasm is just one of the many services I offer to people who ask stupid questions.
Kommentaarid: 95 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 90
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 15.02.2014 16:09:30 vasta tsitaadiga

Hm, tundub et enne tulistasin liiga puusalt.
Määra mingi muutuja alla kirja, et pole veel kordagi 300 saavutatud.
Iga kord loopis kontrollid, et kas see muutuja on tõene või mitte.
Kui pole tõene, kontrollid et kas 300 on saavutatud või mitte.
300 saavutamisel muudad muutuja ära ja edaspidi jooksutad loopi siis nii nagu ise soovid.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
striker13
HV Guru
striker13

liitunud: 03.10.2005




sõnum 15.02.2014 16:22:56 vasta tsitaadiga

ma sellest põhimõttest saan aru, kuidas ta peaks olema, lihtsalt keelt ei oska nii palju, et see "ära tõlkida"
_________________
Sarcasm is just one of the many services I offer to people who ask stupid questions.
Kommentaarid: 95 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 90
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 15.02.2014 17:04:36 vasta tsitaadiga

Lisa üks boolean tüüpi muutuja koodi algusesse, vaikeväärtusega false.
Loop() algusesse teed ühe if'i, kus kontrollid, et kas see muutuja (boolean) on true või false.

Kui on false, kontrolli et kas sensorValue on vähemalt 300.
Kui sensorValue on vähemalt 300, määra antud muutuja (boolean) väärtuseks true, kutsu välja delay() ja välju funktsioonist (return).

Peale if'i lihtsalt teed oma tavapärast tegevust nagu praegugi.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
striker13
HV Guru
striker13

liitunud: 03.10.2005




sõnum 15.02.2014 17:36:56 vasta tsitaadiga

Proovisin mis ma proovisin, aga ei tule välja. Nii palju on, et ei väljasta neid 1,2,3 jne kuni sensorValue on rohkem kui 180, aga seda "oota" ei kirjuta ja läheb koguaeg algusesse tagasi.

int sensorValue;
bool bvalue2(false);

void setup()
{
  Serial.begin(9600);     
}

void loop()
{
sensorValue = analogRead(0);     
Serial.println(sensorValue, DEC);
  if(bool bvalue2 = false) Serial.println("Oota");{
    if(sensorValue > 180) bool bvalue2 = true;
  else

      if(sensorValue < 749) Serial.println("0");
      if(sensorValue > 750 && sensorValue < 800) Serial.println("1");
      if(sensorValue > 801 && sensorValue < 850) Serial.println("2");
      if(sensorValue > 851 && sensorValue < 900) Serial.println("3");
      if(sensorValue > 901 && sensorValue < 925) Serial.println("4");
      if(sensorValue > 926 && sensorValue < 950) Serial.println("5");
      else;
  delay(1000); 
  }
}

_________________
Sarcasm is just one of the many services I offer to people who ask stupid questions.
Kommentaarid: 95 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 90
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 15.02.2014 19:02:26 vasta tsitaadiga

striker13, on näha, et sul pole aimugi programmeerimiskeele süntaksist.
Soovitan alustada siit: http://arduino.cc/en/Tutorial/HomePage
Programmeerimiskeel on seal C++, soovitan ka selle kohta eraldi õpetusi uurida.


viimati muutis mikk36 15.02.2014 19:05:14, muudetud 1 kord
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Renka
HV Guru
Renka

liitunud: 01.04.2002




sõnum 15.02.2014 19:13:26 vasta tsitaadiga

Miskit sellist ehk.


If / else kasutamine ja süntaks üldisemalt tee omale selgeks icon_smile.gif Statement ei saa olla tingimuse ja bloki alguse vahel. Lisaks on olemas ka else if, et asju lihtsustada ja mitte liigselt konditsioone käivitada.

c++:
  1. int sensorValue;
  2. bool bvalue2(false);
  3.  
  4. void setup()
  5. {
  6.   Serial.begin(9600);     
  7. }
  8.  
  9. void loop()
  10. {
  11.   sensorValue = analogRead(0);     
  12.   Serial.println(sensorValue, DEC);
  13.   if (bool bvalue2 = false) {
  14.     Serial.println("Oota");
  15.     if (sensorValue > 180) bool bvalue2 = true;
  16.   } else {
  17.       if (sensorValue < 749) Serial.println("0");
  18.       else if (sensorValue < 800) Serial.println("1");
  19.       else if (sensorValue < 850) Serial.println("2");
  20.       else if (sensorValue < 900) Serial.println("3");
  21.       else if (sensorValue < 925) Serial.println("4");
  22.       else if (sensorValue < 950) Serial.println("5");
  23.       else;
  24.   }
  25.   delay(1000)
  26. }



EDIT: oh kurat seal koodis on ju nii palju jama veel icon_lol.gif Ole hea kirjuta korrektse süntaksiga kood valmis ja siis vaatame edasi kui asi ikka ei tööta.

Mida näiteks see rida tegema peaks? Tõenäoliselt hoopis miskit muud kui hetkel teeb.
c++:
  1. if (bool bvalue2 = false)

_________________
There is no place like 127.0.0.1
Kommentaarid: 71 loe/lisa Kasutajad arvavad:  :: 2 :: 1 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
striker13
HV Guru
striker13

liitunud: 03.10.2005




sõnum 15.02.2014 19:18:39 vasta tsitaadiga

Renka kirjutas:
EDIT: oh kurat seal koodis on ju nii palju jama veel icon_lol.gif Ole hea kirjuta korrektse süntaksiga kood valmis ja siis vaatame edasi kui asi ikka ei tööta.

Mida näiteks see rida tegema peaks? Tõenäoliselt hoopis miskit muud kui hetkel teeb.
c++:
  1. if (bool bvalue2 = false)


Ma panin selle mikk36 lause peale, et
tsitaat:
loop() algusesse teed ühe if'i, kus kontrollid, et kas see muutuja (boolean) on true või false.


Ei tahagi üldse väita, et ma mingilgi määral seda asja oskan, kõik mis kirja on pandud, on mingite erinevate näidete pealt leiutades, ülesehitusest ei saa väga aru.

ot:
Enamused õpetused hakkavad ka stiilis, et kirjuta number 1 ja oled väga tubli. Järgmine õpetus on 100 rida koodi kus midagi ei seletada, suht keeruline aru saada ja ka algtõdesid selgeks teha

_________________
Sarcasm is just one of the many services I offer to people who ask stupid questions.
Kommentaarid: 95 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 90
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 15.02.2014 19:22:55 vasta tsitaadiga

striker13, tee ja katseta neid Arduino harjutusi seal järjest läbi ja mõtle iga rea koodi peale, et mida see teeb.
Ei oma küll ise Arduinot ega isegi analoogi, aga kiirel pilgul õpetustest üle käies tunduvad hästi kirjeldatud ja dokumenteeritud olema.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
striker13
HV Guru
striker13

liitunud: 03.10.2005




sõnum 15.02.2014 20:24:11 vasta tsitaadiga

Kas ühe if lause sees saab teine if lause ka olla?

.....
if(kontroll = 1) { Serial.println("Oota"); if(sensorValue < 175) { kontroll = 2; } }
else {
.....

Nagu aru saan, siis praegu kirjas nii, et alguses defineeritud kontroll = 1, nüüd esimese if lausega kontrollib, kas see on 1. Kui on, siis kirjutab "Oota" JA kontrollib järgmise if lausega kas sensorValue on väiksem kui 175 ja kui on, muudab kontroll = 2-ks. Ehk et kui ta järgmise tiiruga uuesti tuleb kontrollima, peaks nüüd kontroll = 2 ja minema automaatselt üle else lause osa peale. Pärast else-i tuleks siis need väärtused, mille puhul kirjutab kas 1,2 jne, aga millise if lausega see else ennast praegusel juhul seob üldse?

_________________
Sarcasm is just one of the many services I offer to people who ask stupid questions.
Kommentaarid: 95 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 90
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 15.02.2014 20:40:05 vasta tsitaadiga

striker13, esimene asi: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

Teiseks:
Kirjuta lahti oma koodirida rohkem:
c++:
  1. if(kontroll == 1) {
  2.   Serial.println("Oota");
  3.   if(sensorValue < 175) {
  4.     kontroll = 2;
  5.   }
  6. }

Ära aja määramist ja võrdlust sassi omavahel (= vs ==).

Kolmandaks: programmeeritakse reeglina inglise keeles, see tähendab et ka kõik muutujate nimed kirjutatakse inglise keeles.
See tagab ka selle, et iga võõramaalane saab sinu koodist aru, kui sa talle seda näitad.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
striker13
HV Guru
striker13

liitunud: 03.10.2005




sõnum 17.04.2015 21:29:12 vasta tsitaadiga

aga tänud, tundub, et nüüd töötab icon_biggrin.gif sai päris palju keelest endast ka selgemaks

edit:

Ei hakka uut teemat tegema, aga küsiks veel natuke abi.

Praegu kood:

Spoiler Spoiler Spoiler


Soov oleks, et kui teed pikkuse valiku menüüs, siis ta määraks muutuja pikkus-e väärtuse ja kasutaks seda väärtust stepperi liigutamiseks.
Kas nii on üldse õige määrata liikumise pikkust: myStepper.step(pikkus);

_________________
Sarcasm is just one of the many services I offer to people who ask stupid questions.
Kommentaarid: 95 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 90
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  C++ natuke abi
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.