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   864 / 872
(#) pipi válasza (Felhasználó 32034) hozzászólására (») Okt 19, 2025 /
 
Hátulról/alulról kell dugni
A hozzászólás módosítva: Okt 19, 2025
(#) Josi777 válasza pipi hozzászólására (») Okt 19, 2025 /
 
Alulról az UNO féle csatlakozó kiosztás nem érhető el, kizárólag felülről. Cserébe alul van rengeteg kivezetése a panelnek, amik meg 1,8 V-osak. Érdekes koncepció.
(#) pipi válasza Josi777 hozzászólására (») Okt 19, 2025 /
 
Tüske/hüvelysor ráforrasztható alulra utólag, nem?
(#) Josi777 válasza pipi hozzászólására (») Okt 19, 2025 / 1
 
Persze, megoldható (Kellő ügyességgel, de nem hinném, hogy szakszerű lenne, mivel egy eleve beforrasztott csatlakozósor forrasztási pontjaihoz kellene forrasztani az új csatlakozót. Vagy kiveszed az eredetit és alulra nézve forrasztasz be tüskesort.), de akkor valójában nem férsz hozzá a többi csatlakoztatási ponthoz, pont azokhoz, ami miatt érdemes beruházni egy ilyen lapkába.
(#) asch válasza Frankye hozzászólására (») Okt 22, 2025 / 1
 
A lényeg az, hogy ha két folyamatnak két külön állapotgépet csinálsz két külön függvénnyel megvalósítva, akkor egymástól függetlenül fognak párhuzamosan működni. Tehát a process2 állapotgépet önmagában nézheted. Az eredeti hozzászólásod nem olvastam elég figyelmesen, hogy lényeges, hogy a különböző időzítéseket hogyan valósítod meg. Csak a process2-t átírva tetszőleges idő mintát meg lehet valósítani, amit leírtál, az kb így nézhet ki. 5 állapotunk van, a kikapcsolt állapot, és minden várakozás 1-1 állapotnak felel meg.
  1. void process2(uint32_t time)
  2. {
  3.         uint32_t dt=time-process2time;
  4.         if(!process2enabled)
  5.         {
  6.                 // bármilyen állapotban is vagyunk, ha az engedélyezés megszűnik, akkor a 0 állapotra állunk, és kikapcsoljuk a LED-et
  7.                 process2state = 0;
  8.                 outputLed(false);
  9.         }
  10.         switch(process2state)
  11.         {
  12.         case 0: // 0 állapot: várakozás engedélyezésre, a LED ki van kapcsolva.
  13.                 if(process2enabled)
  14.                 {
  15.                         process2time=time;
  16.                         process2state=1;
  17.                         outputLed(true);
  18.                 }
  19.                 break;
  20.         case 1:
  21.                 if(dt>=200) // A LED bekapcsolva, várakozunk 200ms elteltére
  22.                 {
  23.                         process2time=time;
  24.                         outputLed(false);
  25.                         process2state=2;
  26.                 }
  27.                 break;
  28.         case 2:
  29.                 if(dt>=200) // LED kikapcsolva 200ms ideig
  30.                 {
  31.                         process2time=time;
  32.                         outputLed(true);
  33.                         process2state=3;
  34.                 }
  35.                 break;
  36.         case 3:
  37.                 if(dt>=200) // LED bekapcsolva 200ms ideig
  38.                 {
  39.                         process2time=time;
  40.                         outputLed(false);
  41.                         process2state=4;
  42.                 }
  43.                 break;
  44.         case 4:
  45.                 if(dt>=2000) // LED kikapcsolva 2000ms ideig
  46.                 {
  47.                         process2time=time;
  48.                         outputLed(true);
  49.                         process2state=1;  // ismétlés az 1 állapottól kezdve ameddig van engedélyező alapjel.
  50.                 }
  51.                 break;
  52.         }
  53. }

Nagyjából ez lenne a blokkoló megvalósítás pszeudókóddal, ami ugyanezt csinálja:
  1. kikapcsolva:
  2.   if(!process2enabled) goto kikapcsolva;
  3. be200_elso_enter:
  4.   outputLed(true);
  5.   t=millis();
  6. be200_elso_loop:
  7.   if(!processEnabled) {outputLed(false); goto kikapcsolva;}
  8.   if(millis()-t<200) goto be200_elso_loop;
  9. ki200_enter:
  10.   outputLed(false);
  11.   t=millis();
  12. ki200_loop:
  13.   if(!processEnabled) {outputLed(false); goto kikapcsolva;}
  14.   if(millis()-t<200) goto ki200_loop;
  15. be200_masodik_enter:
  16.   outputLed(true);
  17.   t=millis();
  18. be200_masodik_loop:
  19.   if(!processEnabled) {outputLed(false); goto kikapcsolva;}
  20.   if(millis()-t<200) goto be200_masodik_loop;
  21. ki2000_enter:
  22.   outputLed(false);
  23.   t=millis();
  24. ki2000_loop:
  25.   if(!processEnabled) {outputLed(false); goto kikapcsolva;}
  26.   if(millis()-t<2000) goto ki2000_loop;
  27.   goto be200_elso_enter;
(#) Frankye válasza asch hozzászólására (») Okt 22, 2025 /
 
Köszönöm, ez szimpatikus megoldás. Még tanulmányozom, de elsőre jónak tűnik. Köszönet a fáradozásért mindenkinek!
(#) gyula84 hozzászólása Okt 23, 2025 /
 

Uno q

Meg is vettem a uno q, majd mondom eljátszadozom vele, persze a program nem indul ami hozzá van az App Lab, csak az ide 2.x, szép egy start
(#) gyula84 válasza gyula84 hozzászólására (») Okt 23, 2025 /
 
Jött egy frissítés ami megoldotta a gondot!
(#) gyula84 válasza (Felhasználó 32034) hozzászólására (») Okt 23, 2025 /
 
Nem igazán tetszik
(#) Eregyenlouperi válasza Frankye hozzászólására (») Okt 23, 2025 /
 
Lehet két hét után már nem aktuális , de azért volna egy tippem a gomb figyelés-20 másodperces kihagyására .
void gombfigyelés()
{
if(!gnyomi)
{
bool x=digitalread(gomb);
if(x) gnyomi=true , húszmásodperces() ; // kizárod magad a gombfigyelő eljárásból
}
}

void húszmásodperces ()
{
végevan=false;
.....tevékenység.....
if (végevan) gnyomi=false; // engedélyezed a gombfigyelést.
}
Nyílván ez csak egy ötlet ezt ki kell dolgozni és a részletekben megbújó ödögöt pedig kizavarni belőle. Villogtatás és egyebek:
A mikros() függvénnyel tudsz pontos időmarkereket létrehozni (a millis egy rakat sz.... azzal ne foglalkozz )
unsigned long ms = micros();
idoalap=ms/100000 ; // időalap változód minden tizedmásodpercben fog egyet lépni előre.
Ha változtatod az osztót akkor más időalapot kapsz. /1000 =1mS (és ez pontos is)
Erre alapozva annyi egymástól független időzítést villogtatást , programrészlet lefutást tudsz létrehozni amennyit csak akarsz (illetve amit a chip elbír). Ja és a delay is mehet a kukába.
Gombfigyelés: Sokszor láttam már azt a módszert amikor a belső felhúzó ellenállást bekapcsolják és ráakasztanak egy gombot a bemenetre amely gombnak a prellezése miatt írnak egy k@rvára bonyolult eljárást, mellyel kiküszöbölik a nyomigomb okozta problémát. Hát lehet így is de egy kerámia kondi meg két ellenállás is megoldja , főleg ha minden le van időzítve a programban. Ott a módszer fentebb . Ha tizedmásodpercenként egyszer nézel rá a gombra és a mellékelt fotón látható módon kötöd be akkor a prellezést és a kapcsolódó programozási hókuszpókuszt el is felejtheted végleg.
üdv
(#) Frankye válasza Eregyenlouperi hozzászólására (») Okt 24, 2025 /
 
Közben írtam egy használható verziót, de ebben is van, ami szimpatikus. A delay eleve kiesett, a millis szóba jöhet, mert nem kritikus az idő. Ezzel együtt köszönöm a fáradozásod!
(#) benjami válasza Eregyenlouperi hozzászólására (») Okt 25, 2025 / 1
 
Ha szabályos időközönként foglalkozol a nyomógombokkal (te tizedmásodpercenkéntit írsz, én általában harmincadmásodpercenkénti lekérdezést szoktam használni, de ez részletkérdés), akkor szerintem teljesen felesleges a hardvert kondikkal és ellenállásokkal bonyolítani, nem okoz gondot a gombok prellezése. Én külön eseménykódot szoktam hozzárendelni a gomb lenyomásához, meg a gomb felengedéséhez, sőt nem sokkal bonyolultabb megoldani, hogy kezelve legyen a gomb ismétlése meg a rövid/hosszú gombnyomás utáni felengedés megkülönböztetése. Ezzel a PC billentyűzetéhez hasonló működést lehet megvalósítani.
(#) KoblogPerGyok válasza Frankye hozzászólására (») Okt 25, 2025 /
 
Szia!

Gondolom már minden megy, és akkor az jó, de miért nem használtál timer-eket?
Azok erre vannak kitalálva, bár a milis() is ere épül. De ha jól tudom az Arduino-ban is több timer van. Ha a timer 8 bites, akkor hamar lefut, azaz számlálók kellenek bele, nem túl bonyolult. A ComparA és társai is hasznosak lehetnek ekkor, de a sima overflow -val is megoldható, csak akkor a timer kezdeti értékét kell megadni.

A másik:
Tömbökbe ki leht szervezni a bekapcsolt és kikapcsolt időtartamokat, így a tömb indexeivel kell lépni csak.

Másik:
Ha a szünetek ideje számtani sorozat mentén nő, akkor egy sima változó, ami mindig x értékkel nő. Ebben az esetben tömb sem kell.
Valójában nem bonyolult annyira szerintem, mert egy olyan timer kell, amivel megoldod a 20s időt és egy másik, ami ezzel együtt indul, majd az szabályoza a ki/be kapcsolásokat. Ha a 20s lejár, akor ez a timer kinulláz, overflow flag 0, és leállít (illetve maga a 20s timer is leáll, alaphelyzetbe téve). Gombnyomásra logikai változó átáll, indulnak a timerek. Ezt a lábat simán lehet interruptra tenni is, így a fő ciklusban nem kell if a láb figyelésére.
Szóval pár volatile logikai és egyéb változó és a timer-ek megoldják, igen kevés processzor időt felhasználva, így a fő main-be lehetnek még egyéb kódok.

A timer-ek az órajellel vannak összekötve, számlálók valójában és bizonyos esetekben (overflow, comparA, stb) esetekben megszakítást kérnek, azaz addig, míg ez nem történik meg, a cpu futhat gond nélkül. Ezek a feladatok nem terhelik meg a cput annyira, hiszen más áramkörök dolgoznak a háttérben ekkor.
(bár ebben az esetben a sima serial olvasás írás lehet gondban lenne, mert ha jól emlékszem az is megszakításokkal operál, lehet ebből gond lehet, ezt nem tudom pontosan)

De:

Sima milis()-el is simán megoldható, interruptok nélkül is akár.
A lényeg, hogy a milis() a timer0-t használja. Ezért több nem lehet ha jól sejtem, de nem is kell feltétlenül.

De inkább kipróbálom, megpróbálom megírni.

Ha sikerül bemásolom ide.

REmélem menni fog!
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Okt 25, 2025 /
 
Ezt hoztam össze, ez sima millis()-el megy:

Bővebben: Link

A kód úgy megy, hogy a gomb megnyomása után 20 másodpercig villogtatja a piros LED-et, a zöld LED jelzi, hogy a 20 másodpercben vagyunk. Ha a 20 másodperc nem telt le, akkor a gombot hiába nyomjuk meg, nem veszi figyelembe.

A piros LED 1 másodpercig világít, utána 0.2s ig nem, majd megint 1 s de utána 0.4s-ig nem. A növekmény 200ms minden lépésben.

Könnyen átírható lenne akár tömbben tárolt időkre is szerintem.
A változók nevei azért ilyen hosszúak, mert így sokkal érthetőbbé válik szerintem, de 1-2 helyen hosszú lesz..

A szimuláció remélem elérhető, de a kódot ide is bemásolom:

  1. const int buttonPin = 2;  // nyomógomb
  2. int buttonState = 0;  //nyomógomb állapotát örző változó
  3. unsigned long husz_masodperc_start;
  4. unsigned long Piros_LED_bekapcsolasanak_pillanata;
  5. unsigned long Piros_LED_kikapcsolasanak_pillanata;
  6. unsigned long Piros_LED_bekapcsolt_allapot_ideje;
  7. unsigned long Piros_LED_kikapcsolt_allapot_ideje;
  8. unsigned long Piros_LED_kikapcsolt_allapot_novekmenye;
  9.  
  10. byte husz_masodperc_folyamatban;
  11. byte Piros_LED_starthoz = 0;
  12. byte Piros_LEDnek_kell_vilagitania = 1;
  13. int novekmeny_szamlalo=0;
  14.  
  15.  
  16. void setup() {
  17.   pinMode(LED_BUILTIN, OUTPUT);
  18.   pinMode(7, OUTPUT); // 20 sec-et jelző LED kimenetre.
  19.   pinMode(buttonPin, INPUT);
  20.  
  21.   husz_masodperc_start = 0;
  22.   husz_masodperc_folyamatban = 0;
  23.   Piros_LED_bekapcsolasanak_pillanata = 0;
  24.  
  25.   Piros_LED_bekapcsolt_allapot_ideje = 1000; // Ennyi ideig lesz bekapcsolva a LED
  26.   Piros_LED_kikapcsolt_allapot_ideje = 100;  // Ennyi ideig lesz kikapcsolva elsőként
  27.   Piros_LED_kikapcsolt_allapot_novekmenye = 200; // Ennyivel nő a kikapcsolt idő
  28.  
  29.   Piros_LED_starthoz = 1;
  30.   Piros_LEDnek_kell_vilagitania = 1;
  31. }
  32.  
  33. void loop() {
  34.   if (husz_masodperc_folyamatban == 0) {
  35.     buttonState = digitalRead(buttonPin);
  36.     if (buttonState == HIGH) {
  37.       husz_masodperc_folyamatban = 1;
  38.       husz_masodperc_start = millis();
  39.     }
  40.   }
  41.  
  42.   if (husz_masodperc_folyamatban == 1) {
  43.     // 20 másodperc
  44.     if (millis() - husz_masodperc_start < 20000) {
  45.       digitalWrite(4, HIGH); // Zöld LED világít
  46.  
  47.       // Piros LED villogtatása
  48.       if (Piros_LED_starthoz == 1) {
  49.         Piros_LED_bekapcsolasanak_pillanata = millis();
  50.         Piros_LED_starthoz = 0; // csak egyszer állítjuk be első futásnál.
  51.       }
  52.  
  53.       if (Piros_LEDnek_kell_vilagitania == 1) {
  54.         if (millis() - Piros_LED_bekapcsolasanak_pillanata < Piros_LED_bekapcsolt_allapot_ideje) {
  55.           digitalWrite(LED_BUILTIN, HIGH);
  56.         } else {
  57.           Piros_LEDnek_kell_vilagitania = 0; //hogy legközelebb az else ág fusson le, ahol kikapcsolva tartjuk
  58.           digitalWrite(LED_BUILTIN, LOW);
  59.           Piros_LED_kikapcsolasanak_pillanata = millis();
  60.           //Szünet növekmény számlálójának növelése:
  61.           novekmeny_szamlalo+=1;
  62.  
  63.         }
  64.       } else {
  65.         if (millis() - Piros_LED_kikapcsolasanak_pillanata < (novekmeny_szamlalo*Piros_LED_kikapcsolt_allapot_novekmenye+ Piros_LED_kikapcsolt_allapot_ideje)) {
  66.           //Ezzel a változóval valójában kikapcsolva tartjuk, mert a felső if -be nem fut bele
  67.           Piros_LEDnek_kell_vilagitania = 0;
  68.         } else {
  69.           //A kikapcsolási idő lejárta után, ezzel a változóval ismét az if ágba futunk bele, ahol bekapcsolva tartja
  70.           Piros_LEDnek_kell_vilagitania = 1;
  71.           //Kell a pontos időpont, hogy lehessen számolni vele, illetve fontos, hogy csak itt kapjon értéket
  72.           //mert máshol esetleg minden esetben kapna, így a feltétel mindig teljesülne.
  73.           Piros_LED_bekapcsolasanak_pillanata=millis();
  74.         }
  75.       }
  76.  
  77.     } else {
  78.       //Minden érték kinullázása és minden LED kikapcsolása.
  79.       digitalWrite(4, LOW);
  80.       digitalWrite(LED_BUILTIN, LOW);
  81.       husz_masodperc_folyamatban = 0;
  82.       Piros_LEDnek_kell_vilagitania = 0;
  83.       Piros_LED_starthoz = 1;
  84.        novekmeny_szamlalo=0;
  85.     }
  86.   }
  87. }


Régen írtam Arduino kódot, ráadásul Timer-ekkel szoktam megoldani, ezért lehet ezt még egyszerűsíteni esetleg, illetve nem tudom pontosan, hogy maradt-e benne felesleges váltizó vagy sem.
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Okt 25, 2025 /
 
És ez a rész már nem is kell bele:

  1. // Piros LED villogtatása
  2.       if (Piros_LED_starthoz == 1) {
  3.         Piros_LED_bekapcsolasanak_pillanata = millis();
  4.         Piros_LED_starthoz = 0; // csak egyszer állítjuk be első futásnál.
  5.       }


Mikor elkezdtem akkor kellett csak, ezt nem feltétlen kell már bele. A fejlesztés elején kellett, de a későbbi változók mint például a "Piros_LEDnek_kell_vilagitania" megoldja ezt a problémát.
A hozzászólás módosítva: Okt 25, 2025
(#) Frankye válasza KoblogPerGyok hozzászólására (») Okt 26, 2025 /
 
Köszönöm szépen a fáradozásod!
(#) TavIR-AVR válasza TavIR-AVR hozzászólására (») Okt 28, 2025 /
 
Qualcomm-Arduino: amikor a nyílt hardver találkozik az ipari óriással

Bővebben: Link
(#) TavIR-AVR hozzászólása Okt 28, 2025 /
 

Arduino UNO Q és használata

Arduino UNO Q – Az új korszak kezdete: Linux és valós idejű vezérlés egy lapon.

Hátha egyszer még előkerül...

Bővebben: Link


Valakinek van tapasztalat vele? Az USB C-re rakott video nélül már el sem indul?
(#) cua válasza TavIR-AVR hozzászólására (») Okt 29, 2025 /
 
En meg nem lattam megvasarolhato peldanyt, kiveve ezt az Aliexpress-en.
Bar nekem jok a tapasztalataim az ottani (Aliexpress) rendelesekkel, de ezt meg nem mertem bevallani
(#) sargarigo válasza cua hozzászólására (») Okt 29, 2025 /
 
18 rugó: Bővebben: Link
(#) sargarigo válasza (Felhasználó 32034) hozzászólására (») Okt 29, 2025 /
 
Igen, én is láttam, de legalább "natív" forrás
(#) cua válasza sargarigo hozzászólására (») Okt 30, 2025 /
 
Igen, lattam , de ez egyelore csak elorendeles. Mondjuk nekem nem olyan surgos, mostanaban van mit epiteni, sorban allnak a hobby projectek
Egyet mindenkepp kell majd vennem, csak hogy lassam mit tud, mire tudom (tudnam, ha lenne idom) hasznalni..
(#) Bakman válasza (Felhasználó 32034) hozzászólására (») Okt 30, 2025 /
 
Vajon a Raspberry kihívójának szánták az UNO Q-t?
(#) cua válasza (Felhasználó 32034) hozzászólására (») Okt 30, 2025 /
 
Nekem 3 darab Pi 4-en (8GB) fut itthon egy kubernetes cluster, teljesen megbizhato. Nem hasznalom low level, idozites-kritikus celra, csak mint altalanos 'szerver'-t.
Ez az Unu Q egy uj kategoria, egyelore nem nagyon latom mivel lehetne osszehasonlitani
(#) gyula84 válasza TavIR-AVR hozzászólására (») Nov 3, 2025 /
 
Kipróbálom, ha nem felejtem el ezt az USB-C dolgot.
(#) vargham válasza cua hozzászólására (») Nov 3, 2025 /
 
Dehogy új. Évek óta vannak ilyen pici Linuxos cuccok. Nekem például kb 6 éve itt van egy Onion Omega 2.
(#) vargham válasza (Felhasználó 32034) hozzászólására (») Nov 3, 2025 /
 
Ezen valóban nincs plusz MCU.
Olyan megoldást viszont láttam többet is, ahol egy tokon belül van egy CPU és egy teljes mikrokontroller. A CPUn fut a komplex OS, hálózatkezelés, stb. Az MCU pedig intézi a realtime feladatokat. Az ST is kínál ilyeneket.
(#) cua válasza vargham hozzászólására (») Nov 3, 2025 /
 
Az messze nem ilyen kepessegu, mint ez board.
En is regota hasznalok BeagleBone (Black)-et, ez ugye mosolyogva viszi a QBUS es UNIBUS kartyak emulalasat regi PDP 11-es gepekben.
(#) gyula84 válasza (Felhasználó 32034) hozzászólására (») Nov 4, 2025 /
 
Itt le van írva minden Bővebben: Link
(#) kobold333 válasza (Felhasználó 32034) hozzászólására (») Nov 7, 2025 / 1
 
Kedves tki. Végre sikerült rászánni magamat, és PUTTY segítségével ezeket az alap kódokat beírtam próbaként. ÉS sikerült előrébb lépnem... Amint látom, jó sok dolgom lesz átírni a programomat ilyen működésre. És biztosan kell a gondolatmeneten is változtatni. Már előre égnek áll a hajam, de valamikor veszek egy nagy levegőt és nekilátok. Persze a programot is át kell néznem, mert azt is elfelejtettem... Hmm. Köszönöm a néhány útmutatást.
Következő: »»   864 / 872
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