Hirdetés
-
PROHARDVER!
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
-
-
Dißnäëß
nagyúr
Ahh, én itt még nem tartok... csak ... ismerkedek.
Lesz mit gugliznom a hétvégénEgy csöves erősítőről van szó amúgy, várható élettartam 30-40+ év, és az Arduino-t nem csak adatok kijelzésére használnám, vagy mondjuk be-kikapcsolás és on/off vezérlésére (standby funkció), hanem cső élettartam, kondi élettartam, eleve 20 év után egy kisebb revízió, szóval ha addig villámot és hasonlókat megúszik és még mindig megy a kis kontroller benne (miért ne menne), az jó lenne. És talán még auto biasing-ot is implementálok vele, meglátom, össze tudom-e úgy hack-elni a kódot, hogy jó legyen, valami tranyóval kombinálva ügyesen PWM kimenetet, meglátom .. nem tudom .. még csak homályosan van meg az ötlet..
De legyünk realisták, szóval 10 év azért benne van. 20 is nagyon valószínű, nem vagyok az a nagy hifi adóvevő ember. Magamnak csinálom.
Elko-kat kellhet cserélgetni olykor-olykor, X üzemóra után, na meg magukat a csöveket ugye. Ezért kell, hogy legyen vagy 4 számlálóm, nullázási lehetőségem nyákra tett nyomógombbal (vagy rotational switch), ilyesmi.Remélem egy Micro elég erre, de szerintem igen, nem űrtechnika készül.
Az fejhallgató erősítőmben egy DFRobot Beetle dolgozik, tökély
Nagyon köszönöm Nektek a támpontokat.
Kígyó vére, béka hája, pók levedlett ruhája.. kondéromban lepke sül, kívánságom teljesül !
-
-
őstag
válasz Dißnäëß #16490 üzenetére
Igen, saját eepromba mentem unsigned long-ban (4byte) tárolom másodperc alapon. Cca. 130 évig elég.
De ha nem megy várhatóan többet szumma 49 napnál, akkor nyersen a millis értékét is beleteheted.Szerk.: EEEPROM.write és EEEPROM.read használatával ki tudod olvasni a byteokat (mondjuk fixen az eeeprom első 4 byteját használod erre) kiolvasod az elsőt, eltolod 8 bittel, hozzáadod a másodikat, eltolod 8 bittel, stb.
[ Szerkesztve ]
Mások számára a kondi fáradós, nekem farad-os...
-
Dißnäëß
nagyúr
válasz Tomika86 #16491 üzenetére
Köszi !!
Na, ezek tök jó támpontok, megleszek én is ezzel előbb-utóbb, remélem.Figyeltetnék vele sokminden egyéb üzemi paramétert is (nem csak üzemóra számlálás), és még egy pici OLED is jön.
Jó kis kód lesz, mire összerakom.
Eeprom kérdés: milyen eeprom, hova tároljátok le az értéket, hogy onnan induljon következő bekapcsolás során az első kiolvasáskor ? Sajátjában van ilyenre lehetőség, vagy külső eszköz ?
Kígyó vére, béka hája, pók levedlett ruhája.. kondéromban lepke sül, kívánságom teljesül !
-
Tomika86
senior tag
válasz Dißnäëß #16490 üzenetére
Én millis alapján növelek egy változót percenként, amivel pedig növeltetem az órát.
Mérem a feszültséget és mást is ADC-vel, így digitális formában rendelkezésemre áll a tápfeszültség. Ha egy megadott érték alá esik akkor mentem EEPROM-ba a perc és óra változót , bekapcsolásnál kiolvasva folytatja, valamennyi vesztés van, de nem gond.// Üzemóra számlálás
millis_aktualis = millis();
if (millis_aktualis - millis_elozo_oraszam > 60000) {
millis_elozo_oraszam = millis_aktualis;
Uzemora_perc++;
}
if (Uzemora_perc >= 60) {
Uzemora_ora++;
Uzemora_perc = 0;
}[ Szerkesztve ]
-
Dißnäëß
nagyúr
válasz razorbenke92 #16489 üzenetére
Ahhhh, szuper !!!
Reggel óta ezen kattogok, nagyon hasznos a megvalósítási ötletPontosan így képzeltem én is. Egyrészt ritkán írom így az eeprom-ot (nem óránként, pláne nem gyakrabban), másrészt egy hatalmas nagy kondit használok az Arduino feszstabja előtt, ami - még nem próbáltam, csak megvan az alkatrész - az összes LED-jével és mindennel együtt is vagy 10 másodpercig még ad neki időt bármire is, és csak utána megy a stabi szintje alá, ergo kikapcsol az eszköz.
Arduino Micro egyébként (Leonardo kompat.)
Graceful igen, abszolút. Ez a része O.K.
Nem Graceful: a nagy kondi elé arra az esetre van, ha működés közben áramszünet történik, vagy véletlen kikapcsolja az ember a főkapcsolót hátul (amire ő a kis trafójával direktbe van kötve). Ekkor - saját tápfeszét figyelve ugye - mindent elenged, üzemórát beírja magába és elfogyhat az áram.
A kódért lehet, hogy pitizek majd még Nálad Vagy legalább támpontért.. saját eeprom-jába írod az értéket, gondolom. (?) ..
Egész órákat hogy kezelted ? Vagy a mérés alapja nem órák ?
Pl. ha sok egész órák mellé lövés van (1:30 perceket megy mondjuk rendszeresen), akkor a 30 perceket is vegye hozzá... én arra gondoltam, minden számláló lementéskor +1 órát hozzáadok direkt. Így inkább megelőzöm a bajt, mint lemaradok számlálóval pár óráról...[ Szerkesztve ]
Kígyó vére, béka hája, pók levedlett ruhája.. kondéromban lepke sül, kívánságom teljesül !
-
őstag
válasz Dißnäëß #16488 üzenetére
Szia!
Én egy projektben úgy oldottam meg, ezt, hogy:
- Leválasztottam az MCU tápkörét egy diódával és tettem egy nagy kondit mellé, hogy csak az MCU-t táplálja, a többi fogyasztót ne.
- Figyeltem a betáp feszültséget egy interrupt lábbal
- Ha leesett a betáp, akkor felírtam eepromba az üzemidőt, amíg a kondi élve tartotta az mcu-t.Én erre mondjuk nem használtam RTC-t, csak az arduino saját számolását, ami pontatlanabb, de amire kellett, arra még úgyis bőven elég. Illetve én leherpákoltam minden LED-et róla, mert a fogyasztás jelentős részét azok tették ki.
Szerk.: Ha graceful shutdown-t használsz, akkor nem kell még a kondival sem foglalkozni.[ Szerkesztve ]
Mások számára a kondi fáradós, nekem farad-os...
-
Dißnäëß
nagyúr
Sziasztok !
Tudtok nekem segíteni egy Arduino Micro-hoz egy "üzemóra számláló" létrehozásában ?
Eszköz bekapcs, számláló indul, eszköz kikapcs, számláló adat megőriz valahol.Eltelt órákat szeretnék számolni. 3-4 eszközre, és akkor ha elérek egy bizonyos határértéket valamelyik számláló, például egyik számláló mondjuk 2000 órát, tudok jeleztetni a kütyüvel. Az érintett eszközt ekkor kicserélném, újjal helyettesítve, majd a számlálót nulláznám.
Erre a kütyüre szükségem lesz hozzá ? [link] Az RTC+elem miatt gondolom, igen.
Kígyó vére, béka hája, pók levedlett ruhája.. kondéromban lepke sül, kívánságom teljesül !
-
nagyúr
Ok, matekból sosem voltam 4-esnél jobb de régebben sokat szórakoztam mpu-val (csináltam is egy légegeret, bár abban 9axis gyro van, még egy egyensúlyozó robotot is elkezdtem, ami kifejezetten a fenti számítást használja a pozíciója meghatározásához, innen a tapasztalat), és nálam a nyers adatokkal működött, amit írtam. Vagy nem néztem elég alaposan, vagy rosszul emlékszem, vagy a lib, amivel csináltam, eleve már nem a nyers adatot adta vissza... De nálam 2 tengely összege mindig 1 (9.81) volt.
[ Szerkesztve ]
-
-
3 tengelyt nem tudok rajzolni, de 2 is jó. Képzeld el, hogy úgy tartod a mérőt, hogy az X és Y tengely 45 fokban áll a lefeléhez képest, ekkor ugye mivel lefelé 1G van, akkor a az X és Y tengelyen ennek a komponensei jelennek meg, ez kb. 0,7. És 0,7 + 0,7 = 1,4.
I did nothing, the pavement was his enemy!
-
nagyúr
Mivel egymással pont 90°-os szöget zárnak be, és gyorsulás irányának meghatározása nem volt feladat, simán ki lehet hagyni a szögfüggvényeket, és összeadni a tengelyek abszolút értékét. Empirikusan ellenőrizhető az állításom: egyszerűen kézben körbe forgatva a 3 tengely összege mindig 1 (~0.98) körül kell legyen, minden állásban.
-
gyapo11
őstag
válasz Tomika86 #16478 üzenetére
Úgy képzelem, hogy vagy vannak kitüntetett irányok a 3 dimenzióban és akkor ehhez kell fixen rögzíteni a gyorsulásmérőt, vagy mérés előtt kell mozgatni a három koordinátatengely mentén, és a mért adatokból számolni tovább.
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
-
nagyúr
válasz Tomika86 #16473 üzenetére
Egyszerű, mivel csak gyorsulásmérőről van szó, összeadod a 3 tengely adatait, és levonsz belőle 1-et (a gravitációt, ami állandó, mert ugye szabadesésnél a 3 tengely összege 0), ami marad, annyi a mért gyorsulás. Ez természetesen addig igaz, amíg egyenes úton, vízszintesen halad az autó, amint függőleges mozgást is végez, már tudni kell a műszer pontos szögét, hogy tudj kompenzálni.
-
Tomika86
senior tag
válasz razorbenke92 #16474 üzenetére
Van esetleg valahol minta rá?
Ezt találtam, ebben van matekozás, de nem tudom jó-e nekem?
[link] -
őstag
-
Tomika86
senior tag
Sziasztok!
Van egy MPU-6050-es gyorsulásmérőm (GY-521). Ha nincs meghatározott poziciója, tehát pl. kocsiban, elhelyezve, nem pont vízszintesen, nem pont függőlegesen, tudok mérni gyorsulást/lassulást? Mondjuk feltételezve a panel alja fog előre nézni, de nem tudom milyen szögben a vízszinteshez.
Köszönöm!
-
őstag
-
gyapo11
őstag
válasz Dißnäëß #16468 üzenetére
Nem tudom mennyi zaja van a triaknak, de nálad 230-at fog kapcsolni trafóra, utána tápegység kondikkal, nem hiszem hogy megjelenne a hangszórókon.
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
Dißnäëß
nagyúr
válasz gyapo11 #16467 üzenetére
Sziasztok, igazság szerint mindennek van zaja, még az ellenállásoknak is. Kérdés, mennyi, ugye. Tranziens nem annyira érdekes számomra, h foglalkozzak vele, inkább az érdekel, tesz-e audio erôsítô felhasználás szempontjából szignifikáns zajt a tápra a szilárdtest relé, tekintettel arra, hogy félvezetô. Ha nem, vagy teljesen felesleges aggódnom miatta, megnyugodtam és köszönöm a választ.
Kígyó vére, béka hája, pók levedlett ruhája.. kondéromban lepke sül, kívánságom teljesül !
-
gyapo11
őstag
-
tibi-d
tag
válasz Dißnäëß #16465 üzenetére
Szia!
A szilárd test relének van egy jó tulajdonsága, hogy mindig a vezérlés megjelenése utáni első nullátmenetnél kapcsol be, és a megszűnés utáni nullátmenetnél kapcsol ki. Így semmilyen tranziens nem keletkezik. A hálózaton már meglévővel a szilárd test relé sem tud mit kezdeni. -
Dißnäëß
nagyúr
válasz Janos250 #16464 üzenetére
Köszi Urak és Weiss-nek is.
Van a szilárdtest relének hátránya alábbi felhasználásban ?
Erôsítô.
Hátul kézi tápkapcsoló. Ha ott bekapcsolom, az arduino áram alá kerül - ez a standby mód kb. Figyeli az elején lévô nyomógombot (amit debounce-al kombináltam). Ha ezt 1x megnyomom, behúzna és megtartana 3 további relét, ezek lehetnek szilárdtestek is (?) - 250, 250, 50VA toroid hálózati trafók, a tényleges erôsítô âramkörök indulásához.
Kikapcsoláskor pedig elengedné (újabb pushbutton nyomás). Mivel normally off a relék logikája, áramszünet esetén természetesen minden elenged és visszaáll alapállapotba.
Van a szilárdtest reléknek zaja, ami akkora, hogy átmegy a toroidokon, graetz-en, pufferkondi blokkon ? (Szerintem ha van is pici, totál elnyelôdik a trafókban).
Ilyen szempontból kérdezem, jó-e nekem a szilárdtest.
(+ Extrán kell/érdemes védeni ôket ? Pl. villám, ESD..)
[ Szerkesztve ]
Kígyó vére, béka hája, pók levedlett ruhája.. kondéromban lepke sül, kívánságom teljesül !
-
-
Dißnäëß
nagyúr
válasz Janos250 #16461 üzenetére
Sziasztok,
pici Arduino-val (5V) szeretnék megtartani 230V/5A mechanikus, NO relét, 250mW a tekercs fogyasztása, megoldható ez direktben 1 pin-rôl szerintetek, vagy egy kis tranzisztor segítségét kérjem ?
Vagy totál modellfüggô ?
A kiszemeltem, de fogalmam sincs, mit bír. (Leonardo 40mA).
[ Szerkesztve ]
Kígyó vére, béka hája, pók levedlett ruhája.. kondéromban lepke sül, kívánságom teljesül !
-
Janos250
őstag
válasz its_grandpa #16458 üzenetére
Egyébként ezt írja ki:
HTTP/1.1 200 OK
Date: Mon, 15 Nov 2021 09:54:09 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1Szerény hálózati ismereteim szerint ez jó!
Mellesleg ott van az elején, hogy tutorial, nem használatra szól, mert ennek így semmi értelme nincs, hogy a Google válaszának első 5 sorát kiíratjuk!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 Janos250 #16456 üzenetére
Látjátok, ennyi eszem van. Már kikapcsoltam a gépet, amikor eszembe jutott, hogy basszus, a printf a régi C-ből maradt, a string meg C++, persze, hogy nem tudja kiírni.
Ez természetesen jól kiírja:std::cout << "encoded2_cpp_string:" << encoded2_cpp_string << "\n";
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 its_grandpa #16458 üzenetére
Nem akarlak meggyőzni. Szabad az út, lehet bárkinek szebben megírni, és megosztani. Van hely a prohardveren, nem foglal túl sok helyet, egy szöveges program. Nem a szépség, hanem a minél könnyebben érthetőség volt a cél.
Mitől lenne terminálva?
Attól, hogy van terminálva a bejövő karakter sorról.
"A költő vélhetően 5*200 karaktert szeretne olvasni és kiírni."
Bizony, nem mindig sikerül a költő szándékát kitalálni.fgets: https://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
its_grandpa
tag
válasz Janos250 #16434 üzenetére
Szerintem nem szép de legalább nem is jó, viszont észérvekkel meggyőzhető vagyok.
char inputChars[200];
for (int i = 0;i<5;i++){
fgets(inputChars, 199, filePointer);
printf("%s", inputChars);
} ;A költő vélhetően 5*200 karaktert szeretne olvasni
és kiírni.
Az inputChars tömb azonban nincs terminálva ( inputChars[200] mitől lenne "\0" ?) ezért vannak kétségeim.
Meg lehetne ezt szebben is, #define-al vagy sizeof()-al. -
Tankblock
aktív tag
válasz Janos250 #16448 üzenetére
A tömb fix méretű egymást követő foglalt egységek a memóriában, a pointer meg egy memória címet tároló memória cím, ahova mutat az lehet bármi pl nullpointer, tömb egy eleme, ami nem feltétlenül az első eleme.....
const char * amit a c_str() fv visszaad az a String osztály belsőmemóriájának első elemére mutat, és nem engedi változtatni annak értékét. Szép is lenne, ha engedné....
Release the Beast....
-
Janos250
őstag
A francba!
Aprintf("encoded2_cpp_string:%s\n",encoded2_cpp_string);
nem tudja kiírni, ha karakterenként szedem ki, benne van.
Na, akkor hogyan kell printf-el stringet kiíratni?Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
-
Janos250
őstag
Köszi mindenkinek, mára befejezve.
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 ekkold #16450 üzenetére
Azt hiszem, mindketten ugyanarról beszélünk, csak más nyelven:
Idézet a netről:
Az egydimenziós tömbök (vektorok) és az egyszeres indirektségű („egycsillagos”) mutatók között teljes a tartalmi és a formai analógia.int *p;
p = &a[0]; vagy p = a;A legtöbb C++ fordító az a hivatkozásokat automatikusan *(a+i) alakúra alakítja, majd ezt a pointeres alakot lefordítja.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
ekkold
Topikgazda
válasz Janos250 #16448 üzenetére
Deklaráláskor nem ugyanaz történik. A használatában vannak hasonlóságok.
A char * egy pointer tipusú változó, ami karakterre mutathat (persze lehetnek egymásután karakterek a memóriában), de mutathat pl. nullára is (nullpointer), vagy pl. egy tömb kezdőcímét is belemásolhatjuk.
A char[ ] egy karakterekből álló tömb, ami a szögletes zárójelek nélkül a tömb kezdőcímét mutatja mint pointer.[ Szerkesztve ]
http://skory.gylcomp.hu/ http://www.skory.z-net.hu/ https://skori.hu/ https://skori.spacetechnology.net/
-
Janos250
őstag
Na, már van némi haladás, de még mindig nem OK.
Hogyan tudom beletenni egy cpp stringbe?char* buf = new char[encoded2.length()+1];
encoded2.toCharArray(buf, encoded2.length()) ;
buf[encoded2.length()+1] = '\0';
printf("buf:%s\n",buf); // ez jó
string encoded2_cpp_string ;
encoded2_cpp_string = string(buf) ; / ehelyett mi kell????
printf("encoded2_cpp_string:%s\n",encoded2_cpp_string); // ez nem jót ír kiAz amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
ekkold
Topikgazda
válasz Janos250 #16446 üzenetére
char akarmi[ 100]; //
Ez lefoglal 100 bájtot adott kezdőcímmel, azért nem adhatsz értéket a ilyen módon, hogy akrami = ... mert ahhoz módosítani kellene a címét, viszont a lefoglalt memória adott területen/címen van. Igy az akarmi szögletes zárójelek nékül, gyakorlatilag egy pointer konstans.char * akarmi//
Ez csak egy pointert hoz létre, ami mutathat bárhová, (kaphat tetszőleges értéket) de a pointerhez nem foglal le memóriaterületet. Tehát ha létező c stringre mutat akkor lehet egy tömbhöz hasonlóan használni, egyéb esetben elszállhat a program.A c string egy olyan karaktertömb ami nullára végződik (ez jelzi a tömb végét). Tehát van egy aktuális hossza, ami változhat is, és van a számára lefoglalt memóriaterület ami megszabja a maximális hosszát. Ha "túlírod" elszállhat a programod.
Azért tud jól működni az strcpy() a korábban felvázolt esetben, mert ott a pointer által mutatott szöveget, valós lefoglalt memóriaterületre másolod.
A pointerhez egyébként a malloc() függvénnyel lehet (standard c-ben, de talán arduinoban is) memóriát foglalni, azaz a maloc() által adott címet töltöd a pointerbe , és akkor a malloc() által lefoglalt nagyságú tömbként is használhatod.
Jelenleg kevered a tömb és a pointer funkcióját, működését. Ezeket kellene tisztázni elsősorban.
[ Szerkesztve ]
http://skory.gylcomp.hu/ http://www.skory.z-net.hu/ https://skori.hu/ https://skori.spacetechnology.net/
-
Janos250
őstag
válasz Tankblock #16445 üzenetére
Köszi!
Ott még mindig el vagyok akadva, hogy a String-ből hogy csinálok string-et.
A String-nek van a .c_str -je, de ez tulajdonképpen mit ad eredményül?
Ez nem egy char* ? A C stílusú string az nem karaktertömb? Vagy a
char akarmi[ ] az nem char* ?Hogyan rakom ezt a Stringet bele egy string-be?
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Tankblock
aktív tag
válasz Janos250 #16444 üzenetére
Szia
Ebben a függvény bemenétben a "const" annyit jelent hogy a függvény nem fogja/tudja a pointert értékét megváltoztatni. Ez egy String osztállyal tér vissza.
.c_str()
fuggvény viszont constchar *
pointerrel tér vissza amivel kezdeni illene valamit.
Vagy átmásolod másik memória területrestrcpy()
, vagy standard library -re egy példastd::string str;
char * writable = new char[str.size() + 1];
std::copy(str.begin(), str.end(), writable);
writable[str.size()] = '\0'; // don't forget the terminating 0
// don't forget to free the string after finished using it
delete[] writable;
[ Szerkesztve ]
Release the Beast....
-
Janos250
őstag
A függvény így néz ki:
String base64::encode(const uint8_t * data, size_t length)
{
size_t size = base64_encode_expected_len(length) + 1;
char * buffer = (char *) malloc(size);
if(buffer) {
base64_encodestate _state;
base64_init_encodestate(&_state);
int len = base64_encode_block((const char *) &data[0], length, &buffer[0], &_state);
len = base64_encode_blockend((buffer + len), &_state);
String base64 = String(buffer);
free(buffer);
return base64;
}
return String("-FAIL-");
}Mitől lesz ez const? A fene se érti
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
-
Janos250
őstag
Amit példának leírtam, még csak érteném a const okát, de ahonnan a probléma eredt, az ez volt:
String toEncode2 = "Hello World";
String encoded2 = base64::encode(toEncode2) ;
char proba_c_str[20];
proba_c_str = encoded2.c_str() ; //incompatible types in assignment of 'const char*' to 'char [20]'Miért lesz ez const, hiszen ő egy eredmény, amit a base64 ad?
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
Alapjában véve nem nagyon értem, hogy ez a const mikor, hol, mit, és miért csinál. A String ugyanúgy egy tömbben tárol. mint a C_string, azaz tömb, és a .c_str a pointert adja át.
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 PeterPH #16439 üzenetére
De, az megy, és jót csinál!
Kösz!
Na, el kell mélyednem ebben, hogy ezzel miért megy, és értékadással miért nem.Ezt se értem:
"char * strcpy ( char * destination, const char * source );Copy string
Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point)."A C string az nem egy char tömb?
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
nagyúr
válasz Janos250 #16436 üzenetére
Ha
printf("probaArduinoString=%s\n",probaArduinoString); // badarsagot nyomtat
akkor logikus, hogy ez is
printf("probaCpp_string=%s\n",probaCpp_string); // badarsagot nyomtat
ehelyett
printf("probaCpp_string=%s\n",probaCpp_string.c_str()); // nem badarsagot nyomtat
mert a printf c tömböt vár paraméterként(?)
-
Janos250
őstag
Szevasztok!
Már megint nyelvi problémáim akadtak ebben kérném a gyakorlottabbak segítségét!Mert ugyebár Luci Feri behozta az Arduinoba a szabványos (kisbetűs) string mellé a saját (nagybetűs) String típusát, és nekem valahogy nem megy a konvertálása ennek a Stringnek se stringbe, se C stílusú stringbe, mert Feri valahogy nem engedi. Pedig a Stringnek is van egy .c_str() tagfüggvénye, de ennek eredményét valahogy nem tudom beletenni semmibe. Különösen az utolsó sort nem értem. Mi a megoldás?
Ja, azt ne mondjátok, hogy ne akarjam konvertálni, mert én olyan vagyok, hogy akarom.String probaArduinoString = "Hello World" ;
printf("probaArduinoString=%s\n",probaArduinoString); // badarsagot nyomtat
printf("probaArduinoString.c_str()=%s\n",probaArduinoString.c_str()); // ez jo
// string probaCpp_string = probaArduinoString ; forditasi hiba
string probaCpp_string = probaArduinoString.c_str() ;
printf("probaCpp_string=%s\n",probaCpp_string); // badarsagot nyomtat
char proba_c_str[20];
// proba_c_str = probaArduinoString.c_str() ; // incompatible types in assignment of 'const char*' to 'char [20]'[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
Ide is bemásolom, hátha valamikor valakinek szüksége lesz rá, hogy szabványosan, fájlként írjon egy távoli szerverre, illetve olvasson róla:
/*
tutorial
receive data from remote server
*/
#include <WiFi.h>
#include <lwip/sockets.h>
const char* ssid = "**********";
const char* password = "**********";
void setup() {
Serial.begin(115200);
delay(2000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
printf("\nconnected to WiFi \n");
int socket_descriptor = socket(AF_INET , SOCK_STREAM , 0);
if (socket_descriptor == -1) {
printf("Could not create socket");
}
struct sockaddr_in connect_to_remote_server_addr;
connect_to_remote_server_addr.sin_family = AF_INET;
connect_to_remote_server_addr.sin_addr.s_addr = inet_addr("216.58.208.110"); // Google
connect_to_remote_server_addr.sin_port = htons( 80 );
if (connect(
socket_descriptor ,
(struct sockaddr *)&connect_to_remote_server_addr ,
sizeof(connect_to_remote_server_addr)
) < 0
)
{ // if < 0
printf("Connect error to remote server\n");
}
else {
printf("Connected to remote server\n\n");
} ; // end if
FILE* filePointer = fdopen(socket_descriptor, "r+");
if (filePointer == nullptr){ printf("\n\nnullpointer\n\n\n");};
fprintf (filePointer, "GET / HTTP/1.1\r\n\r\n") ;
char inputChars[200];
for (int i = 0;i<5;i++){
fgets(inputChars, 199, filePointer);
printf("%s", inputChars);
} ;
close(socket_descriptor);
} ; // end setup
void loop() {
}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 JozsBiker #16425 üzenetére
"Én az oldalamra ennek segítségével tettem be a kódot."
Én is
http://arduinouser.hu/esp32/wifisocket/index.htmRégebben itt ajánlottátok nekem a WEB-socketot, de fogalmam se volt mi az. Azt hittem, a klasszikus internet socket. Amikor rájöttem, hogy az egész más, elhatároztam, hogy írok egy hevenyészett leírást az ESP32-n az LWIP internet socket használatáról. Ez most történt meg. Majd egyszer a WEB-socketról is.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
Egy nem teljesen Arduino kérdés, csak félig.
Ha egy WEB lapon egy (Arduino) programot akarok leírni, el tudom azt viszonylag könnyen érni, hogy valami formázott módon jelenjen meg?
Például valahogy úgy, mint itt a topicban a programok?Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
nagyúr
válasz gyapo11 #16420 üzenetére
Igazad van, ez a legjobb megoldás, és "fordított logikát" se igényel. MPM: pedig az npn változat is pont ennyi alkatrészt igényel, csak még talán nem láttad így lerajzolva.
A zár-nyit probléma: igen, ez zavaros, de én (következetesen) fordítva használom, és úgy tudom félvezetőknél a hivatalos terminológia a kapcsolókhoz képest fordított, tehát a kapcsoló zárt állásban vezet, a tranzisztor nyitott állásban vezet (mint a vízcsap). Javítsatok ki, ha tévednék!
-
MPM
tag
#16417 its_grandpa:
Abban, hogy a gpio1/tx pinnek magas jelszinten kell lennie indításkor, igazad van, viszont abban nincs, hogy az rx/gpio3 csak input lehet, mert sikerült azzal a pinnel egy ledet meghajtani.
#16418 Aryes:
Köszi, így már minden világos!
#16420 gyapo11:
Köszi a tippet, viszont ez már nekem elég bonyolultnak néz ki egy relé vezérléshez -
gyapo11
őstag
Pnp tranzisztor is jó felhúzó ellenállással. Ha a pin lebeg vagy inputra van állítva, akkor ott magas szint lesz, a tranyó nyitott állapotban van, nem vezet. A relé tekercsének egyik pólus a testen, a másik a tranyón. Amikor a pin kimenetté válik és alacsonyra vált, akkor a tranyó zár és a relén átfolyik az áram, a relé zár.
Kicsit keveredős ez a zár-nyit, de itt azt mondtátok, hogy zár amikor vezet, nyit amikor nem vezet valami.
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
JozsBiker
aktív tag
Sziasztok !
Nemrég rendeltem a gyerkőcömnek egy ilyen kisautót innen :
Mivel már 8. -os így nem is elsődlegesen az autó miatt, hiszen valószínűleg nagyon gyorsan megunná ( bár én gyerekkoromban a fele királyságomat odaadtam volna egy ilyenért, de ez más téma :-) ), hanem hogy az Arduino világába egy kicsit bevezessem. Viszont most merült fel bennem, hogy egyáltalán alkalmas-e ez a "játék" erre. Mi a véleményetek, mennyire lehet kitanulmányozni, esetleg módosítgatni a szoftvert, mennyire alkalmas ez a cucc a kezdő lépések megtételére ? Köszi.
-
nagyúr
2. A kérdés ennél összetettebb. A relé bemenetének nem kell lebegni, csak lehúzó ellenállás helyett felhúzó ellenállást kell rá kötni, mivel a gpio0 magas szintet kér a boot ideje alatt. Ez viszont azt a problémát hordozza magában, hogy a relé a bootig bekapcsolva van, a bootnál megkapja a magas szintet, akkor kikapcsol, majd utána tudod a gpio-val újra bekapcsolni.
A FET-es megoldás ezt ki tudja küszöbölni, legfeljebb egy kisebb impulzust kaphat bekapcsoláskor, amit vagy elnyel a relé tekercse, vagy egy kondenzátorral ki lehet védeni. -
MPM
tag
1. Azért mert ez a 8 pin-es változat van nekem, és híján vagyok a pineknek, de most látom hogy a tx/rx-et is lehet használni, valószínűleg ez lesz a megoldás, mert működés közben nem kell kommunikálnom vele.
2. Nem tudtam, hogy lehet fordított logikával használni Ezzel a részével nem én foglalkoztam, és rá se néztem, de valóban az enyémet is lehet így használni. Ilyen esetben, ha lebeg a relé jelbemenete, akkor mi történik? Csak azért kérdem, mert ha tönkremegy valahogy a pin, és nem ad jelet, akkor magas jel hiányában mindig kapcsolni fog, vagy mindenféleképpen le kell húzni a földre, hogy kapcsoljon? (Gondolom az utóbbi.) A biztonság miatt érdekel, mert nem lenne jó ha az ESP tápellátásának megszűnése, vagy pinjének rövidrezárása után, folyamatosan kapcsolna a relé. (Bocs, az amatőr kérdésekért )
3. Aham, világos.[ Szerkesztve ]
-
nagyúr
Miért akarod mindenképpen arra a pin-re kötni a relét? Az összes többi pin már foglalt?
Miért nem használod egyszerűen fordított logikával a relét (és kötöd a vezérelni kívánt dolgot a NO helyett a NC-re vagy fordítva), és húzod fel a pint, ami nem okozna gondot?
A FET-es megoldás a fenti megoldás egy olyan variációja, ahol a relé bekötése marad úgy, ahogy most van, a vezérlő pin logikája megfordul, amit a FET visszafordítana: magas jelszintre a FET kinyit, és földre zárja a rá kötött relét.[ Szerkesztve ]
-
MPM
tag
Helló!
ESP8266-tal szeretnék egy relét vezérelni, azonban ha minden igaz, e bejegyzés és az általa hivatkozott hivatalos dokumentum szerint, ha a 0-ás pint (amit használni szeretnék) ha lehúzom a földre boot-oláskor, akkor a kódfeltöltő üzemmódban indul el az ESP (mivel ilyenkor még csak inputként tudnak működni a pinek).
Ha a relét rákötöm a 0-ás pinre, akkor gyakorlatilag lehúzom a földre, és így minden indításkor feltöltő üzemmód indul el, és nem a korábban rátöltött projekt.
Ennek megoldásában tudnátok segíteni? A hivatkozott stack exchange-s válasz azt ajánlja, hogy FET-en keresztül hajtsam meg. Sajnos az elektronikai tudásom eléggé hiányos még, így azt kérdezném, miért csak ezzel oldható meg, és milyet kell használnom?
Próbáltam csak diódát használni a 0-s jelnél (hogy csak kimenetként működhessen), ez miért nem elég ahhoz, hogy megakadályozzam a lehúzást? -
Tomika86
senior tag
válasz Tankblock #16412 üzenetére
Szia!
Kilógatni nem tudom, akkora lesz a panel mint a kijelző panele, és műanyag házban lesz.
Lesz rajta hátsó burkolat is, meglátom majd mennyire lesz jó, a közvetlen közelében jó lesz a wifi az már elég.Amennyire tudtam elpakoltam az alkatrészeket, illetve az antennán kívül alatta teljes terjedelemben réz
Köszi!
-
Tankblock
aktív tag
-
Tomika86
senior tag
Na még egy kérdés
Ha a panelre teszem a WROOM tokot, akkor az antenna alatt nem lehet semmi? Réz réteg sem (test pont)?
-
Tomika86
senior tag
Köszönöm!
Átterveztem a panelomat, tettem rá tüskesort is, nyomógombokat is. Aztán majd meglátjuk.[ Szerkesztve ]
-
őstag
-
LógaGéza
veterán
válasz Tomika86 #16406 üzenetére
Neked a kódba be kell írnod, hogy melyik Wifi hálózatra csatlakozzon OTA-t várva, és csak arra fog csatlakozni - tehát annyira biztonságos, mint amennyire a Wifi hálózatod
"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"
-
nagyúr
válasz Tomika86 #16406 üzenetére
Gpio 0 ugyanígy, felhúzva és gndre kapcsoló?
Bocs, de erre nem tudok válaszolni, csak ha kiguglizom, de addigra biztosan te is megtalálod rá a választ.
A kódot nem valószínű, hogy meg lehetne ilyen módon szerezni, inkább arra gondolok, hogy valaki megpróbálhat kártékony kódot feltölteni, vagy akár csak egy üres sketch-et, amivel működésképtelenné tenné az eszközt. Viszont biztos vagyok benne, hogy ez nem nekem jutott eszembe először, és meg lehet csinálni biztonságosan, de én még nem foglalkoztam ilyennel, csak tudok róla, hogy létezik és kb mire jó.
[ Szerkesztve ]
-
Tomika86
senior tag
-
LógaGéza
veterán
válasz Tomika86 #16399 üzenetére
... vagy ha nem akarod sűrűn módosítgatni a kódot, akkor akár egy darab vezetékkel is lehúzhatod földre ezeket a pineket, és akkor nem kell gombot tervezni még bele.
Esetleg beleraksz a kódba egy OTA library-t, és akkor tényleg csak egyszer kell ezt megcsinálni."Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"
Új hozzászólás Aktív témák
Hirdetés
- Samsung Galaxy S10 128GB, Kártyafüggetlen, 1 Év Garanciával
- Clevo N750BU(Terra 1542)15,6 FHD LED, I5 7200U,4Gb DDR4,uj 120Gb SSD,jó akku, töltő
- Nintendo Switch OLED 19.0.1 Dual-Boot Cfw + 128GB MicroSD + Atmosphere 1.8.0, 3 hó garival!
- XBOX ONE S 1TB, dobozában, gyári tarozékaival és 6 hó garanciával, Bp-i üzletből!
- XBOX ONE X 1TB, makulátlan szép állapotban, 6 hó teljeskörű és 1 év SW garanciával Bp-i üzletből!!
Állásajánlatok
Cég: Axon Labs Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest