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   271 / 864
(#) vizor válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 / 1
 
A szenzorban egy olyan kapcsolás van ami leválasztja a vivőfrekvenciáról ami 36KHz környéke, az adatot. Az adatok már magas/alacsony módon jönnek a lábán sorban egymás után.

A protokollnak meghatározott módon váltogatnia kell a magas/alacsony jelszinteket. Az Arduino-nak ezeket fel kell dolgozni és kiértékelni. A használt függvény pont ezt csinálja. De mivel a protokollnak jól meghatározott bevezető és lezáró jelei vannak, ezeket neki meg kell várnia. Amikor folyamatosan nyomja a gombot akkor egyszer elküldi ezeket de aztán már csak egy rövid ismétlő jelet ismételget folyamatosan, nem a kódot. Ha a jelfolyam felénél kapod el a sorozatot, nem mégy vele semmire, hiába változik a jelszint, mert nem lesz mit kikódolni. Tehát nem kaphatja el újra mert nincs semmi amit kiértékeljen, már csak a repeat jelet ismételgeti. Hiába változik a láb jelszintje, a függvény már le se fut, nem ad vissza értékelhető eredményt, mert nincs meg a Leading jel.

Maga a függvény is interruptot használ a magas/alacsony jelek hosszának mérésére és amíg nem jön a lezárás, nem fog mással foglalkozni. Ha a függvény nincs felkészítve a repeat jel kezelésére, akkor hiába az egész, mert úgyis el kell engednie a gombot, hogy megismételje a parancsot. Tehát még egyszer: ha NEC a protokoll akkor kiküldi a Leading jelet, majd egy szünet, aztán az address 8 bitjét, majd az address inverz 8 bitjét, majd a command 8 bitjét, majd a command inverz 8 bitjét, aztán egy lezáró jelet. Kész a parancs. Majd innentől felváltva küldözgeti a repeat jelet és egy szünetet ami nagyon könnyen megkülönböztethető. Ezt a repeat jel ismételgetést addig fogja csinálni amíg el nem engeded a gombot. A képek magukért beszélnek.

Szerintem a gomb lenyomásakor saját magának kellene eltárolnia a kérdezőnek, hogy lenyomta a gombot (state machine). De az általam ajánlott RC5-master library-ban ez már meg van oldva toggle néven.
A hozzászólás módosítva: Okt 6, 2016
(#) (Felhasználó 120038) válasza vizor hozzászólására (») Okt 6, 2016 /
 
ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ!

Köszi! Leesett, hogy hol gondoltam félre!

Most már sokkal jobban értem!
(#) vizor válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Örülök neki.
(#) (Felhasználó 120038) válasza vizor hozzászólására (») Okt 6, 2016 /
 
Odáig hallatszott a koppanás mi?
(#) (Felhasználó 120038) válasza MaxGaming hozzászólására (») Okt 6, 2016 / 1
 
Szia!

Több gond is van.

1:
Int seconds helyett long kell. Int-ben 32,767 lehet a max. Ez 9 óra 6 perc környéke. (ezt a playetimeból számolod)

2:

Az if szerkezeteid szerintem nem jók, mert egymásba vannak ágyazva, azaz a perc '01' helyes kiírása csak akkor fut le, ha az óra is kisebb mint 10.
(#) vizor válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Papírtantusz, ahogy errefelé mondják.
Egy kép többet mond ezer szónál.
(#) (Felhasználó 120038) válasza MaxGaming hozzászólására (») Okt 6, 2016 / 1
 
Valahogy így, de ma már nehezen értek meg dolgokat


  1. if (PlaytimeRun == true) {
  2.  
  3.    long seconds = Playtime / 1000;
  4.    int minutes = seconds / 60;
  5.    int hours = minutes / 60;
  6.    seconds = seconds % 60;
  7.    minutes = minutes % 60;
  8.  
  9.     if (hours < 10)
  10.         {
  11.              lcd.print("0");
  12.              lcd.print(hours);
  13.              lcd.print(":");
  14.          }
  15.  
  16.          else
  17.               {
  18.                   lcd.print(hours);
  19.                   lcd.print(":");
  20.               }
  21.  
  22.     if (minutes < 10
  23.         {
  24.             lcd.print("0");
  25.             lcd.print(minutes);
  26.             lcd.print(":");
  27.          }
  28.         else
  29.               {
  30.                   lcd.print(minutes);
  31.                   lcd.print(":");
  32.               }
  33.  
  34.  
  35.  
  36.   if (seconds < 10)
  37.        {    
  38.            lcd.print("0");    
  39.            lcd.print(seconds);
  40.            lcd.print(":");
  41.  
  42.        }
  43.         else
  44.               {
  45.                   lcd.print(seconds);
  46.                   lcd.print(":");
  47.               }
  48.  
  49.  }
A hozzászólás módosítva: Okt 6, 2016
(#) MaxGaming válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Nagyon szépen köszönöm! Nekem nagy segítség volt.
(#) (Felhasználó 120038) válasza MaxGaming hozzászólására (») Okt 6, 2016 /
 
Szívesen, örülök.

Melyik lett jó? Csak a long, vagy a kód is amit utoljára küldtem?
(#) andykaaa hozzászólása Okt 6, 2016 /
 
Egy par gondolat, idezojelbe:
Idézet:
„vizor: „Itt inkább el kéne kapni a repeat jelet és akkor ismételgetni a változó növelését.”
kapu48: „Kellene készíteni egy ki listázó alkalmazást, hogy lássad, mit kapsz ismétléskor?”
vizor: „Ezt a repeat jel ismételgetést addig fogja csinálni amíg el nem engeded a gombot.””

Ezek utan esett le nekem is hogy az a REPEAT dolog mire is valo a library-ba. Mert van benne REPEAT fuggveny, csak nem ertettem hogy az mire is valo lenne.
A kerdes most csak az hogy hova tegyem a REPEAT jel olvasasat/ ckiertekeleset es hogy onnan mivel megyek vissza (return ?), vagy csak egyszeruen raadom a „+=5” novelest.
Szerintem mar uton vagyok csak meg sok a kanyar es nem latom a celt.
Koszonom, ha nem akarodzik meg jovok
A hozzászólás módosítva: Okt 6, 2016
(#) andykaaa válasza MaxGaming hozzászólására (») Okt 6, 2016 /
 
Nem akarok kontarkodni, de ha csak egy visszaszamlalasrol van szo akkor ott a „chrono” lib. Szerintem egy ilyen celnak tokeletes.
(#) MaxGaming válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Tízperces lépésekben növelem a már működésben lévő visszaszámlálót. Így, csak a long változtatása 9:59 teljes fagyás. Viszont a kód tökéletes. Találkoztam nagyon hasonló mintával. De úgy tűnik, akkor próbálom alkalmazni, ha a fejembe, verik! Úgy gondolom így jár az ember, ha autodidakta módon tanul. Még egyszer köszönöm!
(#) vizor válasza andykaaa hozzászólására (») Okt 6, 2016 /
 
A library forráskód szerint:
Amikor visszatér a decode() függvény: result.value=data
Amikor már repeat megy a jelben, akkor: result.value=REPEAT
A REPEAT egy konstans a library headerben: #define REPEAT 0xffffffff

Eltárolod, hogy milyen parancs volt előzőleg és amikor már REPEAT-ot kapsz vissza, megismétled az előző műveletet ami a változóidat állítja.
A hozzászólás módosítva: Okt 6, 2016
(#) (Felhasználó 120038) válasza MaxGaming hozzászólására (») Okt 6, 2016 /
 
Idézet:
„Így, csak a long változtatása 9:59 teljes fagyás”


Ajaj. Akkor még mindig kifagy?
(#) MaxGaming válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Nem már minden ok. Ahogy a mondandóm második felében írtam a teljes kód változtatással már tökéletesen működik.
(#) kapu48 válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Pedig érthető. Csak akkor kel elé 1 helypótló 0-a, ha a szám kisebb 10-nél!
Vagyis:
  1. if (hours < 10){
  2.              lcd.print("0");
  3.         }
  4.          lcd.print(hours);
  5.          lcd.print(":");
  6.   ...
A hozzászólás módosítva: Okt 6, 2016
(#) andykaaa válasza vizor hozzászólására (») Okt 6, 2016 /
 
Valami ilyesmi „forrik” nekem is.
Csak egy a gond, kene valami idozites is bele, de interrupt alatt nem mukszi a „delay”.
A hozzászólás módosítva: Okt 6, 2016
(#) (Felhasználó 120038) válasza kapu48 hozzászólására (») Okt 6, 2016 /
 
Tudom, én írtam.
(#) kapu48 válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Mégis rossz a zárojelezésed!
(#) (Felhasználó 120038) válasza kapu48 hozzászólására (») Okt 6, 2016 /
 
melyik?
(#) kapu48 válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Minek az else ág?
Nem jobb ahogy én mutattam?
(#) (Felhasználó 120038) válasza andykaaa hozzászólására (») Okt 6, 2016 /
 
Szia!

milis();

Ha jól emlékszem, akkor interruptnál ez kellene neked a delay helyett.
(#) (Felhasználó 120038) válasza kapu48 hozzászólására (») Okt 6, 2016 /
 
  1. if (hours < 10) //{ <<<
  2.  
  3.  
  4. 2.      lcd.print("0");
  5.  
  6.  
  7. 3.      lcd.print(hours);
  8.  
  9.  
  10. 4.      lcd.print(":");
  11.  
  12.  
  13. 5.
  14.  
  15.  
  16. 6.      if (minutes < 10)
  17.  
  18.  
  19. 7.        lcd.print("0");
  20.  
  21.  
  22. 8.        lcd.print(minutes);
  23.  
  24.  
  25. 9.        lcd.print(":");
  26.  
  27.  
  28. 10.
  29.  
  30.  
  31. 11.      if (seconds < 10)    
  32.  
  33.  
  34. 12.        lcd.print("0");  
  35.  
  36.  
  37. 13.        lcd.print(seconds);
  38.  
  39.  
  40. 14.    //} <<<


El lehet hagyni '}'-t? Hogy értékelődik ki ilyenkor? Ha az óra 9, akkor mi lesz az eredmény?

Értem már. Tényleg nem kell oda annyira az else ág, én így oldottam meg, ennyi. Amit küldtél abban azt mondod nem kellenek a '{}'

Valamint azt írtad rossz a zárójelezés, majd azt, hogy minek az else ág. Az utóbbit értem, de hol a hibás zárójelezés? Meg tényleg nem tudom, hogy mikor lehet elhagyni a {}-t
A hozzászólás módosítva: Okt 6, 2016
(#) kapu48 válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
If
Ez mind egyforma:
  1. if (x > 120) digitalWrite(LEDpin, HIGH);
  2.  
  3. if (x > 120)
  4. digitalWrite(LEDpin, HIGH);
  5.  
  6. if (x > 120){ digitalWrite(LEDpin, HIGH); }


Ha csak 1 utasítás van a feltételben.
A hozzászólás módosítva: Okt 6, 2016
(#) (Felhasználó 120038) válasza kapu48 hozzászólására (») Okt 6, 2016 /
 
!

Értem már!
(#) (Felhasználó 120038) válasza kapu48 hozzászólására (») Okt 6, 2016 /
 
Valahogy nekem ez maradt meg, mindenhol így használom a {}-jeleket.

De értem miért nem kell mindenhova. A kérdezőnek ezen kívül volt más kérdése, gondoltam átírom legjobb tudomásom szerint.

Az else ágat kivenném (kezdőként jobban emészthető ez a forma), de a {}-t bennhagynám. Nekem így könnyebb átlátnom.
(#) kapu48 válasza (Felhasználó 120038) hozzászólására (») Okt 6, 2016 /
 
Igazad van!
Nállam viszont gyözőtt a lustaság!
(#) (Felhasználó 120038) válasza kapu48 hozzászólására (») Okt 6, 2016 /
 
Lustaság fél egészség, mint mondják, de itt most rövidebb kód is egyben, jól jöhet még ez az infó!

Köszi!
(#) devergo74 hozzászólása Okt 7, 2016 /
 
Sziasztok.
Most kezdtem el foglalkozni az Arduinoval. Kérdésem vele kapcsolatban, én mint kezdő, inkább vegyek egy komplett Arduino kit-et, vagy érdemesebb külön megvásárolni?
Hogy mire akarom használni, hát egyszerűbb feladatokat kipróbálni, mint led villogtatása, 7-szegmenses kijelző stb..
Köszönöm.
(#) Kera_Will válasza devergo74 hozzászólására (») Okt 7, 2016 /
 
Attól függ mennyi egyéb perifériának való "lomod" van ?
Ha ezen kívül speciálisabb eszközökkel is szeretnél ismerkedni akkor azokat kell megvenni.

Vannak "viszonylag olcsón" megvehető sokféle részegységekből 1 - 1 - 1 darabot tartalmazó kittek(szervo , 8*8 pontmátrix , H-híd , LCD , breboard, valamelyik arduino lapka, 7szegmenses kijelző 1 és 4 digites , 3*10db LED , gombok , fényérzékelők, PIR, RTC , gyro, ...stb. ).
Szerintem eleinte elég ha pár darab ledek , nyomógombok, tranzisztorok , villanymotor, 2 3 shift regiszter IC ezek pár forintos tételek vagy donorból is elérhetőek.
Ahogy egyre mélyebben megismerkedsz akkor beszerzed a szükséges darabokat.
Elektronikai (alap) ismeretek se ártanak előtte .
A hozzászólás módosítva: Okt 7, 2016
Következő: »»   271 / 864
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