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 

Arduino začetne težave
Pojdi na stran Prejšnja  1, 2, 3, 4, 5, 6, 7, 8, 9, 10
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Pon Nov 02, 2015 5:54 pm    Naslov sporočila:  Re: Branje SMS Odgovori s citatom

Poskusi takole:

(SPREMENJENO: Sem preuredil string smstexti v veljavno obliko in dodal \0 znake, da bo lepo izpisalo. Posledično so se spremenile dolžine imen izhodov, lokacije ukaznih/statusnih bitov, pogoji v if stavkih, ... zato sem v tem prispevku kar prejšnji program povozil.)

Koda:

#include "SIM900.h"
#include "sms.h"


SMSGSM sms;

boolean started=false;
 char phone_num[20]; // array for the phone number string
char sms_text[100]; // array for the SMS text string

char smstexti[72]= {
'M', 'o', 'j', 'D', 'o', 'm', ':', '\0', // 8 bitov = ukazna beseda (zaenkrat nima funkcije)
'i', 'z', 'h', 'o', 'd', '0', 'x', '\0',   // tukaj se začnejo imena izhodov
'i', 'z', 'h', 'o', 'd', '1', 'x', '\0',  // 8 bitov - predzadnji bit je status/ukaz
'i', 'z', 'h', 'o', 'd', '2', 'x', '\0',  // 8 bitov - zadnji bit je nova vrstica, da je pregledno
'i', 'z', 'h', 'o', 'd', '3', 'x', '\0',  // ime izhoda ima 6 bitov
'i', 'z', 'h', 'o', 'd', '4', 'x', '\0',  // predzadnji bit pa je 0 za izklop, x za ohrani in 1 za vklop
'i', 'z', 'h', 'o', 'd', '5', 'x', '\0',
'i', 'z', 'h', 'o', 'd', '6', 'x', '\0',
'i', 'z', 'h', 'o', 'd', '7', 'x', '\0'}; // 72= 9 x 8 bitov, za več izhodov se doda nove




// V telefonu mora biti shranjen osnutek sms-a ali sms med poslanimi
// Potem na telefonu izberem "posreduj" in v sms-u spremenim x v 0 ali 1 in pošljem
// Če je sprejet sms neveljavne oblike, je odgovor sms smstexti
// Če sprejet sms vsebuje samo '?', je odgovor sms smstexti


boolean izhodiS[8]; // statusi izhodov. S to spremenljivko se potem vklaplja/izklaplja izhode
char a; // delovne 8 bitne spremenljivke
char b;
char c;
char i;
    #include <SoftwareSerial.h>
   SoftwareSerial cell(2,3); // RX and TX pins to communicate with cell module

int variable;

//#########################################################################################
// SETUP

    void setup()
    {
    izhodiS = 0; // najprej je vse izklopljeno

    Serial.begin(9600);
  // cell.begin(9600);   
   
      delay(5000); // some time for shield to connect

  Serial.println("GSM Shield is starting.");

  if (gsm.begin(9600)){
    Serial.println("\nstatus=READY");
    started=true; 
  }
  else Serial.println("\nstatus=IDLE");
 
  if(started){
      Serial.println("\nSTARTED");
delay(100); 
 }

 
variable = 1;
Serial.println("watching your sms");
    }
 

//#########################################################################################
// MAIN LOOP


   void loop()
    {
 
           char  position = sms.IsSMSPresent(SMS_UNREAD); //  preverjam nova neprebrana sporočila
           char  position2 = sms.IsSMSPresent(SMS_READ);  //  preverjam prebrana sporočila
 if (position) {     // če je kakšno sporočilo
   
 if(sms.GetAuthorizedSMS(position, phone_num, sms_text, 100, 1, 10))  // preberem njegove podatke (pozicijo, številko, tekst, ...)
   {

     Serial.println(sms_text);

     if( sms_text[0] == '?'){        // smo za prvi znak poslali vprašaj '?'
     goto smsPorocilo;  // Ja, naprej ne preverja
    }
    // prvih 8 bitov (0 ...7) je zasedenih, zato začne od 8 naprej
    a=8; // začetni bit za trenutni izhod
    b=16; // b-2 je statusni/ukazni bit za trenutni izhod
    c=1; // c-1 je trenutni izhod

    while(c<9){ // dokler je c<9
    // preverja samo ukazne bite 14, 22, 30, 38, 46, 54, 62, 70

     if( sms_text[b-2] == '1'){        // primerjam sprejeti ukazni bit z željenim
    izhodiS[c-1]=1;  // Ja, treba je vklopiti izhod c-1
     smstexti[b-2] ='1'; // spremeni statusni bit v stringu
    }
     else if(sms_text[b-2] == 'x'){        // primerjam sprejeti ukaz z željenim
    izhodiS[c-1]=izhodiS[c-1];  // Ja, treba ga je ohraniti kot je
    smstexti[b-2] = '0';
    if(izhodiS[c-1]==1){
    smstexti[b-2] = '1'; //ampak v odgovoru pa pošlje trenutno stanje izhodiS[c-1]
    }
    }
     else if( sms_text[b-1] == '0'){        // primerjam sprejeti ukazni bit z željenim
    izhodiS[c-1]=0;  // Ja, treba je izklopiti izhod c-1
     smstexti[b-2] ='0'; // spremeni statusni bit stringu
    }
     else{        // ukazni bit ni veljaven, prekine preverjanje ostalih
    c=50; // pogoj while ni več veljaven, leti ven iz zamke
    }

    c=c+1; // naslednji izhod
    a=c*8; // naslednjih 8 bitov
    b=a+8; // preveri 8 bitov med a in b, [b-1] je zadnji bit , [b-2] je statusni/ukazni bit
    } // dokler je c<9
smsPorocilo: // sem pride, če ima sms neveljavno obliko ali je prvi znak '?' ali po koncu preverjanja
    Serial.println(smstexti);  // in izpiše komplet poročilo na serijski port

xxx  izhodni port= izhodiS; //  8 bitov spremenljivke izhodiS prenesemo na izhodni port ali pošljemo po I2C ali RS232.
 }
cell.println("AT+CMGD=1,4"); // izbrišem vsa sporočila
       Serial.println("deleted");
 }

}
//#########################################################################################

Najprej pošlji znak '?' in moraš dobiti odgovor smstexti.
8 bitni paketek z imenom in statusom izhoda že vsebuje znak \n za novo vrstico, da jih lepo izpiše drugega pod drugim.

Pomembno je, da so statusni znaki (0, 1, x) na pravi poziciji znotraj stringa v sms_text. Imen izhodov ne preverja, ampak so za orientacijo

while zanka preverja samo statusne bite, ki so na pozicijah (c-1)*8 +16 = 14, 22, 30, 38, 46, 54, 62, 70 ; pri čemer je 0 < c < 9

string bi se dalo tudi lepše napisati ( glej spodaj arrays of strings ) in potem bi pogoje if stavkov malo predelal, ampak s tem se ti igraj.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
DejanGSXR
Neznanec
Neznanec



Pridružen-a: Pon 16 Nov 2015 22:01
Prispevkov: 5
Aktiv.: 0.05
Kraj: Lenart

PrispevekObjavljeno: Pon Nov 16, 2015 10:14 pm    Naslov sporočila:   Odgovori s citatom

Dober dan!

Lotil sem se enega manjšega projekta z arduinom in sem popoln začetnik glede tega. Na motorju bi si rad naredil quickshifter ki bi ga upravljal arduino. Zamislil sem si tako, da bi na arduino vezal točno tak ssr rele ki bi ga rad sprožil z stikalom na tački od menjalnika, in tukaj se mi zatakne. Ne vem kako stikalo rabim da bi dalo samo signal arduino da sproži rele ki bo prekinil 12v napajanje na tuljave. stikalo bi moralo biti po obliki takšno ampak ne vem če arduino lahko iz tega dobi signal? V glavnem rabim pomoč prvo pri nabavi materiala. Če sem vstrelil kako cudno pardon sem pač začetnik Very Happy
Če ima pa kdo predlog za kakšno drugo izvedbo pa bom tudi vesel.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dejc
Član
Član



Pridružen-a: Čet 01 Sep 2011 11:06
Prispevkov: 37
Aktiv.: 0.24
Kraj: Ljubljana

PrispevekObjavljeno: Sre Feb 03, 2016 2:06 pm    Naslov sporočila:   Odgovori s citatom

Tole stikalo je čisto ustrezno, da bi iz njega dobil signal. Gre za isto zadevo kot v primeru samo, da je drugačno stikalo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ule
Član
Član



Pridružen-a: Tor 13 Jan 2004 20:32
Prispevkov: 1561
Aktiv.: 7.03
Kraj: Babno Polje

PrispevekObjavljeno: Sre Feb 03, 2016 2:29 pm    Naslov sporočila:   Odgovori s citatom

Pa dejansko sploh potrebuješ ssr in arduino? Ker lahko bi montiral samo tipko direkt na tuljavo. Sicer nisi napisal koliko toka steče skozi tuljavo, ampak po podatku iz ssr in podatku iz kontaktov tipke, bi rekel da bo samo tipka dovolj, razen če misliš z arduinotom dodati še kakšne zakasnitve vklopa/izklopa tuljave...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
dollar
Član
Član



Pridružen-a: Pon 25 Apr 2011 23:30
Prispevkov: 57
Aktiv.: 0.36
Kraj: Šmarje pri Jelšah

PrispevekObjavljeno: Sre Feb 10, 2016 9:52 am    Naslov sporočila:   Odgovori s citatom

Pozdravljeni !

Sem začetnik kar se tiče arduinotov. Rad bi naredil "napravico" z katero bi lahko štel impulze na senzorju in jih potem kot hitrost, prevoženo razdaljo ali kaj podobnega prikazoval na grafičnem LCD.
Sedaj me pa zanima na kak način bi mogla izgledati struktura programa.
V mislih sem imel glavni program v katerem bi se izvajala matematika katera bi preračunavala čas in stanje na senzorju katerega bi dobil z pomočjo klicanja prekinitev.
Nekaj sem razmišljal tugi okoli timerja ampak nimam najboloj razčiščeno kar se tiče okoli tega.
Uporabljam pa arduino mega 2560.

Prosim za nasvete in vas lepo pozdravljam.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
overload
Član
Član



Pridružen-a: Tor 23 Jun 2015 10:30
Prispevkov: 71
Aktiv.: 0.67

PrispevekObjavljeno: Tor Mar 01, 2016 4:09 pm    Naslov sporočila:   Odgovori s citatom

Še moje vprašnje - rad bi se naredil mini regulatorček - vhodi bi bile različne temperature, izhodi vkop/izklop relejev, vse programirano na osnovi medsebojnih primerjav temperatur s časovnim zamikom proženja izhodov.

Kaj vse bi potreboval, da bi lahko priključil pt1000 tipala?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Sre Mar 02, 2016 2:53 pm    Naslov sporočila:   Odgovori s citatom

PT1000 tipala so temepraturno odvisni upori. Upornst je takorekoč linearno odvisna od temperature..
To upornosto moraš nekako predelati v napetost. Da bo tudi napetost linerno odvisna od temeperature, mora biti upor v neke vrste tokovnem generatorju, kjer je tok (skoraj) neodvisen od napetosti.
Ko imaš napetost, jo pelješ na analogni vhod in ga programiraš kot analogno-digitalni pretvornik (konverter po 'slovensko') in dobiš numerično vrednost, linearno odvisno od temperature.

vse to odpade, če uporabiš Dallasove ds18B20 termometre, ki ti direktno dajo temperaturo v stopinjah, Arduino ima knjižnico v ta namen. Imajo pa ti termometri manjši razpon delovanja kot PT1000

_________________
Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5766
Aktiv.: 25.96
Kraj: Grosuplje

PrispevekObjavljeno: Sre Mar 02, 2016 7:15 pm    Naslov sporočila:   Odgovori s citatom

Rešitev za merjenje temperature, v povezavi z Arduinom, je na Netu kolikor hočeš tako s senzorji serije PT1xxx, kot ostalimi (DS18xxx, termočlen,....) in nadaljno regulacijo.
Tukaj je ena, meni dopadlijiva, rešitev z več PT1000.
Na zgoraj omenjeni strani so tudi rešitve za štejtje impulzov in ostale zanimivosti Wink .

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
DejanGSXR
Neznanec
Neznanec



Pridružen-a: Pon 16 Nov 2015 22:01
Prispevkov: 5
Aktiv.: 0.05
Kraj: Lenart

PrispevekObjavljeno: Pet Jul 08, 2016 9:07 am    Naslov sporočila:   Odgovori s citatom

ule je napisal/a:
Pa dejansko sploh potrebuješ ssr in arduino? Ker lahko bi montiral samo tipko direkt na tuljavo. Sicer nisi napisal koliko toka steče skozi tuljavo, ampak po podatku iz ssr in podatku iz kontaktov tipke, bi rekel da bo samo tipka dovolj, razen če misliš z arduinotom dodati še kakšne zakasnitve vklopa/izklopa tuljave...


Potrebujem arduino zaradi tega ker mora bit prekinitev dolga določen čas v mili sekundah okoli 60ms. Trenutno sem uporabil za stikalo hall sensor ki imam zmontiranega na ročici menjalnika in standardni mehanski rele modul. Prekinjam pa samo pozitivno linijo do tuljave ker ta je skupna masa pa je speljana saka posebej iz ecuja. Pojavil se pa mi je problem ko vozim da mi arduino ali rele nsem najšel še vzroka vmes za kratek čas prekinja in odvzame vžig. Stikalo sem odklopil pa se je dogajalo isto tako da senzor ni. Naredil sem še dodatno stikalo 0-1 da to linijo spojim pred relejem in takrat je ok. tako da mi je ostal samo rele ali arduino. Je možno da vibracije naredijo napako v releju? Sam rele sem probal zamotat v mehko krpo da se nebi prenašalo udarcev in vibracij toliko pa nič.

Ima kdo kakšno idejo?

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Stran 10 od 10

 
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group