Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   100 / 851
(#) erdeidominik1999 hozzászólása Ápr 2, 2015 /
 
Sziasztok! Miért lehet az, hogy ha van egy stringem, amit indexOf-fal vizsgálok, egyszer megtlálja a keresett szó, egyszer nem, tehát mondjuk bedugom az arduinót, megtalálja, kihúzom, újra bedugom és már nem, aztán az 5. újraindításra megint jó. Ez mitől lehet? Előre is köszi a segítséget!
(#) erdeidominik1999 válasza erdeidominik1999 hozzászólására (») Ápr 2, 2015 /
 
Megtaláltam a hibát, egy kicsit más volt a gond, de nem tudom hogyan tudnám megoldani. A hiba: A serialon olvasott karaktereket hozzáfűzöm egy stringhez, vagyis helyesebben kettőhöz, és az egyik stringhez csak egy bizonyos hosszúságot fűz hozzá, de ha csak egyhez fűzöm, akkor jó, ez miért lehet?
  1. char c=Serial.read();
  2. string1+=c;
  3. string2+=c;

Ilyen alapon csinálom, mi itt a hiba?
(#) Kovidivi hozzászólása Ápr 4, 2015 /
 
Sziasztok!
Egy tapasztalatot szeretnék megosztani DHT-11 szenzorral kapcsolatban. Van egy órám, ami nagyon ritkán egy bizonyos hibával megállt, de úgy, hogy az interruptok is tiltva vannak, a főprogram sem tud továbblépni egy bizonyos pontnál. Nem tudtam behatárolni, mert ritkán jött elő. A neten fellelhető könyvtár nem tudja lekezelni, ha a szenzor nem válaszol, és teljesen megakad. Jelenleg nincs bent szenzorom egyáltalán (fordított tápfeszültségtől megolvadt a burkolat is), és ha lefut a DHT függvény, azonnal megáll az óra. Egyébként a DHT-11-en található egy smd NTC vagy PTC, a nyák legfelső részén. Ez a hiba is kényszerít arra az útra, ahol magamnak írom meg az ilyen programrészeket.
(#) icserny válasza Kovidivi hozzászólására (») Ápr 4, 2015 /
 
Az Adafruit-féle DHT library tartalmaz védelmet timeout esetére. Ez nem elegendő?
  1. //  cli();
  2.   noInterrupts();
  3.  
  4.   digitalWrite(_pin, HIGH);
  5.   delayMicroseconds(40);
  6.   pinMode(_pin, INPUT);
  7.  
  8.   // read in timings
  9.   for ( i=0; i< MAXTIMINGS; i++) {
  10.     counter = 0;
  11.     while (digitalRead(_pin) == laststate) {
  12.       counter++;
  13.  //     delayMicroseconds(2);
  14.       if (counter == 255) {
  15.         break;
  16.       }
  17.     }
  18.     laststate = digitalRead(_pin);
  19.  
  20.     if (counter == 255) break;
  21.  
  22.     // ignore first 3 transitions
  23.     if ((i >= 4) && (i%2 == 0)) {
  24. #ifdef DEBUG
  25.             res[j] = counter;
  26. #endif
  27.       // shove each bit into the storage bytes
  28.       data[j/8] <<= 1;
  29.       if (counter > DHTLEVEL)
  30.         data[j/8] |= 1;
  31.       j++;
  32.     }
  33.  
  34.   }
  35.  
  36. //  sei();
  37.     interrupts();
(#) Kovidivi válasza icserny hozzászólására (») Ápr 4, 2015 /
 
Egy csere ajánlott lenne. Nálam így néz ki:
  1. for ( int8_t i = -3 ; i < 2 * 40; i++ ) {
  2.     byte age;
  3.     startTime = micros();
  4.  
  5.     do {
  6.       age = (unsigned long)(micros() - startTime);
  7.       if ( age > 90 ) {
  8.         error = ERROR_TIMEOUT;
  9.         return;
  10.       }
  11.     }
  12.     while ( digitalRead(pin) == (i & 1) ? HIGH : LOW );
  13.  
  14.     if ( i >= 0 && (i & 1) ) {
  15.       // Now we are being fed our 40 bits
  16.       data <<= 1;
  17.  
  18.       // A zero max 30 usecs, a one at least 68 usecs.
  19.       if ( age > 30 ) {
  20.         data |= 1; // we got a one
  21.       }
  22.     }
(#) andykaaa hozzászólása Ápr 5, 2015 /
 
Sziasztok,
Szerintetek LM35 hasznalataval, ez:
  1. prevSZ1 = analogRead(SZ_hm);
  2.    prevSZ2 = prevSZ1;
  3.    prevSZ3 = prevSZ2;
  4.    prevSZ4 = prevSZ3;
  5.    prevSZ5 = prevSZ4;
  6.    SZ = prevSZ1 + prevSZ2 + prevSZ3 + prevSZ4 + prevSZ5;      
  7.    tempSZ = map(SZ, 0, 5115, 0, 5000);
mehet, ok ?
(#) TheShaft válasza andykaaa hozzászólására (») Ápr 5, 2015 /
 
A 2,3,4,5 sorok sorrendjét cserél fel...
(#) andykaaa válasza TheShaft hozzászólására (») Ápr 5, 2015 /
 
Ja, ezt ertem
(#) erdeidominik1999 hozzászólása Ápr 5, 2015 /
 
Sziasztok! Egy elég érdekes problémával állok szemben, megpróbálom érthetően leírni. Van egy programom, amibem van egy webszerver, de a webszerveren van egy hitelesítés, és a client.read() karaktereit rögtön 2 db stringbe pakolom, az egyikből a hitelesítést indexOf-fozom, ha megtalálta nullázom, a másik pedig az adatokért felel. Ez eddig tökéletesen működik, viszon a programban van egy olyan is, hogy software serialon kommunikál egy másik arduinóval, az innen érkező jeleket is egy stringbe pakkolja, majd indexOf-fozza, viszont ha ezt a serial kommunikkációt beleteszem a programba, akkor a webszerver stringjét össze vissza pakkolgatja, és a hitelesítést sem találja meg benne, sokszor csak krix-kraxok vannak a stringben. Próbáltam, hogy a serial kommunnikációt nem teszem stringbe, hanem csak karakterekkel kommunikálok, úgy sem jó. Viszont az a fura, hogy ha csak 2-3 indexOf-fot teszek a serial kommunikáció stringjére, akkor működik, de ha többet, akkor a webszerver meghal. Mi lehet ennek az oka? Előre is nagyon köszönöm a segítséget, remélem sikerült érthetően leírnom.
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Ápr 5, 2015 /
 
A hibakeresésben neked édes keveset tudunk segíteni, mivel csak te látod a programodat!

Ha megvan minden részletnek a forráskódja?
Nézd, át nem használsz e a 2 függvényben, egyforma nevű változókat?
(Ilyen szokott pl. lenni az „i” index számláló, mindenki előszeretettel használja!)

Jól vannak méretezve a tömbjeid?
(#) erdeidominik1999 válasza kapu48 hozzászólására (») Ápr 5, 2015 /
 
Nincs két egyforma változó, már néztem, nincs benne tömb.
  1. char i=sajatSerial.read();
  2. probastring+=i;

példaképp, hol itt a tömb?
Már 3 napja szenvedek vele, és nem működik, és az a fura, hogy ha csak 2-3 indexOf van, akkor jó, illetve ha mondjuk 10 indexOf van, de nincs végrehajtandó művelet az indexOf-fon belül, akkor is jó, én inkább valamim más jellegű hibára gondolok, talán a memória kevés vagy valami ilyesmi. Sőt azt is próbáltam, hogy ha amíg serial kommunikáció van, addig a webszerver nem megy, akkor sem jó.
A hozzászólás módosítva: Ápr 5, 2015
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Ápr 5, 2015 /
 
Jó kérdés!

A „probastring” a „char”-ok tömbje. Amit ráadásul folyamatosan növelsz a hozzáadásokkal.
...
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Ápr 6, 2015 /
 
Olyan érdekes ½ magyar, ½ angol neve van: „sajatSerial”
Ez biztosan nem arduinos könyvtári függvény?
Kíváncsi lennék a részleteire?
(#) erdeidominik1999 válasza kapu48 hozzászólására (») Ápr 6, 2015 /
 
  1. #include <SoftwareSerial.h>
  2.  
  3. SoftwareSerial sajatSerial(10, 11);

Így már ok? De egyébként csak példának írtam.
(#) Kovidivi válasza erdeidominik1999 hozzászólására (») Ápr 6, 2015 /
 
A szoftveres soros kommunikáció csak akkor fog működni, ha a adatküldés és fogadás előtt letiltod az interruptokat, mivel pontos időzítésre alapul... Utána engedélyezd is! Ez csak akkor igaz, ha delay-jel várakozik. Viszont ha beállítja az egyik timert, és interruptra küld adatot, akkor simán összeakad két könyvtár, azzal megint nem tudsz mit kezdeni... Nem Mega-t használsz? Annak ha jól tudom minimum 2 soros egysége van.
A hozzászólás módosítva: Ápr 6, 2015
(#) erdeidominik1999 válasza Kovidivi hozzászólására (») Ápr 6, 2015 /
 
Megát használok, de próbáltam hardwareSerialon is, ott sem jó, vagy ott is le kéne tiltani?
(#) erdeidominik1999 válasza Kovidivi hozzászólására (») Ápr 6, 2015 /
 
Meg még azt vettem észre, hogy alapon ha megnyitom a webes felületet, működik, a hitelesítést is elfogadja, az autofrissítésnél is jó, viszont ha megnyomok egy gombot, akkor a stringben kesze-kusza lesz és nem fogadja el a hitelesitést sem. És próbáltam így csak simán karakterekkel, amíg nincs művelet az if-en belül, addíg jó (tehát ami itt van), viszont ha valamit beleteszek, hogy csináljon, akkor már nem jó.
  1. if (Serial1.available()>0){
  2.     char gsm=Serial1.read();
  3.  
  4.   if(gsm=='a'){
  5.  
  6.   }else if(gsm=='b'){
  7.  
  8.   }else if(gsm=='a'){
  9.  
  10.   }else if(gsm=='c'){
  11.  
  12.   }else if(gsm=='d'){
  13.  
  14.   }else if(gsm=='e'){
  15.  
  16.   }else if(gsm=='f'){
  17.  
  18.   }else if(gsm=='g'){
  19.  
  20.   }else if(gsm=='h'){
  21.  
  22.   }else if(gsm=='i'){
  23.  
  24.   }else if(gsm=='j'){
  25.  
  26.   }else if(gsm=='k'){
  27.  
  28.   }else if(gsm=='l'){
  29.  
  30.   }else if(gsm=='m'){
  31.  
  32.   }
  33.   }
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Ápr 6, 2015 / 1
 
Nem jól csinálod!

A témáról bővebben itt:
Convert serial.read() into a useable string using Arduino?
(#) erdeidominik1999 válasza kapu48 hozzászólására (») Ápr 6, 2015 /
 
Hogy én eddig erre hogy nem találtam rá... Hihetetlen, működik, ezer hála és köszönet!
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Ápr 6, 2015 /
 
Akkor 1 (Értékeld a hozzászólást +!) jól esne!
(#) erdeidominik1999 válasza kapu48 hozzászólására (») Ápr 6, 2015 /
 
Lehet, hogy hamar örültem, miután mindent visszpakoltam a progiba ugyan azt csinálja
Azt nem értem, hogy mi az összefüggés a webszerver és a soros kommunikáció között? Illetve, hogy az miért van, hogy ha a soros kommunikációnál az if-en belülre nem teszek műveletet, akkor jó, ha igen akkor nem.
A hozzászólás módosítva: Ápr 6, 2015
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Ápr 6, 2015 /
 
Ha kicsit figyelmesebben olvastad volna a be linkelt oldal diskurzusait, akkor értenéd!

Itt a pontos időzítéseket a software végzi. Ezért nem csinálhatsz adás-vétel közben mást!
Várd ki, míg bejön az egész string, utána dolgozd fel.

És ami megszakítás zavarja a kommunikációt, azt is le kell tiltani! (Ezért ajánlott a minél rövidebb megszakítás rutinok használat!)
(#) erdeidominik1999 válasza kapu48 hozzászólására (») Ápr 6, 2015 /
 
De ha nincs kommunikáció, csak alapjáraton megy, akkor sem jó a webszerver.
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Ápr 6, 2015 /
 
Az öreg Isten tudja, mit csinál a webszervered alapjáraton! Megvan a forráskódja?
Tiltsd le a SPI megszakítást, amíg fut a rutin:
  1. while (Serial.available() > 0)
  2.     {
  3.         char recieved = Serial.read();
  4.         inData += recieved;
  5.  
  6.         // Process message when new line character is recieved
  7.         if (recieved == '\n')
  8.         {
  9.  
  10.             // Feldolgozás
  11.  
  12.  
  13.  
  14.             inData = ""; // Clear recieved buffer
  15.         }
  16.     }


Talán ez a baja?
(#) erdeidominik1999 válasza kapu48 hozzászólására (») Ápr 6, 2015 /
 
Próbáltam ez alapján is, úgy sem jó, csatoltam a webszerver forrását, illetve egy képet, hogy ha a soros kommunikáció benne van a programban, akkor ez történik a webszerver stringjével. Ha a soros kommunikációt kihagyom a progiból, a webszerver tökéletes. Sőt egyszerűsítek a dolgon, nem kell semmi soros kommunikáció, ha a programba csak simán létrehozok egy stringet arra pakolgatok indexOf-fokat (nem adok a stringhez semmilyen értéket) akkor sem működik a webszerver.
A hozzászólás módosítva: Ápr 6, 2015
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Ápr 6, 2015 /
 
Nekem az:
SPI.h
Ethernet.h
SPI.cpp
Ethernet.cpp
kellenének!
(#) erdeidominik1999 válasza kapu48 hozzászólására (») Ápr 6, 2015 /
 
Bocs!
(#) teglascs válasza icserny hozzászólására (») Ápr 9, 2015 /
 
Most volt időm foglalkozni vele: ezzel a megoldással elsőre, gond nélkül működik.
Köszönöm!
(#) bakertesz hozzászólása Ápr 9, 2015 /
 
Egy lm35dz homerot szeretnek beolvasni szazad pontosaggal. Egy masik forumtemban kezdotott a beszelgetes. Javasoltak inkabb ide jojjek.

Rendben koszonom. Utana nezek, ez a kulso tap dolog remelem megoldja a satbil 5v problemat.
Ha jol ertem 5V-n pontosabb merest kapok mint 1.1V-n. A nanonak lehet aref-t bekotni. A kerdesem meg az lenne az aref tapnak foldet hova kotom le? Az arduino nano foldjevel kene osszekossem?

Koszonom elore is a valaszt.
A hozzászólás módosítva: Ápr 9, 2015
(#) mrobi válasza bakertesz hozzászólására (») Ápr 9, 2015 / 1
 
Nem. Épp hogy az 1.1V-on kapsz pontosabban. Gondolj bele: az lm35-öd a keltetőben mondjuk 37°C-on van. Akkor kiad 370mV-ot. Ha 5V a referencia, akkor az adc 4.88mV pontossággal mér. Ha 1.1V a referencia akkor 1.07V pontossággal mér. Persze ezek elméleti számítások. LM35-el mértem már stabilan tized hőfokot. Szobahőmérsékleten nem ingadozott. Akkor nem csináltam méréseket, mert nem vol meg hozzá a megfelelő műszerezettségem.
Következő: »»   100 / 851
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem