-
IT café
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
-
zsolti_20
senior tag
Valaki talált jobb megoldást a sima nyomógombra? Olyasmit keresek mint ez, csak egy gombosat. Létezik ilyesmi?
-
zsolti_20
senior tag
válasz Gergosz2 #11655 üzenetére
Olyasmit keresek ami nem ez a kattanós verzió, hanem inkább olyan a gomb lenyomása mint a billentyűzet.
Ennél a gombnál a probléma az hogy a 4 pontos ahol rögzítve van a fém része egy idő után felválik és cserés lesz a gomb.
Bár jobban megnézve lehet az általad linkelt nem is a kattanós verzió, szóval megfelelő lesz.
[ Szerkesztve ]
-
tonermagus
aktív tag
Halihó!
Lehet hogy kicsit túlbonyolítom a dolgokat, hátha tudtok benne segíteni:
Sajnos még sok mindenem nincs meg hozzá, így csak elméleti szinten próbálom összerakni:Motorcsónak projekt.Flysky távirányító 6 csatornával. A vevő egység 6 csatornáját rákötöm rákötöm az arduinora 6 pontjára bemenetként feldolgozásra. Az arduino-t 2 output lábát pedig összekötöm kettő ESC signal portjával. A két ESC-et megtáplálom egy LiPo-ról és 1-1 ESC-re rákötök 1-1 BLDC motort. Az egyik ESC-ről pedig megtáplálom az arduino-t 5V-on.
Kérdés hogy hibás-e valahol ez az elméleti elképzelés? 1 lipo-t hogy/mivel tudok összekötni két ESC-el?
Illetve szeretnék még 2 servo-t is meghajtani. Azt ebben az elképzelésben elég csak rákötni az arduino 2 pwm-es portjára? Vagy azt meg kell hajtani valamivel?
[ Szerkesztve ]
-
zsolti_20
senior tag
Lehetséges egy mappában lévő fájl leellenőrzése, hogy létezik-e az SD kártyán? A csavar az egészben hogy a fájl neve egy változó.
"if (SD.exists("asd/",filename)) {"
Ezt próbáltam használni de sajnos nem működik. az "asd" lenne a mappa neve a filename pedig a fájl neve ami benne van.
-
DigitXT
félisten
válasz zsolti_20 #11659 üzenetére
Bizonyára. A trükk az, hogy amit leírtál, az két paraméter megadása,
logikus, hogy nem működik, ha az adott függvény egy paramétert vár.
Össze kéne fűzni egyetlen változóba a dolgot, s azt átadni neki. -
zsolti_20
senior tag
válasz DigitXT #11660 üzenetére
De nem értem miért működik a kód ha nem adok meg neki mappát. Amint próbálom megadni neki hogy az asd nevű mappában keresse a változót csak ezt a hibakódot kapom:
"no matching function for call to 'SDLib::SDClass::exists(const char [5], char [13])'"viszont ha kiveszem az asd-ot és csak a változó nevét adom meg akkor hibátlanul működik.
-
DigitXT
félisten
válasz zsolti_20 #11661 üzenetére
Mint írtam, az a vessző a paramétereket választja el, tehát ahogy a hibaüzenet írja:
az a hívás nem érvényes, hogy átadnál neki egy const char [5] és egy char [13]-at.
Ott egyetlen paramétert vár, tehát előtte össze kellene fűzni, pl. valami ilyesmiképp SD.exists(concat("asd/",filename))Csak most nincs előttem, hogy ez a concat megvan* natív C-ben, vagy az Arduino
féle Strings objektum kreálmánya, amit amúgy nagyon fikáznak ebben a cikkben...*: ha nincs, akkor persze meg lehet írni, de ez nem Arduino-specifikus dolog.
[ Szerkesztve ]
-
DigitXT
félisten
válasz zsolti_20 #11668 üzenetére
Ilyenkor célszerű felütni valami referencia dokumentációt, pl. mondjuk ezt: [link]
bool SdFat::exists ( const char * name )
Test for the existence of a file.
Parameters:
[in] name Name of the file to be tested for.Returns:
true if the file exists else false.Vastagítás tőlem: ennek nem lesz jó a String objektum, ha amúgy azt használsz:
szerencsére erre is van megoldás, konkrétan átkonvertálja karaktertömbbé.[ Szerkesztve ]
-
zsolti_20
senior tag
-
zsolti_20
senior tag
válasz DigitXT #11669 üzenetére
Ez is fura, hogy a a filename változó nevén létre tudja hozni, de ha ugy adom meg hogy:
string var1 = filename;
string var2 = "kecske";
string x = var1 + var2;akkor a string x-el sem hozza létre a fájlt.
Persze, itt a kód részlet:
String var1 = filename;
String var2 = "kecske/";
String comb = "";
comb = var2 + var1;
//Check file name exist?
int str_len = comb.length() +1;
char char_array[str_len];
comb.toCharArray(char_array, str_len);
Serial.println(str_len);
Serial.println(char_array);[ Szerkesztve ]
-
DigitXT
félisten
válasz zsolti_20 #11672 üzenetére
Az csak elírás, hogy egyszer kis string, másszor meg nagy String? Csak mert
nem ugyanazt jelentik. A String az egy objektum, annak van "+" művelete. Míg
a string az nem objektum: talán így le sem fordul a kód, ha kisbetűvel írtad...A "filename" amúgy micsoda? Azt hol definiáltad, és hogyan kap értéket?
Na igen a 8.3 is befigyel, de így nehéz debugolni, hogy csak a fél kód van meg. -
Janos250
őstag
válasz zsolti_20 #11675 üzenetére
Vagy innen:
http://www.cplusplus.com/reference/cstdio/sprintf/Hogy ismételjem önmagam:
"amikor írunk egy programot, nem úgy kell gondolkodni, hogy hogyan írjuk ezt "Arduinóban", hanem, hogy hogyan írjuk ezt C++-ban"
https://prohardver.hu/tema/arduino/hsz_11576-11576.htmlRá-rácsodálkoznak arduinosok egy-egy C++ osztályra, függvényre, hogy ezeket nem, vagy ritkán írják az Arduino tutorialokban, pedig tudja.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
tonermagus
aktív tag
Sziasztok!
Egy szénkefés DC motorhoz használt ESC-et jól sejtem hogy teljes egészében lehet helyettesíteni egy L289N vagy TB6612FNG-el? Ezekben is van BEC, tehát táplálhatóak róla a szervók és Arduino ugye?
Mert akkor nem költök 7.000 Ft-ot egy ESC-re ha egy 1.200 Ft-os TB6612FNG-is meg lehet oldani ugyan azt...
-
zsolti_20
senior tag
válasz DigitXT #11676 üzenetére
Tudtam, hogy nem szabad szabad ennyire örülni. Beépítettem a főkódba és most megvan a sprintf, de amint használni akarom, kifagy az egész. Ha változó helyett megadok neki egy stringet pl "kecske.TXT" akkor lefut a kód. Talán a konvertálásnál kellene valamit csinálni? Nem megfelelő neki a string ilyen formában?
-
DigitXT
félisten
válasz zsolti_20 #11679 üzenetére
Nézd, programozni nem lehet csak ennyire elmesélős szinten. Nem tudjuk,
pontosan mit csináltál azzal a sprintf-fel, mibe akartál vele írni mit... Azt se,
hogy debug esetén mit látsz: az alap C programozást célszerű megismerni.
Kifagy az egész? Már mi? Az arduino? Végtelen ciklusba kerül a kód? Nincs
lefoglalva előre a memória? Nem nullára végződik a karakter sorozat? -
nagyúr
válasz tonermagus #11678 üzenetére
Szénkefés motorhoz hogy használsz te ESC-t?
-
zsolti_20
senior tag
-
DigitXT
félisten
válasz zsolti_20 #11686 üzenetére
OMG: nyilván... De az nem is volt benne az eredeti kódrészletedben...
Bepakoltál 8 db byte-ot egy közelebbről meg nem határozott tömbbe és kalap.
Mivel a print a lezáró nulláig megy, s az nem volt benne, ettől már "fagyhatott":
amiért akkor működik, amikor megadtad neki az inicializáláskor a fájlnevet, az
az, hogy az implicit belerakja a lezáró nullát. Tudom, hogy elsőre nem annyira
triviális a karaktertömb / mutató kérdés, de ez alapvetően C, és nem Arduino...Szerk: sajna a pastebint nem tudom megnézni a céges gépen, ebédszünetben
telefonról néztem, aztán ennyi maradt meg belőle a fejemben.[ Szerkesztve ]
-
zsolti_20
senior tag
válasz DigitXT #11687 üzenetére
Akárhogy próbálom ezzel is ugyanúgy lefagy az egész.
char data[100];
char* myName = "asd/";
char filename[] = "00000000.TXT";
char* Name = filename;sprintf(data, "%s%s", myName,Name);
if (writeFile.open(data, O_RDWR | O_CREAT | O_AT_END))
{
Serial.println("WWW");
writeFile.close();
}És módosítottam az idő lekérésnél is ahogy írtad.
SZERK.:
sprintf(data, "%s%u", myName,Name);-ra módosítva létrehozza a fájlt fagyás nélkül de a file neve 270 lesz az időpont helyett. OMG?![ Szerkesztve ]
-
zsolti_20
senior tag
válasz DigitXT #11687 üzenetére
És meglett a probléma!!!
Ez volt a helyes sprintf:
a myName a könyvtár neve pl asd/
sprintf(filename, "%s%02d%02d%02d.TXT",myName, now.minute(),now.month(),now.year());
Köszi mindent.
Nem hittem volna, hogy egy ilyen viszonylag egyszerű dologgal eleszek kb 10 órán keresztül.
[ Szerkesztve ]
-
zsolti_20
senior tag
válasz DigitXT #11690 üzenetére
Nem tudom mit ronthatok el.
DateTime now = RTC.now();
filename[0] = (now.year()/1000)%10 + '0'; //To get 1st digit from year()
filename[1] = (now.year()/100)%10 + '0'; //To get 2nd digit from year()
filename[2] = (now.year()/10)%10 + '0'; //To get 3rd digit from year()
filename[3] = now.year()%10 + '0'; //To get 4th digit from year()
filename[4] = now.month()/10 + '0'; //To get 1st digit from month()
filename[5] = now.month()%10 + '0'; //To get 2nd digit from month()
filename[6] = now.day()/10 + '0'; //To get 1st digit from day()
filename[7] = now.day()%10 + '0'; //To get 2nd digit from day()sprintf(masodik, "%s%02d%02d%02d.TXT",konyvtar, now.day(),now.month(),now.year());
sprintf(filename, "%s%02d%02d%02d.TXT",konyvtar2, now.day(),now.month(),now.year());És kiíratásnál az egyik ezt mutatja:
konyvtar/03092019.TXT
Másik pedig ezt:
konyvtar2/03092019.konyvtar/03092019.TXTAzt szeretném hogy kiíratásnál ez legyen:
konyvtar/03092019.TXT
konyvtar2/03092019.TXTDe valamiért egybe olvasztotta őket.
-
nagyúr
válasz Gergosz2 #11691 üzenetére
Én ma hallottam először az ESC-ről, utána kellett gugliznom, de nem az jött le, hogy kimondottan a BLDC motorok vezérlőjét hívják így, megkülönböztetésképpen a h-hídtól, amit h-hídnak neveznek.
Visszatérve az eredeti kérdésre, a TB6612FNG "csak" egy h-bridge, semmi más. Esetleg lehet még mellette i2c chip + frekvencia generátor, mint pl a wemos d1 mini motor shield. -
DigitXT
félisten
válasz zsolti_20 #11692 üzenetére
Valószínűleg arról van szó, hogy csak mutatót definiáltál. Nem foglalva neki
megfelelő mennyiségű memóriát, írsz bele, a vakvilágba. Esetleg egymásra
írnak. A C ugye egy típusos nyelv... így nem lehet a kódoddal kapcsolatban
beszélgetni, hogy bemásolod egy részletét + állítasz valamit, hogy mit ír ki,
ám azt nem mondod meg, hogy melyik változóra, mikor, és mi az a változó.Szívesen segítenék, de ez alapján szerintem nem lehet. A konyvtar pl. egy
char[9]? És beleraktad, mondjuk hogy "konyvtar" az inicializálásakor? -
-
nagyúr
válasz zsolti_20 #11695 üzenetére
Miért nem mutatod meg az egész kódot!?
A "masodik" változó hol van definiálva? Jól látszik, hogy itt:printf(filename, "%s%02d%02d%02d.TXT",konyvtar2, now.day(),now.month(),now.year());
a "filename" változóba, amely egy 12 elemű több, beírsz egy 4 karakterrel hosszabb szöveget, ami azt jelenti, hogy felülírsz egy másik változóhoz tartozó memóriaterületet. Az a csoda, hogy egyáltalán lefut a kód.[ Szerkesztve ]
-
zsolti_20
senior tag
-
nagyúr
válasz zsolti_20 #11698 üzenetére
Ez meg hogy jön ide?
A filename annyi lehet, amekkorára előtte definiáltad. Ha többet írsz bele, azzal olyan megmagyarázhatatlan hibákat okozol, mint most is.Én többet nem segítek, amíg nem írod be az egész kódot. Bár szeretek nyomozni, és már tudom is, mit követtél el.
[ Szerkesztve ]
Új hozzászólás Aktív témák
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- DIGI kábel TV
- gban: Ingyen kellene, de tegnapra
- Premier előzetesen a Gray Zone Warfare
- Windows 10
- Poco X6 Pro - ötös alá
- Ukrajnai háború
- Debrecen és környéke adok-veszek-beszélgetek
- XPEnology
- További aktív témák...