-
GAMEPOD.hu
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
JozsBiker
aktív tag
Hát ha nem is egyszerre 255, de ha minden eszköznek fix ip címet adsz, ahogy én teszem, előbb-utóbb el tud az fogyni[...]
Az IP cím elfogyással kapcsolatban egy kis szösszenet. Bocs az offtopicért, de talán az érdekessége miatt tetszeni fog:
[ Szerkesztve ]
-
Blasius
tag
Sziasztok,
Nagyon különös problémával találkoztam. Nézzétek meg az alábbi kódrészletet. Ha a kódot úgy futtatom hogy a soroson író részeket kikommentelem, "nmea" nem számolódik jól. Ha a sorosra írás nincs kikommentelve, akkor "nmea" jól számolódik . Erre nem tudok gombot varrni. Jópár órám ráment mire rájöttem hogy ezzel van a hiba... Van valakinek esetleg ötlete hogy mi történik itt?
...
else if (inhibi == false
){nmea ^=rc; receivedChars[ndx] = rc; ndx++;
Serial.print(" nmea in calc ");
Serial.println(nmea, HEX);
Serial.print(" inhibi in nmeabuild: ");
Serial.println(inhibi);
Serial.print(" rc recorded ");
Serial.println(rc);
if (ndx >= numChars) {ndx = numChars - 1;}
}
...
A kódrészlet egy függvény része.
Az érintett változók a függvényen belül vannak definiálva a következõképpen:bool inhibi = false;
byte nmea = 0x00;
char rc;
static byte ndx = 0;
Kivéve ez, ami a kód legelején van, mert máshol is elérhetõ kell hogy legyen:
char receivedChars[numChars];
[ Szerkesztve ]
Ha ''a'' ram megy dualban ''b'' rammal, és ''c'' ram megy dualban ''b'' rammal, akkor ''a'' ram megy dualban ''c'' rammal?
-
Janos250
őstag
válasz Blasius #19703 üzenetére
Ennyiből nem látom át, de nem az a baj ugye, hogy "máshol is elérhetõ kell hogy legyen:", nincs volatile, hogy ne optimalizáljon a fordító?
volatile char receivedChars[numChars];
Továbbá - nem tudom mitől receive, tehát valahonnan jön - ahhoz is kellhet idő. Ehhez viszont Aryes javaslata a megoldás[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
"Mi az a 24"
Kétféle mask megadás terjedt el:
Az egyik (eredeti), hogy a mask 32 bitjében az első valahány bitet "folyamatosan" 1-re, az utána következőket pedig 0-ra állítod. Ezt használja pl. a windows
Másik, hogy /valamennyivel adod meg, hogy a mask első hány bitje egyes. A UNIX alapú rendszerek ezt használják, és ez persze jobb, mert nem lehet pl. a maskban mondjuk 50-et megadni, bármilyen kezdő is hálózat témában az illető.
A szabály a következő:
Van a Te IP címed, és van az, akivel dumálni akarsz.
A maskkkal mindkettőt bitenként logikai ÉS-eled. Azaz mindkettőben kinullázod azokat a biteket, ami a maskban 0.
Ha az így kimaskolt két cím "maradéka" megegyezik, akkor ugyanazon az alhálón, "dróton" van a két eszköz, azért küldesz egy broadcast (mindenkinek az alhálón szóló) üzenetet,
amivel megkérdezed, hogy kié az az IP cím. Ha valakié, akkor az válaszként elküldi a MAC címét, mert az alhálón nem IP, hanem MAC szerint kommunikálsz majd.
Ha senki nem válaszol, akkor levonod azt a következtetést, hogy nincs ilyen bekapcsolt gép -> hibajelzés. Ha valaki válaszolt akkor az küldi a MAC címét, és indulhat MAC cím alapján a kommunikáció. Ha a két maszkolt cím nem egyezik meg, akkor a gatewaynek (kapu a világ felé) kell küldened, és az ő dolga, hogy megkeresse, hogyan tovább, mert akkor az az állomás nem a Te alhálódon van.
Régen, amikor még nem a csillagpontos topológiát használtuk általánosan, hanem a busz topológiát, ott egyetlen koax kábelre voltak sorban felfűzve a gépek, akkor az szemléletesebb volt, mert akkor ami egy kábelen volt, az volt egy alháló.
Aztán, mivel egy gépen több alkalmazás is csatlakozhat a nethez (pl. két megnyitott Firefox), valahogy meg kell különböztetni, hogy ami válasz jön, az melyik FF-hez menjen. Ehhez az állomásod egyetlen IP címét még "kiegészíted a gépen belül még 2 bájttal", ennek a neve a port, amit a PHP átnevezett, ha jól emlékszem sessionra. Hogy kevesebben értsék meg, miről is van szó. Mivel az IPv6 már rengeteg IP címmel dolgozik, ott már az egy gépen belül is jut mindenkinek külön IP, ezért az IPv6-ban nincs port.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Blasius #19703 üzenetére
Az is lehet, ha bármi miatt (pl.) interrup, thread több szálú a program futása, akkor mutex ( lock() unlock() ) kéne használni. Nekem az utolsó sor is gyanús, hogy mi van akkor, ha előtte/közben/utána hajtódik végre valami kódrészlet, akár interrupttal.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Blasius
tag
Igen, egy delay(5) segített. Még egy másik helyen a kódban előfordult egy hasonló eset. Azta... itt ilyenek vannak?
@Janos250
volatile char receivedChars[numChars]; el nem fordult le. (A volatile nem tudom pontosan mit csinál).A kód soros partról olvas. Van egy függvény ami karakterenként beolvassa ami a soros porton van. Ezeket hozzá csapja char receivedChars[numChars] -hoz (még néhány más dolog is történik, crc számítás stb) Ha jött egy 0x0a a soroson, az adat fogadás befejezettnek tekintett, és a függvény egy boolt átvált igazról hamisra. Egy másik függvény kezd valamit a beolvasott receivedCharsal, majd visszaváltja a boolt. A második függvénynél reklamált a fordító a volatile miatt. A hármas példa alapján indultam el. https://forum.arduino.cc/t/serial-input-basics-updated/382007
[ Szerkesztve ]
Ha ''a'' ram megy dualban ''b'' rammal, és ''c'' ram megy dualban ''b'' rammal, akkor ''a'' ram megy dualban ''c'' rammal?
-
Janos250
őstag
válasz Blasius #19708 üzenetére
Bocs, nem tudom milyen kontrollert használsz. ESP32-n lefordul.
A volatile azt jelenti, hogy ha egy változót nemrégiben használt a processzor, akkor annak a tartalma a cache-ben van még, és ha nincs volatile, akkor onnan kivehető. Ha van volatile előtte, akkor minden egyes használatkor az eredeti helyőről kell beolvasni. Ez akkor létszükséglet, ha "valaki más " (pl. másik szál, interrupt) is változtat a változó értékén. Ilyenkor lehet figyelni pl. arra, hogy ha egy vektorba rakjuk az értékeket, és a foglaltságot növeljük, akkor mi történik, ha a kettő között kéri a program (pl. interrupttal) valamelyik értéket. A legősibb, hogy addig letiltjuk az interruptot, a korszerűbb meg a mutex, hogy nem engedjük, hogy másik szál használja.
Amit linkeltél, ott nem látok bajt a sorrendiséggel, vagy párhuzamos hozzáféréssel.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Dißnäëß
veterán
Sziasztok Urak !
Rég jártam erre
A DIY jegyében szeretném megcsinálni kezdôként életem elsô wifis termosztátját.
Az alap egy ESP8266 vagy 32-es, ez sztem mindegy, mindegyik jó az igényeimnek.
Hogyan védenétek ki egy esetleges áramszünet hatását ? Szóval eeprom-on kattogok még mindig, illetve hogy minden egyes beállítást
- vagy magában tárol el eeprom-on
- vagy induláskor felveszi az adatokat vmi szerverrôl, pl. MQTT-n, hogy mire álljon vissza, ami fut egy szünetmentes Pi4-en mondjukUtóbbinál nem kérdés, hányszor lehet hôfokot beállítani a rendszernek.
Elôbbinél is max a kis elemmel támogatott RTC+eeprom lehet az, ami az írások számában limitálhat. Mennyit tudnak ezek ? Elég lehet egy ilyen kis kieg. modul hozzá, melyben egy kétjegyû szám letárolódik, csak állításkor ?
Az ultimate question: hányszor állítgathatja az ember vajon úgy 20-30 év alatt a termosztáton a hôfokot, miután belakott vmit ?
Mehetne eleve minden a Pi-rôl is, igen, ha az szünetmentes, de a fûtést önállóra tervezném, szóval ha a Pi lehal vagy bármi anomália adódik, a termosztát akkor is tegye azt, ami a dolga, ezért nem központosítom a funkciót a Pi-be.
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
-
nagyúr
válasz Dißnäëß #19712 üzenetére
Én nem tudok mindenre válaszolni, csak örülök, hogy benéztél.
Esp32-n van permanens tár, ami nem EEPROM, de pont ilyen beállítások tárolására találták ki, még a hozzá való library-t is ennek megfelelően nevezték el (Preferences.h).
Én sem tudom, mit kell folyton állítgatni egy termosztátot... Amikor kazános fűtésű házban laktunk, vettem egy okosabb termosztátot, ahol időzítve minden nap minden órájára be lehetett állítani a hőfokot. Eleinte élveztem, játszottam vele, aztán elkezdtem szépen törölgetni a beállításokat, míg egyszer csak azt vettem észre, hogy mindent kitöröltem és már hónapok óta ugyanaz az egy a hőfok van beállítva.
[ Szerkesztve ]
-
ViZion
félisten
válasz Dißnäëß #19712 üzenetére
Ahogy Grandpa írta, nem kell túlgondolni, ezekre már gondoltak.
Enyémről írtam egy cikket, csak valamiért elnyelték a logout hullámai, nem tudom, h már publikus-e [link].
Mondjuk itt a termosztát maradt, a keringető lett ESP vezérlésű. Később ezt a Home Assistant fogja majd ellátni vezérléssel, egyelőre csak adatokat közöl vele.Termosztát állítgatás megint egyéni, nálunk folyamatos a kapcsolgatás, asszony random képes 25 foknál is kijelenteni, h fázik... megfogja a radiátort, az hideg -> hideg van bent. Már gondoltam, h csalok a hőmérőkkel, ráállítok +2-3 C°-t mindre Ez mondjuk csak a nappalira igaz, emeleten termofejek beállítva, annyi.
Hold on, trying to give a fuck... Nope, not Happening • Powered by Fedora Linux • "Az élet olyan sz@r, szerencsére a felén már túl vagyok" Al Bundy
-
Blasius
tag
válasz vargalex #19710 üzenetére
Na, tálalhatóbb formába hoztam a kódot. Íme:
const byte numChars = 128;
char receivedChars[numChars];
bool newData = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("<Johet>");
}
void loop() {
// put your main code here, to run repeatedly:
recvWithStartEndMarkers();
showNewData();
}
void showNewData() {
if (newData == true) {
Serial.print("new data came:");
Serial.println(receivedChars);
newData = false;
}
}
void recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
static byte ndxmea = 0;
byte endKa = 0x0a;
byte startKa = 0x24;
byte starKa = 0x2a;
byte nmea = 0x00;
char rc;
char nmeaRd[2];
long nmeaRdL;
bool inhibi = false;
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
if (recvInProgress == true) {
if (rc != endKa) {//delay(2);//?????????????????????????????????????????????????????????????????
if (inhibi == true) {nmeaRd[ndxmea]=rc; ndxmea++;}
else if (rc == starKa) {inhibi = true;}
else if (inhibi == false){nmea ^=rc; receivedChars[ndx] = rc; ndx++;
//delay(1);//?????????????????????????????????????????????????????????????????
if (ndx >= numChars) {ndx = numChars - 1;}
}
}
if (rc==endKa) {
nmeaRd[2] = '\0';
char * pEnd;
nmeaRdL = strtol(nmeaRd, &pEnd, 16);
if (nmeaRdL==nmea){receivedChars[ndx] = '\0';} // terminate the string
else {memset(receivedChars, '0', 6); receivedChars[7] = '\0';}
recvInProgress = false;
ndx = 0;
ndxmea = 0;
newData = true;
nmea =0;
inhibi=false;
}
}
else if (rc == startKa) {recvInProgress = true;}
}
}
A második függvényben lévő késleltetések (...delay(x)/???...) nélkül a kód nem megy rendesen. Viszont, ahogy Aryes tippelte, a késleltetéssel jól megy. Ha késleltetések helyett sorosra írás lenne akkor is menne jól. Hát, kicsit tákolt, de megy. Gondolom erre mondják hogy nem egy robosztus kód . De most már kíváncsi vagyok hogy mi lehet ennek a furcsa viselkedésnek az oka .
(nmea ...^=rc... az egyfajta crc számítás. A startKa karakter utáni karakterekre kell számolni. Aztán a soroson jön egy * (starKa), egy byte két karakter hex ascii-ként (00-FF, ez a crc) majd egy 0x0a karakter (sorvég). Ha a számolt és fogadott crc egyezik, akkor kiírja sorosra ami jött ahogy van. Ha a crc nem stimmel akkor kinullázza az első pár karaktert.)
Ez egy rendes arduino unon fut (atmega chip).Ha ''a'' ram megy dualban ''b'' rammal, és ''c'' ram megy dualban ''b'' rammal, akkor ''a'' ram megy dualban ''c'' rammal?
-
nagyúr
válasz Blasius #19716 üzenetére
Nem tákolt ez attól, hogy tettél bele késleltetést, miért lenne? Figyelembe kell venni a hardverek sajátosságait. Ha jól értelmezem, a GPS modul az adatot adagokban küldi az UNO-nak. Az UNO több sort vár a feldolgozáshoz, de a GPS egy sor után nem kezdi meg a következő adag küldését, hanem vár valamennyit (nyilván műszaki okból, nem kitolásból ). Neked ezt ki kell várni a fogadó oldalon.
-
Janos250
őstag
válasz Blasius #19716 üzenetére
Én nem látok benne hibát. Viszont most döbbentem rá, hogy én a Serial.begin után mindig teszek egy delay(1000)-t, de már fogalmam sincs, miért.
Valami itt van róla:
https://forum.arduino.cc/t/delay-for-serial-print/954782
Nem látok benne kivetni valót, én legfeljebb az if-eket Case-el oldottam volna meg, mert az jobban áttekinthető, de ugyanarra fordítódik.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
tibi-d
tag
Belefutottam egy problémába. A szereplők: Arduino Due, 24C256 EEprom.
Utasítás 1:
myMem.put(1000, 60.0);
myMem.get(1000, x); //x értéke ez esetben 0Utasítás 2:
float y=60.0;
myMem.put(1000, y);
myMem.get(1000, x); //x értéke 60.0Mi lehet a probléma forrása?
-
nagyúr
Jó ötlet! Ez esetben a
myMem.put(1000, (float) 60.0);
működhet. Nem kellene a fordítónak hibát jeleznie? 🤔Volt egy oldal, ahol leírták, hogy melyik Arduino boardon melyik adat típus hány bites, de nem találom. Arra emlékszem, hogy az UNO-n a float és a double is egyformán 32bit volt, de a Due-n már biztos nem így van.
-
weiss
addikt
Ezeket általában C++ template-tel implementálják, én legalábbis azt csinálnám. Annyi a lényege, hogy a függvényparaméter típusa fordítás közben dől el.
Valami ilyesmi talán:
template <typename T>
void eeprom::put(T what)
{
eeprom::write((void*)&what, sizeof(what));
}És akkor kb. bármit tudsz menteni.
[ Szerkesztve ]
I did nothing, the pavement was his enemy!
-
Dißnäëß
veterán
válasz its_grandpa #19713 üzenetére
Nem az a gond, ha nincs 230V, hanem amikor visszajön
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
-
ViZion
félisten
válasz Dißnäëß #19729 üzenetére
Jah, Kalandor külföldön van, majd lesz cikk.
Ez a megoldás _nálam_ jó, Neked csak útmutató/gondolatébresztő lehet.A kép HA dashboard, de nincs időm csinosítani, még van pár cucc, amit integrálni kellene, de nagy része fűtés, szal. pont nyár lesz, mire elkészül. Nem para, azt mondták, h jövőre is lesz tél.
Hold on, trying to give a fuck... Nope, not Happening • Powered by Fedora Linux • "Az élet olyan sz@r, szerencsére a felén már túl vagyok" Al Bundy
-
Dißnäëß
veterán
válasz its_grandpa #19731 üzenetére
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
VMatteo
őstag
Sziasztok,
Arduinozáshoz van valakinek esetleg valami kezdő anyaga, ami példaprogramokkal elmagyarázná az alapokat, lehetőleg magyarul?
Van egy starter kit, így egy-két dolgot össze lehetne építeni már az elején is.
Köszönöm előre is, ha tud valaki segíteniTisztelet a Gépésznek!
-
nagyúr
válasz VMatteo #19734 üzenetére
Szia! A kit mellé szoktak adni oktató anyagot, a tiédhez nem adtak?
Nézz szét itt: [link] az összes lényeges alap kapcsolás le van rajzolva. Valahol megvan összefűzve pdf formátumban, keress utána "Arduino basic connections by pighixxx" néven.
Példa programokkal tele van maga az Arduino IDE is, de ha valami konkrétan érdekel, a Google nagyon jól el tud látni tutoriallal és példa programokkal is.[ Szerkesztve ]
-
sonar
addikt
válasz VMatteo #19734 üzenetére
Banggood-on meg Ali-n is találni starter kit-eket bőségesen. Ha esetleg segítség kell a rendelésben, nyugodtan keress meg privátban
Idehaza nem igazán tudom, hogy hol lehetne beszerezni.A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
vargalex
félisten
Én úgy értettem a kollégát, hogy a starter kit már megvan...
De, hogy valami értelmeset is írjak:
A topikon is volt kolléga, aki készített videós tanfolyamot.
Illetve nem tudom, mennyire jó, de a TavIR-nek is van egy 60 napos ingyenes tanfolyama. Minden nap küldenek egy e-mail-t egy-egye témával.Alex
-
sonar
addikt
válasz vargalex #19737 üzenetére
A gyors olvasást még gyakorolni kell
Ezt a tavir-osat még nem is láttam. Csak a könyvet ismertem - Arduino programozás néven futott talán. Viszont most nem találom. (lehet, hogy a céges háló hátránya)
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
sonar
addikt
Arduino Programozási kézikönyv - ezt nem találtam meg múltkor.
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
lanszelot
addikt
Hello,
Vettem egy MQ-135 GAS SENSOR -t.
Az volt írva, hogy teljes dokumentációt adnak hozzá.
Hát egy nagy semmit adtak hozzá.
"They are used in air quality control equipments for buildings/offices, are suitable for detecting of NH3,NOx, alcohol, Benzene, smoke,CO2 ,etc."
Ezt tudja. De hogy választom ki mit mérek?
Vagy hogy a ppm érték mit takar?
Mert ha pl alkohol szintet akarok mérni, és co2 -t mér a lehelletben, akkor azt honnan fogom tudni, hogy most ivott, vagy csak co2-t mért ?
Nem találok arduino-hoz semmit hozzá.
Tudna valaki segíteni? -
lanszelot
addikt
Először is köszönöm szépen a választ.
Én nem találom egyikben sem a választ.
Mind a 3nál csak annyit fog mutatni, hogy mennyi ppm.
De mit mér azt nem tudni.
Az volt a kérdésem, hogy hogy lehet váltani a mérendő gázok között?
Legutolsó linkben is ott van, hogy több féle gáz mérésére képes.
De ennyi. Azt nem látom, hogy honnan tudni épp mit mér. -
olli
tag
válasz lanszelot #19744 üzenetére
Ez az érzékelő nem egyedi alkohol vegyi érzékelő, nem gázkromatográf, nem ilyen egyedi mérőeszköz: [link]
[link]
If you power off the heater letting the temperature goes down, you have to preheat it again, every time.
We can detect more than one gas, but, keep in mind that it's not a true single gas detection. The chemical resistance inside this sensor react (if heated), to more than one gas, it can not isolate a single gas. So, what you get by conversion, is a resistance value to a ppm value, of many gas. However, if just one gas changed, or the other gases remains almost constant, you can get that changes. If you are able to mantain constant values for all the gas, and modify just one gas, then you can obtain the gas response over the sensor. The builder of this sensor does this job, making the figure i use for gas convertion. You can not be shure you are measuring just one gas.
Also consider that, the chimical resistance degradate in a few years, I've read somewhere (can't remember well), 2 years.By cool !
-
ViZion
félisten
válasz lanszelot #19746 üzenetére
De mi a terv? Mit szeretnél mérni?
Ahogy fentebb, más szenzoroknál is elhangzott, ezek amolyan DIY/játék dolgok. Szal. tiszta levegőnél kapsz egy "etalon" értéket, ahhoz képest tudsz mérni, h milyen a levegő. De ez nem alkoholszonda, mivel több gáz is befolyásolja az eredményt. Ez egy nagyon alap szenzor, sokat ne várj tőle. Ahogy nézem a jobbféle ipari szenzorok 120 dodó felett vannak. Itt egy lista, válogass.Hold on, trying to give a fuck... Nope, not Happening • Powered by Fedora Linux • "Az élet olyan sz@r, szerencsére a felén már túl vagyok" Al Bundy
-
lanszelot
addikt
Hello,
Hogy tudom azt megoldani, hogy egy szöveg körül egy négyszög villogjon. Mintha villogó kerete lenne?
A négyszöget köré tudom rajzolni, de nem tudom villogtatni.
A szöveg és a négyszög is a "void loop" ban van
Új hozzászólás Aktív témák
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Xbox Series X|S
- Anglia - élmények, tapasztalatok
- Konzolokról KULTURÁLT módon
- BestBuy ruhás topik
- Milyen billentyűzetet vegyek?
- 3D nyomtatás
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- További aktív témák...