Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Arduino - pomoc - kod

[es] :: Elektronika :: Mikrokontroleri :: Arduino - pomoc - kod

[ Pregleda: 1463 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

GolubBgd

Član broj: 345809
Poruke: 2
*.dynamic.isp.telekom.rs.



Profil

icon Arduino - pomoc - kod03.12.2020. u 13:51 - pre 41 meseci
Pozdrav svima, ako napisem da vec tri dana pokusavam da resim jedan problem bice vam jasno da nemam pojma... O cemu je rec, ne mogu da nateram da mi radi parce koda koje ce beleziti najmanju temperauru. Imam kod koji sa temp. senzora TMP36 iscitava temp i ispisuje je i to je ok, radi... Ono sto ja zelim jeste da i ispisuje / pamtiti najmanju temperauru tog dana/odnosno dok je upaljen.

Evo teksta / simulacije koji sam sebi napravio da bih skapirao problem ali mi ne ide a vama ce pojasniti sta zelim.

temp – Temperatura koju ocitava senzor
tempState – Trenutna ocitana temperatura
lasttempState = 99

tempState = temp; -------- Inicijalnoo citanje temperature npr. 24

if (lasttempState > tempState);-------- prvi krug - lasttempState je 99 a tepmeratura je 24 (99>=24)
lasttempState = tempState; ------------ uslov je ispunjen i lasttempState postaje 24
Serial.println("Min T: "); ----------------- ispisuje na displeju:
Serial.println(lasttempState); ----------- Min T: 24

if (lasttempState > tempState);-------- drugi krug - ocitavanja tepmeratura je i dalje 24 (24 = 24 )
lasttempState = tempState; ------------ lasttempState ostaje 24 jer uslov nije ispunjen
Serial.println("Min T: "); ----------------- ispisuje na displeju:
Serial.println(lasttempState); ----------- Min T: 24

if (lasttempState > tempState); --------- u trecem krugu ocitavanja - tepmeratura je porasla na 26
lasttempState = tempState;-------------- lasttempState ostaje 24 posto je 24 manje od 26 i uslov nije ispunjen
Serial.println("Min T: ");------------------ ispisuje na displeju:
Serial.println(lasttempState);------------ Min T: 24

if (lasttempState > tempState);-------- u cetvrti krugu ocitavanja - temperatura je pala i sada je 22 (24 > 22)
lasttempState = tempState;------------- uslov je ispunjen i lasttempState postaje 22
Serial.println("Min T: ");----------------- ispisuje na displeju:
Serial.println(lasttempState); ----------- Min T: 22
ITD....

Ma koliko ovo meni delovalo logicno i ok "Min T" je uvek jednaka trenutnoj i ja ne znam da resim ovo...
Evo i koda:

Code:

int sensePin = A0;  //This is the Arduino Pin that will read the sensor output
int sensorInput;    //The variable we will use to store the sensor input
double temp;        //The variable we will use to store temperature in degrees.

int lasttempState =0;
int tempState = 0;

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

void loop() {
  
  sensorInput = analogRead(A0);    //read the analog sensor and store it
  temp = (double)sensorInput / 1024;       //find percentage of input reading
  temp = temp * 5;                 //multiply by 5V to get voltage
  temp = temp - 0.5;               //Subtract the offset
  temp = temp * 100;               //Convert to degrees

  Serial.print("Current Temperature: ");
  Serial.println(temp);

tempState = temp;

if (lasttempState > tempState);
 lasttempState = tempState; 
Serial.print("Min T: "); 
Serial.println(lasttempState);
  delay(1000);
}


Unapred se zahvaljujem svima na pomoci
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Arduino - pomoc - kod03.12.2020. u 14:03 - pre 41 meseci
Code:
if (lasttempState > tempState);
 lasttempState = tempState; 


Iza if si stavio ;
efektivno, rekao si "ako je lasttempState > tempState onda ništa"

treba
Code:
if (lasttempState > tempState)
 lasttempState = tempState; 
 
Odgovor na temu

GolubBgd

Član broj: 345809
Poruke: 2
*.dynamic.isp.telekom.rs.



Profil

icon Re: Arduino - pomoc - kod03.12.2020. u 14:28 - pre 41 meseci
Ali bukvalno tri dana zbog ; ali to je cena neznanja.... Radi sada kako sam zamislio, puno ti hvala!
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Arduino - pomoc - kod03.12.2020. u 15:15 - pre 41 meseci
Obrati pažnju da u C jeziku znak ";" ima istu funkciju kao tačka u prirodnom jeziku, odnosno on završava "misao".
Isto kao što se posle IF konstrukcije očekuje komanda ili blok, tako se i posle while, for i slično očekuje komanda, a ne kraj misli.
U nekim drugim jezicima čak bi se i podigla sintaksna greška kod suvišnog znaka ";"

Na primer, u PL/SQL sledeća konstrukcija bi javila grešku:
BEGIN;
END;

U tom jeziku, ako se baš želi da se stavi "prazna" komanda, mora to da se učini eksplicitno:
BEGIN
NULL;
END;

Drugim rečima, shvati da je u C "if" nešto kao početak bloka ({), a ; kao kraj bloka (}), pa je if(uslov); ekvivalentno sa {}, tj predstavlja "nemoj ništa da uradiš"
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Arduino - pomoc - kod03.12.2020. u 17:29 - pre 41 meseci
Da bi ti bilo lakše, a možda i logičnije koristi vitičaste zagrade makar posle if imaš samo jednu funkciju (ko zna možda ti padne na pamet da dopišeš još koju):

Code:
if (lasttempState > tempState)
{
  lasttempState = tempState; 
}

--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

Ivan 89

Član broj: 264550
Poruke: 320
*.dynamic.isp.telekom.rs.



+6 Profil

icon Re: Arduino - pomoc - kod09.01.2021. u 19:12 - pre 39 meseci
Pozdrav svima, zapeo sam oko jednog arduino koda i treba mi pomoć da ga rešim.
Hteo bih da povežem sim800 i čitac sd kartice na arduino uno pa sam zapeo.
Moja zamisao je bila da palim i gasim relej putem sms poruka a sim kartica da belezi vreme kad se relej uključio ili isključio.
Medjutim kad učitam kod u arduino javi mi se problem to jest blokira mi sim800 i čitač sd kartice.
A kad kod razdvojim na dva dela i učitam jedan ili drugi deo tad i sim800 i čitač rade normalno.
Na kodu sam samo sad trenutno odvojio snimanje na sd kartici da beleži svaki minut datum i vreme samo radi probe radi lakšeg razdvajanja koda.

Kod sam koristio ovaj:
Code:
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"

#include <SoftwareSerial.h>
SoftwareSerial mySerial(3,2); 

RTC_DS1307 RTC;
File dataFile;
DateTime now;

const int chipSelect = 10; 

char incomingByte; 
String inputString;

int relay = 9; 

void setup() 
{
      pinMode(relay, OUTPUT);
      digitalWrite(relay, LOW); 
      Serial.begin(9600);
      mySerial.begin(9600); 

      Wire.begin();
      RTC.begin();
      if (! RTC.isrunning()) 
     {
      RTC.adjust(DateTime(__DATE__, __TIME__));
     }
      if (!SD.begin(chipSelect)) {
      return;
     }
      now = RTC.now();
      dataFile = SD.open("datalog.txt", FILE_WRITE);
      dataFile.println("  Vreme         Datum");
      dataFile.close();
      
     while(!mySerial.available()){
        mySerial.println("AT");
        delay(1000); 
        Serial.println("Connecting...");
        }
      Serial.println("Connected!");  
      mySerial.println("AT+CMGF=1");  
      delay(1000);  
      mySerial.println("AT+CNMI=1,2,0,0,0"); 
      delay(1000);
      mySerial.println("AT+CMGL=\"REC UNREAD\""); 
     }
     
void loop()
{  

  now = RTC.now();
      float sec = now.second();

  if(sec == 0){
           File dataFile = SD.open("datalog.txt", FILE_WRITE);
                dataFile.print(" ");
                dataFile.print(now.hour(),DEC);
                dataFile.print(":");
                dataFile.print(now.minute(),DEC);
                dataFile.print(":");
                dataFile.print(now.second(),DEC);
                dataFile.print("       ");
                dataFile.print(now.year(),DEC);
                dataFile.print('/');
                dataFile.print(now.month(),DEC);
                dataFile.print('/');
                dataFile.print(now.day(),DEC);
                dataFile.close();
                delay(1000);
        }       
  if(mySerial.available()){
      delay(100);

      while(mySerial.available()){
        incomingByte = mySerial.read();
        inputString += incomingByte; 
        }
        delay(10);      
        Serial.println(inputString);
        inputString.toUpperCase(); 

        //turn RELAY ON or OFF
        if (inputString.indexOf("ON") > -1){ 
          digitalWrite(relay, HIGH);
          }
         if (inputString.indexOf("OFF") > -1){     
          digitalWrite(relay, LOW);
          }          

        delay(50);

        if (inputString.indexOf("OK") == -1){     
        mySerial.println("AT+CMGDA=\"DEL ALL\"");

        delay(1000);}

        inputString = "";
  }


Kod verovatno ima grešaka koje nisam primetio.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Arduino - pomoc - kod10.01.2021. u 07:57 - pre 39 meseci
Zašto ti je promenljiva sec tipa float?
Pošto ona može da ima vrednost između 0 i 59, trebala bi da ti bude tipa byte.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

Ivan 89

Član broj: 264550
Poruke: 320
*.dynamic.isp.telekom.rs.



+6 Profil

icon Re: Arduino - pomoc - kod10.01.2021. u 17:45 - pre 39 meseci
To mi je promaklo kao i datafile.println pa da svaki put lepo piše u novi red a ne sve u jedan.
Ali problem nisam još rešio kao da su ta dva uredjaja u sukobu pa ili radi jedan ili drugi neće oba.
 
Odgovor na temu

beogard
Goran Kalajdžić
Vlasnik
Beogard security
Beograd (Srbija)

Član broj: 333221
Poruke: 33
*.dynamic.isp.telekom.rs.

Sajt: www.beogard.rs


+1 Profil

icon Re: Arduino - pomoc - kod22.03.2021. u 20:56 - pre 37 meseci
Poštovani prijatelji, kako da na dvorednom displayu napisem dve vrste podataka u istom redu.
Na primer imam varijablu:
String mojString = "Senzor cita: ";
i varijablu:
int vrednost;
Kada napisem:
lcd.print(vrednost);
on ispise vrednosti sa senzora u tom zadatom redu.
Kada napisem:
lcd.print(mojString);
on ispise; Senzor cita: u tom redu.
Ali kako da postavim da prvo ispise ovo Senzor cita: pa onda vrednost sa senzora?
Ja sam postavio ovako i neće da mi prikaže na displayu u istom redu i tekst i vrednost sa senzora a, ima mesta jer je 16 karaktera:

Serial.println(mojString),(vrednost); i NEĆE, prikazuje samo ovaj tekst prve varijable, odnosno u prvoj zagradi.
Probao sam i ovako: Serial.println(mojString, vrednost); Nisam uspeo! :(
Molim za pomoć?
14111982
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Arduino - pomoc - kod22.03.2021. u 21:03 - pre 37 meseci
https://www.arduino.cc/referen...tring/operators/concatenation/
https://www.arduino.cc/referen...ables/data-types/stringobject/

Serial.println(mojString + String(vrednost))

Uzgred, nikada nisam radio sa Arduinom, ovo je samo obično programiranje...
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Arduino - pomoc - kod22.03.2021. u 22:49 - pre 37 meseci
Code:
Serial.print (mojString);
Sreial.println (vrednost, DEC);

--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

beogard
Goran Kalajdžić
Vlasnik
Beogard security
Beograd (Srbija)

Član broj: 333221
Poruke: 33
*.dynamic.isp.telekom.rs.

Sajt: www.beogard.rs


+1 Profil

icon Re: Arduino - pomoc - kod23.03.2021. u 10:07 - pre 37 meseci
#djoka_l
Dovoljno je bilo napisati ovako, * lcd.print(mojString+(vrednost)); * ne znam zašto ovo + string?* Serial.println(mojString + String(vrednost)) * ali, dobro. Proradilo je.
#ZAS011
Serial.print (mojString);
Serial.println (vrednost, DEC); -Šta znači ovo DEC? radi i ovo.
Hvala Svima!
14111982
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Arduino - pomoc - kod23.03.2021. u 10:25 - pre 37 meseci
Evo objasniću ti obe nedoumice:

mojString+(vrednost) i mojString + String(vrednost) :

Operacija sabiranja, odnosno operator "+" je u programskom jeziku C++ "preopterećen" (operator overloading). To znači da se isti operator koristi za "sabiranje" različitih tipova podataka.
Kada se napiše 1+2, rezultat je 3. Kada se napiše "1"+"2", rezultat je string "12"
Time što sam napisao String(vrednost) uradio sam EKSPLICITNU konverziju u tip String.
Na primer, recimo da je mojString dobio vrednost "1", a da je vrednost varijable vrednost=10.
Tada nije jasna naredba "1" + 10. Da li string jedan treba pretvoriti u broj jedan i dobiti rezultat 11, ili vrednost 10 pretvoriti u string "10" i dobiti rezultat "110".
Da bismo bili sigurni, UVEK je poželjno staviti EKSPLICITNU konverziju u željeni tip, a ne da kompajler pretpostavlja šta je programer želeo da kaže.

Serial.println (vrednost, DEC):

Parametar DEC kaže da se želi prikaz varijable vrednost u dekadnom brojnom sistemu. Recimo da je vrednost=10
tada bi prikaz komande Serial.println (vrednost, HEX) bio A (broj 10 u heksadekadnom brojnom sistemu), Serial.println (vrednost, DEC) bi dalo 10, a Serial.println (vrednost, BIN) bi dalo 1010 (broj 10 u binarnom brojnom sistemu).

Opet je stvar sa EKSPLICITNOM konverzijom. Binarni zapis broja 10 treba prikazati kao string, ali u kojoj brojnoj osnovi?
Možda će tekuća verzija kompajlera to shvatiti kao DEC, ali će sledeća verzija možda promeniti ponašanje na HEX.
Zato ne treba ostavljati neduomicu kompajleru.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
185.128.26.212



+1064 Profil

icon Re: Arduino - pomoc - kod23.03.2021. u 10:33 - pre 37 meseci
string + const char* ima overloadovano.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Arduino - pomoc - kod23.03.2021. u 11:22 - pre 37 meseci
Citat:
beogard:
#djoka_l
Dovoljno je bilo napisati ovako, * lcd.print(mojString+(vrednost)); * ne znam zašto ovo + string?* Serial.println(mojString + String(vrednost)) * ali, dobro. Proradilo je.
#ZAS011
Serial.print (mojString);
Serial.println (vrednost, DEC); -Šta znači ovo DEC? radi i ovo.
Hvala Svima!

Arduino IDE: Help/Reference
Tu sve možeš da nađeš i sve lepo piše. Tu ćeš saznati i šta znači to DEC.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Arduino - pomoc - kod

[ Pregleda: 1463 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.