-
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
-
Janos250
őstag
"Ha működik, akkor nem szabad megjavítani"
Én ezt mégis fordítva szoktam követni. Amikor működik, akkor 50 %-ban van kész. Akkor kell elemeire szétszedni, és logikusan újból, optimalizálva összerakni, kommentezni, változóknak beszélő neveket adni, bekezdésekkel, szóközökkel olvashatóbbá tenni, sortörésekkel az összetartozókat blokkba szedni, stb. :-)
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Tomika86
senior tag
Hogy lehetne egyszerűsíteni ezeket?
Nagyon sok helyen használom, jelenleg mindenhol külön használva, mindenhol külön ott vannak a lezáró karakterek
pl képernyő váltás:Serial2.print("page 0");
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Kép be és kikapcsolás:if (izzitas_be) {
Serial2.print("vis p15,1"); // Izzítás lámpa bekapcsolása
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
else {
Serial2.print("vis p15,0"); // Izzítás lámpa kikapcsolása
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
Ha txt-be küldökSerial2.print(F("t14.txt=\""));
Serial2.print(izzido_kiir);
Serial2.print(F("\""));
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);Serial2.print("x8.val=");
Serial2.print(beszivott_lev_hofok_kiir);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);[ Szerkesztve ]
-
Tankblock
aktív tag
válasz Tomika86 #17203 üzenetére
mivel nem látom a teljes kódot addig annyit tudok mondani:
void endData(void) {
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
és ezt mindenhova ahol aSerial2.write(0xff);
hármas vanés ahol ezt használod:
if (izzitas_be) {
Serial2.print("vis p15,1"); // Izzítás lámpa bekapcsolása
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
else {
Serial2.print("vis p15,0"); // Izzítás lámpa kikapcsolása
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}helyette:
if (izzitas_be) {
Serial2.print("vis p15,1"); // Izzítás lámpa bekapcsolása
}
else {
Serial2.print("vis p15,0"); // Izzítás lámpa kikapcsolása
}
endData();Így is úgy is ki kell küldeni a Nextionnak a lezárást ....
Release the Beast....
-
Janos250
őstag
Hozzáértők!
Hogy lehet a printf (vagy print) idézetében "elbujtatni" a 0xff-et? Valahogy úgy, ahogy a \n megy? A \0xff nem jó.Vagy C string konstansba tenni, és azt nyomtatni?
[ 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 #17208 üzenetére
char endData[] = {0xFF,0xFF,0xFF};
ez akár még működhet is....using namespace std;
template < typename Type > std::string to_str (const Type & t)
{
std::ostringstream os;
os << t;
return os.str ();
}
csakhogy meglegyen a fvnyek:
(CODE)void initNextion() {
const uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE
};
uart_param_config(nUART, &uart_config);
uart_set_pin(nUART, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
// We won't use a buffer for sending data.
uart_driver_install(nUART, RX_BUF_SIZE * 2, 0, 0, NULL, 0);
}
int sendData(const char* logName, const char* data)
{
const int len = strlen(data);
const int txBytes = uart_write_bytes(nUART, data, len);
ESP_LOGI(logName, "Wrote %d bytes\n", txBytes);
ESP_LOGI(logName, "#%s#\n", data);
return txBytes;
}(/CODE)
string store ="";
store += "page2.valami.val=";
store += (x.sData=="ON") ?"1":"0";
store += endData;
sendData(TX_TASK_TAG, store.c_str());ezt használtam home projectben, működik
[ Szerkesztve ]
Release the Beast....
-
Janos250
őstag
válasz Tankblock #17210 üzenetére
Köszi, tulajdonképpen nem a konvertálásra gondoltam, de közben megtaláltam, hogy nem szabad kitenni az x elé a 0-t.
https://en.cppreference.com/w/cpp/language/escape
Vagyis a
Serial2.print("page 0");
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);helyett a
Serial2.print("page 0\xff\xff\xff");
a jó.
[ 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 Tomika86 #17211 üzenetére
ESP-IDF (ESP32 wroom ha jól emlékszem) c++ ban Arduino nélkül, Eclipse alatt :-)
az InitNextion() Fv felparametrizálja a 2.v3. UART drivert ESP32 ön a Nextionnak megfelelően - Hozzátenném, hogy a nextiont is át kell configolni magasabb baud rate - re, mert alapból csak 9600 bps.
A sendData fv az alap UARTra logol és a Nextion UARTnak meg kiküldi a megkapott stringet.
végül egy taskban ahol szükséges szépen stringet összerakom és ahogy látod a templateneél meg van írva a .to_str() fv ami lehetővé teszi a const char * tudjak átadni a sendData fvnek :-)
Ebben a projectben pl nincs Arduino és nem is szeretnék. FreeRTOS+ MQTT van még ebben a projectben használva, az tuti h át kell még írnom párszor, de egy ilyen hőmérő + világítás kapcsoló már fut az asztalomon 3+ éve.
Szedd le az ESP-IDF és a example mappában benne van szinte minden, "csak" össze kell rakni saját tetszés szerint.
Egyre rájöttem a Nextionból a RTC részért még 1x nem fizetek, mert az enyémben nincs a hőmérséklettel kikompenzálva és sosem mutat helyes időt....
[ Szerkesztve ]
Release the Beast....
-
Tomika86
senior tag
Sziasztok!
Lehet kiröhögtök, de setup blokkból miért nem működik függvényhívás?
Csak egy példát hozok:Serial2.print("page 0");
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Ha ez van a setup blokkban, akkor működik.
Ha már a program legvégén deklarálom a függvényt, és csak meghívom a setup blokkból, akkor nem csinálja meg. Valamit nem tudok ezzel még
Prototípusát meg kell adnom? Vagy mi a kínja? -
Janos250
őstag
-
tonermagus
aktív tag
Köszi a tippet és egyben bocsánat a késői reagálásért
Ez a megoldás szimpatikusnak tűnik. Az teljesen jó, ha 1-2 méteren belül tud érzékelni.
Kérdés hogy az jelenthet-e tapasztalataid alapján problémát ha:
- A vevő magasabban van picit mint az adó. Itt ugye kérdés, hogy a vevő milyen szögben érzékel, vagy az adó milyen szögben sugároz vertikális irányba. Elképzelhető hogy az oszlop 30-50 cm-el magasabban lesz mint az adó, ami a földön lesz. Ez lehet-e probléma?
- Párás/esős idő befolyásolja-e az érzékelést? Szabadtéren lesz használva... -
Janos250
őstag
válasz Tomika86 #17218 üzenetére
Ha ez helyett:
Serial2.print("page 0");
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
ezt írod:Serial2.print("page 0\xff\xff\xff");
Akkor, ha 4 sorban írod az jó, ha egyben, akkor nem? Na, ne!
Biztos, hogy a Serial2 beginje a setup elején van, és van utána delay? Mondjuk delay(2000)?
Egyáltalán feléled akkorra a képernyő?
Van elöl elég delay, hogy minden felálljon?[ 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 tonermagus #17217 üzenetére
Mi lesz ez, valami labdajáték, vagy hasonló?
1. nemigen jelent akadályt, sőt, akár még jól is jöhet, ha szeretnéd a hatótávolságot pontosan behatárolni, mert ha megfelelő szögben leárnyékolod a vevőt, egy távolságon túl nem kap jelet. Egy tsop vevő 120°-ban vesz, de mivel filléres cucc, semmi akadálya, hogy teleszórd vele a célpontot, hogy minden irányt le tudj fedni.
2. a pára ilyen kis távolságon nem hiszem, az eső talán ronthatja a vételt, ezt ki kell tapasztalni, de ha például saras lesz az adó vagy a vevő, az kitakar(hat)ja a jelet.
-
Janos250
őstag
válasz Tomika86 #17220 üzenetére
Hát, a lényegét nem sikerült elkapni! :-(
Az csak egy megjegyzés volt, hogy minek írsz négy sort, amikor egy is elég. Rövidebb is, memóriában is kevesebbet foglal. Hogy azt az egy sort közvetlenül írod be, vagy függvénybe teszed, nem lényegi kérdés."Ha már a program legvégén deklarálom a függvényt, és csak meghívom a setup blokkból, akkor nem csinálja meg. "
Ha függvény hívását később a loopba teszed, akkor megy?
Le kéne írni, hogyan deklaráltad, és hogyan hívtad, hogy valami fogalmunk legyen, hogy mi a kérdés.
Mi az, hogy nem csinálja? Lefordítja hibajelzés nélkül, csak nem hajtja végre?
Van elég várakozás az elején, hogy minden talpra álljon?
A Serial2 beginje megvolt előtte? Van utána elég várakozás?
A képernyőt nem kell inicializálni ?Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Tomika86
senior tag
válasz Janos250 #17222 üzenetére
A többi is függvényként van a végén a programnak, az összes nextion parancs.
A loopon belül csak meghívom a függvényt, ami te írtál az az egy darab parancs van a setup blokk végén, elötte van delay(csak itt), azért írtam azt is függvényként, mert az össze többi úgy van.Nem a leírásoddal van baj, hanem ha csak egy függvény hívást használok, az nem hajtódik végre. Minden hiba nélkül lefordul és rátöltődik az esp32re.
Innét tudom:
-Áram alatt van a kijelző és az esp32.
-Kijelzőben átlépek egy másik oldalra.
-rátöltöm a programot
-nyomok esp32re egy resetet
Itt függvény híással nem lép át a 0 képernyőre.
Függvény hívás nélkül, a te 1 soroddal beírva átvált a kezdő képre(page 0).Setup blokk
Loop blokkFüggvények
Függvény prototípus nincs!
-
Janos250
őstag
válasz Tomika86 #17229 üzenetére
Az ESP32-höz tartozó main.cpp része:
void loopTask(void *pvParameters)
{
setup();
for(;;) {
if(loopTaskWDTEnabled){
esp_task_wdt_reset();
}
loop();
if (serialEventRun) serialEventRun();
}
}Vagyis:
Meghívja a setup függvényt egyszer, majd egy végtelen for ciklusban a loop() függvényt.
Ha a setupba teszel valamit, annak egyszer le kell futnia.
Én továbbra is időzítési problémára gyanakszom, bár gyanús, hogy fgv nélkül megy.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
DarkByte
addikt
Sziasztok!
Azt valaki tudja esetleg hogy a különböző frekvencia sávban működő LoRa modulok közül mi használható itthon legálisan? Úgy tudom a 433 és 868MHz-es sávok ISM sávok, tehát ott nincs vele gond. Pl. gondolom egy ilyen rendben kellene hogy legyen [SX1278 433MHz] -
dew28
aktív tag
válasz DarkByte #17234 üzenetére
The LoRaWAN technology can be used in ETSI EU433 band as long as the radio device EIRP is less than 12.15 dBm and the end-device transmit duty-cycle should be lower than 10%. The center frequency of the channels associated with this band ranges from 433.175 to 434.665 MHz.
Az NMHH szerint ezeknek az eszkozoknek az olcsositott, gyenge zavarszurovel, vagy a nelkul forgalomba hozott valtozatait (kina), pl. az MVM NET 450MHz-es bazisallomasai is 'zavarhatjak', hogy a mindenfele, limit nelkuli kaputaviranyitokrol, 'okos/kinetikus' kapcsolokrol mar ne is beszeljunk.
hossszabb tavon is celszerubb a 863-870 MHz tartomanyt hasznalni ilyen celra szvsz.
[ Szerkesztve ]
[ Szerkesztve ]
-
DarkByte
addikt
Köszi! De akkor igazából mindkettőn szabadon használható.
Igazság szerint nekem nem nagy távolságot kellene vele áthidalni, maximum 100m, egy ESP-NOW is megoldaná valószínűleg. Csak amúgy is terveztem hogy kipróbálom a LoRa-t.(868-as sáv is telítődik, itthon nálam kapásból a kazán termosztát, a társas házi kapu távirányító is azt használja)
-
DarkByte
addikt
Van reális esélye egyáltalán hogy ilyen kis antennákkal ezt a limitet túllépi az ember? Nyilván ki lehetne számolni ha meg lenne adva mekkora a nyereségük, de ez nincs így. Illetve szoftveresen az adóteljesítmény szabályozható ezeken a rádiókon. Elemről üzemeltetve azt amúgy se érdemes a szükségesnél jobban felcsavarni.
Ez [link] pl. jobb vásárnak tűnik, eleve az értelmesebb lábraszter és a jobban elvezethető antenna miatt.
De majd nézek 868MHz-eset is, csak úgy nézem az ritkább valamiért és emiatt drágább.[ Szerkesztve ]
-
DarkByte
addikt
válasz DarkByte #17238 üzenetére
Egy ilyet találtam, itt 3dBi-t adnak meg ehhez a kis csavart antennához. (már ha igaz) [link]
Kalkulátorba beírva 8dBm-el és teoretikus 0dB kábel veszteséggel, 11 dBm EIRP jön ki. Szóval azért maxra (20dBm) tekerve elvileg át lehet vele lépni.
[ Szerkesztve ]
-
Tomika86
senior tag
Sziasztok!
Visual Studio miért ad figyelmeztetést erre?
int ADS7828_olvasas (int Addr_byte, byte Cmd_byte) {
byte data[2];
Wire.beginTransmission(Addr_byte); // I2C átvitel indítása, az adott címen
Wire.write(Cmd_byte); // Command byte küldése
Wire.endTransmission(); // I2C átvitel megállítása
Wire.requestFrom(Addr_byte, 2); // 2 byte adatra várakozás
if (Wire.available() == 2) { // Ha megérkezett a 2byte
data[0] = Wire.read(); // Első byte tömbbe írása
data[1] = Wire.read(); // Második byte tömbbe írása
delay(2); // Ciklus késleltetés
int adc = ((data[0] & 0x0F) * 256) + data[1]; // Adat konvertálás 12bit-re
return adc;
}
}Ezt írja:
src\main.cpp: In function 'int ADS7828_olvasas(int, byte)':
src\main.cpp:2094:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^ -
Janos250
őstag
Szevasztok.
Egyszer már próbálkoztam ezzel, de abbamaradt.
Van nekem egy fájl: libvfs.a
Ebben van egy változó: s_vfs_countA program valahogy eléri, mert használja, de nem tudok rájönni, én hogyan tudnám elérni. Például kiíratni (Ja, ESP32 Arduino természetesen)
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
weiss
addikt
válasz Janos250 #17242 üzenetére
Mint múltkor is említettem, direktben szerintem sehogy, de ha szeretsz hekkelni, ha eléred ezt a függvényt, akkor bináris kereséssel ki tudod deríteni, mi az utolsó index, ami nem NULL-t ad vissza.
const vfs_entry_t *get_vfs_for_index(int index)
{
if (index < 0 || index >= s_vfs_count) {
return NULL;
} else {
return s_vfs[index];
}
}A components\vfs\private_include\esp_vfs_private.h-t kell include-olni.
[ Szerkesztve ]
I did nothing, the pavement was his enemy!
-
weiss
addikt
válasz Tomika86 #17245 üzenetére
De, az egy rohadt nagy probléma. Én valami ilyesmit csinálnék:
bool ADS7828_olvasas (int Addr_byte, byte Cmd_byte, int *adc) {
byte data[2];
Wire.beginTransmission(Addr_byte); // I2C átvitel indítása, az adott címen
Wire.write(Cmd_byte); // Command byte küldése
Wire.endTransmission(); // I2C átvitel megállítása
Wire.requestFrom(Addr_byte, 2); // 2 byte adatra várakozás
if (Wire.available() == 2) { // Ha megérkezett a 2byte
data[0] = Wire.read(); // Első byte tömbbe írása
data[1] = Wire.read(); // Második byte tömbbe írása
delay(2); // Ciklus késleltetés
*adc = ((data[0] & 0x0F) * 256) + data[1]; // Adat konvertálás 12bit-re
return true;
}
return false;
}De nem ismerem az egész kódot, lehet megoldható szebben.
I did nothing, the pavement was his enemy!
-
its_grandpa
tag
Ha boolean visszatérési értékűre módosítod a függvényt, a hívó oldalon kell egy ellenőrzés.
Mivel Tomika86 eredeti fv-e int (nem uint), én valami ilyesmit csinálnék:int ADS7828_olvasas (int Addr_byte, byte Cmd_byte) {
byte data[2];
int adc = -1 ;
Wire.beginTransmission(Addr_byte); // I2C átvitel indítása, az adott címen
Wire.write(Cmd_byte); // Command byte küldése
Wire.endTransmission(); // I2C átvitel megállítása
Wire.requestFrom(Addr_byte, 2); // 2 byte adatra várakozás
if (Wire.available() == 2) { // Ha megérkezett a 2byte
data[0] = Wire.read(); // Első byte tömbbe írása
data[1] = Wire.read(); // Második byte tömbbe írása
delay(2); // Ciklus késleltetés
adc = ((data[0] & 0x0F) * 256) + data[1]; // Adat konvertálás 12bit-re
}
return adc;
}
Persze a hívó oldalon így is kell egy ifADS7828_olvasas
..... -
weiss
addikt
válasz its_grandpa #17248 üzenetére
Igen, ez így valszeg jobb.
I did nothing, the pavement was his enemy!
-
Janos250
őstag
Szia!
Köszi, van, ami megy, de egyre rejtélyesebb.Van ugyebár két Arduino fejlesztés az ESP32-re.
Van egyszer, amit az espressif-nél van, valami régebbi IDF alapján, és ezt 1.0.6 verziónak nevezi. Ez, ha a File/Preferences-be ezt írjuk be:
https://dl.espressif.com/dl/package_esp32_index.jsonAztán van a github-on, a 2.0.2 verziónak nevezett, amit folyamatosan fejlesztenek aktív emberek, ez jelenleg a 4.4-es IDF alapján.
https://github.com/espressif/arduino-esp32/releases/download/2.0.2/package_esp32_index.jsonAz espressifesben megy a fájlkezelés úgy, ahogy egyszer korábban leírtam:
https://prohardver.hu/tema/arduino/hsz_16613-16613.html
Viszont nem megy az általad javasolt.A githubosban nem megy a fenti fájlkezelés, de - ha az IDF-ből bemásolom neki, amiért nyavalyog -, akkor megy, amit leírtál.
Ez alapján sikerült kiíratni azokat a dolgokat, amit tulajdonképpen akartam. Tulajdonképpen az s_vfs-et akartam leírni, csak egyszerűen akartam megfogalmazni, mert ez is ugyanolyan
FD_SETSIZE = 64
s_vfs[0] = 3ffb6d70
vfs = 3ffb6e10
path_prefix[] = /dev/uart
path_prefix_len = 9
ctx = 0
offset = 0
s_vfs[1] = 3ffb6e3c
vfs = 3ffb6edc
path_prefix[] = /dev/console
path_prefix_len = 12
ctx = 0
offset = 1Szóval a fene se érti.
Még majd bogarászok vele.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
Új hozzászólás Aktív témák
- Újabb Samsungok telepíthetik a Galaxy AI-t
- Kerékpárosok, bringások ide!
- Letartóztatták a bitcoin-Jézust
- Képeken az egyik kameráját elvesztő Sony Xperia 10 VI
- Lakáshitel, lakásvásárlás
- Samsung Galaxy S24 - nos, Exynos
- Vodafone-ra áttért Digi Mobilosok
- Politika
- Xbox Series X|S
- NVIDIA GeForce RTX 3060 Ti / 3070 / 3070 Ti (GA104)
- További aktív témák...
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest