-
Fototrend
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
-
Tomika86
senior tag
Sziasztok!
Ez a lookup tábla működőképes lehet?
Tudom, próbáljam ki
NTC hőmérőket a Beta modell alapján nem bírtam bekalibrálni, hogy ne legyen 9fokosnál kisebb különbség és nem is lineáris a hiba.
Azt ajánlották, hogy adjam meg táblában, így az ADC értéket leolvasva a tényleges hőfokokat vinném be a tömbökbe.
Köszönömfloat mytemp[] = {130.1,120.1,110.2,100.3,90.5,80.2,70.1,60.4,50.5,40.5,30.2,20.3,10.4,0.3,-1.1,-2.4,-3.1,-5.5,-6.4,-8.4,-10.2,-15.3,-16.6};
int myADC[] = {952 ,945 ,936 ,911 ,889 ,862 ,824 ,780 ,717 ,647 ,552 ,445 ,336 ,240,230 ,227 ,216 ,206 ,184 ,176 ,165 ,133 , 131};
void setup() {
Serial.begin(9600); // Serial Communication is starting with 9600 of baudrate speed
}
void loop() {
float hofok;
hofok = temperature(); // Interpoláció függvény meghívása
Serial.println(hofok); // Interpolált érték kiiratása
}
// Interpolációs függvény az ADC értékhez milyen hőmérséklet tartozik
float temperature() {
int adc = analogRead(A1); // 0 <= PV < = 1023 ===> ADC
for (int i = 0 ; i <= 22 ; i = i+1) {
if (adc <= myADC[i] && adc >= myADC[i+1]) {
adc = (adc - myADC[i]) / (myADC[i+1]-myADC[i]) * (mytemp[i+1]-mytemp[i]) + mytemp[i]; // Interpoláció
goto END_IF;
}
}
END_IF: // IF ADC IS BEYOND LIMITS YOU MIGHT GET WRONG VALUES.
adc=adc; // PV =PROCESS VARIABLE ====> TEMPERATURA CON UNIDADES DE INGENIERIA
return adc;
} -
Tomika86
senior tag
Sziasztok!
Megmértem a ciklusidőt és következőket tapasztaltam:
Főoldalon 20ms
Kapcsolós oldalon 9ms
Grafikonos oldalon 10ms
Adatbeviteli oldalon, egyiken 2ms
másikon 0,9msEzek jónak mondhatók? Vagy szerveznem kellene még a dolgokat
, mert ritka rossz.
Egy magon fut az ESP-n -
Tomika86
senior tag
Összeraktam egy módosított programot, a kijelzőt is módosítottam.
Ahol a kapcsolók alatti képek vannak, az oldalon létrehoztam va0, va1, va2 változókat. Ezeket esp32 programbetöltésnél meghatározom milyen értékűek, 0 vagy 1. Aztán elküldöm page1.va1.val=1 példáulA képernyő preinizcializálasába tettem azt hogy if(va0.val==1)
{ vis p19, 1}
Else {vis p19, 0}Csak hétfőn tudom kipróbálni.
Köszönöm a segítséget
-
Tomika86
senior tag
Igen a képek megjelenítése a kapcsolók alatt, globális a vscope.
Igen a vis, 1 el megjelenítem, vis, 0 elrejtem. Megpróbálom hogy első ciklusban elküldök minden adatot.Azt ki tudom deríteni valahogyan, hogy a nextion küld e vissza valami hibát? Vagy nextionban ki lehet iratni?
Ha esetleg hibás parancs, vagy bármi van a kommunikációban. -
Tomika86
senior tag
A legelején máshogy volt a z adatok küldésének a szervezése. Azóta optimalizáltam ezt. Azt megpróbáltam, hogy az adatokat küldöm amikor lapozok, de késleltetve váltok képernyőt, ekkor is megvolt a bevillanás.
Ahol a kapcsolók vannak ott 10 adat van kb amit küldök, az nem sok szerintem. Tehát nincs különbség a 10 adatos oldalnál és egy 25adatos oldalnál.
Azt is próbáltam, hogy első ciklusban elküldök minden adatot a kapcsolós oldalra, de ha nem azon vagyok akkor hiába küldöm el. (ez debugban is látszik, hogy nem jó) -
Tomika86
senior tag
Szia
Jelenleg minden változó globális a kijelzőben, így csak egyszer csinálja amikor belépünk.
Igen az esp32 küldi az adatokat, úgy hogy amikor a főoldalon megnyomom a nyilat akkor már elkezdi küldeni az adatokat arra az oldal változóira amik azon az oldalon lesznek.(erre gondoltál az utolsó bekezdésben? ).
Vajon megoldható így is, hogy esp32 küldi az adatokat?Köszönöm
-
Tomika86
senior tag
Sziasztok
Meg lehet oldani valahogyan hogy az első képernyő váltásoknál ne villanjanak be a default értékek egy pillanatra? Ha már voltam az adott oldalon, akkor utána jó.
[link]
Köszönöm -
Tomika86
senior tag
Sziasztok!
Mi a különbség ha 4,7kohm vagy 10kohm fel-lehúzó ellenállásokat használok? -
Tomika86
senior tag
válasz
Tankblock #17341 üzenetére
Írtam, hogy van egy oled kijelző, ami a panelból ki van vezetékkel vezetve kb 60cmre a fő paneltől.
Arra gondolok akkor ezt külön venném a többitől, talán ez foglalja le leginkább a buszt, az u8g2 könyvtárral és kiiratásokkal.A többi pedig maradna a mostani buszon, közel az esp32höz. Eeprom, io bővítő, adc, giroszkóp.
Jól gondolom?
Köszi -
Tomika86
senior tag
válasz
Tankblock #17339 üzenetére
[link]
Megszakítás 2 bemenete marad az esp32őn.
Csak a többi menne erre a bővítőre.
Mit jelent a gyorsan kell?
Bemenetek:
Számláló nullázás, olajnyomásgomba figyelés, fékfolyadék kifogyott, 2 tartalék.
Kimenetek:
Hűtőventilátor
Izzítás
VilágításEgyiknek sem kell megszakítással kapcsolni.
Az aggaszt, hogy az i2c vonalon van több dolog, ezek nem fognak belassulni vagy bármi romlás lesz?
Pl analóg kiolvasás Ads7828 icvel ciklikusan történik. Eeprom olvasás/írás
Oled kijelző ciklikusan van írva folyamatosan
Giroszkóp is folyamatosan van olvasva
Busz 400khzre van állítva, csak 2,7kohm van az sda és scl buszon.
Eddig működik minden -
-
Tomika86
senior tag
válasz
Tankblock #17332 üzenetére
Igen, expaner kellett volna, de ezért nem tervezném újra a panelt, ha maradhat. Ez még mindig az autós műszerfal 😀
Van sd kártya spi buszon, van i2c, uart2, 3 kimenet, 6 kimenet, can transreceiver is 2 láb.Gpio2 lehúzva tökéletesen működik eddig, gpio12 is működik.
Csak az érdekelne, hogy hosszú távon jó e ez így?
Köszönöm -
Tomika86
senior tag
válasz
Tankblock #17330 üzenetére
Szia
GPIO2 most lehúzva földre működik (feltöltés is)
GPIO15 szabad, ahogy néztem az se a legjobb választás valamelyik helyett
GPIO12 pedig 1kohm-al sorban az optocsatoló diódája.GPIO12 okozhat gondot így? Kimenetet kapcsolok vele optoval
GPIO2 maradhat így?Sajnos minden láb el van használva
De eddig működtek ezek, csak most a 2es miatt nem ment -
Tomika86
senior tag
Sziasztok!
Ezt az üzenetet kapom program feltöltésnél, egy új panelen.
Mit nézzek meg?
GPIO12 kimenetnek van használva, egy optocsatolót hajt meg.esptool.py v3.1
Serial port COM4
Connecting........___
Chip is ESP32-D0WD (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 30:ae:a4:d4:83:18
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Warning: Could not auto-detect Flash size (FlashID=0xffffff, SizeID=0xff), defaulting to 4MB
Flash will be erased from 0x00001000 to 0x00005fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00010000 to 0x000defff...
Compressed 17104 bytes to 11191...
A fatal error occurred: Timed out waiting for packet content
*** [upload] Error 2Köszönöm!
-
Tomika86
senior tag
válasz
Janos250 #17298 üzenetére
Külföldi fórumban azt olvastam, hogy felesleges mert a hardware serial ezt megszakításként kezeli.
Serial2.available() ez mikor igaz? Mert nekem csak akkor kellene ebbe az első if feltételbe lépni, ha adatot kapok soros porton.ui. azt olvasom, hogy az érkező karakterek számával tér vissza a Serial2.available() függvény. akkor jó ez így nekem végülis
-
Tomika86
senior tag
Jelenleg a nextion kijelzőről kapott Stringet a következő formában olvasom be uartról:
// Soros portról olvasás
if (Serial2.available()) {
String indata = Serial2.readStringUntil('#'); // # jelig várjuk az adatot
if (indata.indexOf("page0") > -1) // Ha "page0" string érkezik
{
kepernyo_szam = 0; // Képernyő változó értéke 0 lesz
}
else if (indata.indexOf("page1") > -1) // Ha "page1" string érkezik
{
kepernyo_szam = 1; // Képernyő szám változó értéke 1 lesz
szerviz_oldal_nem_folyamatos_kiiras (); // 1. oldalon adatok frissítése
}
}Ezt megtudom oldani megszakítással is? Jobb lenne az nekem?
A következő programsorokban az indata tartalma alapján határozom meg hogy mit csinálok (kettő van csak utána itt, de van kb 50).
Működik, de szebb lenne megszakítással?Köszönöm
-
Tomika86
senior tag
válasz
razorbenke92 #17281 üzenetére
Nem csökken a feszültség annyira le. Step down konverterek vannak, elvileg 8vról is megy.
-
Tomika86
senior tag
Sziasztok!
Gondom van a kocsiban a műszerfallal, lehet van itt aki jártas autó elektronikában.
Ha az izzítógyertyák be vannak kapcsolva akkor újraindul a műszerfal. (Relén és optón leválasztva a kapcsolása biztos ami biztos alapon). Amikor bekapcsol az izzítás egyből újraindul, és folyamatosan, mivel a panel kapcsolja az izzítást.
Ha le vannak húzva az izzítógyertyák, akkor nem, akkor minden jó.
Illetve érdekes, de ha a fordulatszám VR szenzor csatija szét van húzva akkor se indul újra.
Mitől lehet ez?
-
Tomika86
senior tag
Sziasztok!
Ezt, hogy nevezzük, amikor itt Oled kijelzőhöz kiválasztom(ezt a sort amikor megadom a programban), hogy milyen IC, van-e reset pin?
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
Köszönöm!
-
Tomika86
senior tag
válasz
its_grandpa #17248 üzenetére
Köszönöm!
-
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]
}
^ -
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!
-
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? -
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); -
-
Tomika86
senior tag
válasz
Tankblock #17164 üzenetére
Nem én találtam ki, ezt így tanítja xx éve a győri egyetemen.
Én csak kérdezem, hogy találkoztatok e vele már. Nem mondom, hogy jó amit a tanár mond. Mplabx elfogadja, warning sincs. Arduino ide se ad figyelmeztetést.
Bitmező:
[link]A define az behelyettesíti a fordító, erre magyarázta a tanár hogy inkább ez legyen használva, ne függvény
-
Tomika86
senior tag
válasz
Tankblock #17161 üzenetére
Bitmező: [link]
Makró
#include <p32xxxx.h>
#define BTN PORTAbits.RA2
#define BTN_Tr TRISAbits.TRISA2
#define LEDs LATD
#define LEDs_Tr TRISD
#define LEDD0 LATDbits.LATD0
#define LEDD0_Tr TRISDbits.TRISD0
#define LEDsA() { LEDs = 0xAAAA; }
#define LEDs5() { LEDs = 0x5555; }
#define BTN_In() { BTN_Tr = 1; }
#define LEDs_Out() { LEDs_Tr = 0x0000; }
main()
{
BTN_In();
LEDs_Out();
while(1)
{
if(BTN)
{
LEDsA();
}
else
LEDs5();
}
}"Látható, hogy itt már nincsenek értékadások (csak a makrókban), a "main()" függvényben csak makróhívások találhatók. A makróhíváskor nem történik stack művelet, tehát gyorsabban kerül végr ehajtásra, mint a függvényhívás."
-
Tomika86
senior tag
Sziasztok
Most volt mikrovezérlős órám, pic32mx.
Kérdeznék,hogy itt lehet-e(esp32)
Bit kezelés:
struct {
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
} Bit;
A programban pedig így kezelem a bitet:if(Bit.b0)
Meg a másik hogy függvény vagy makró?
Makró gyorsabb, több memória. Függvény "lassabb", kevesebb memória?Köszönöm
-
Tomika86
senior tag
válasz
Tankblock #17145 üzenetére
Szia!
Igen, egyetemen most PIC32 programozása van. MPLAB X-ben.
Xtensa LX6 ha jól tudom az ESP32 ic-je, de olyan részletességűt nem találtam mint egy PIC32MZ családé.
Ezért is tettem fel a Visual Studio Code programot, de ez is hiányolja a loop és setup ha main és while függvényeket használom. függvényeket. -
Tomika86
senior tag
Tényleg ennyit jelentene a setup és loop megszüntetése?
[link] -
Tomika86
senior tag
válasz
Tankblock #17103 üzenetére
Nem látok benne én:
#include <movingAvg.h>
// initialize - allocate the interval array
void movingAvg::begin()
{
m_readings = new int[m_interval];
}
// add a new reading and return the new moving average
int movingAvg::reading(int newReading)
{
// add each new data point to the sum until the m_readings array is filled
if (m_nbrReadings < m_interval)
{
++m_nbrReadings;
m_sum = m_sum + newReading;
}
// once the array is filled, subtract the oldest data point and add the new one
else
{
m_sum = m_sum - m_readings[m_next] + newReading;
}
m_readings[m_next] = newReading;
if (++m_next >= m_interval) m_next = 0;
return (m_sum + m_nbrReadings / 2) / m_nbrReadings;
}
// just return the current moving average
int movingAvg::getAvg()
{
return (m_sum + m_nbrReadings / 2) / m_nbrReadings;
}
// start the moving average over again
void movingAvg::reset()
{
m_nbrReadings = 0;
m_sum = 0;
m_next = 0;
}
header:#ifndef MOVINGAVG_H_INCLUDED
#define MOVINGAVG_H_INCLUDED
class movingAvg
{
public:
movingAvg(int interval)
: m_interval(interval), m_nbrReadings(0), m_sum(0), m_next(0) {}
void begin();
int reading(int newReading);
int getAvg();
int getCount() {return m_nbrReadings;}
void reset();
int* getReadings() {return m_readings;}
private:
int m_interval; // number of data points for the moving average
int m_nbrReadings; // number of readings
long m_sum; // sum of the m_readings array
int m_next; // index to the next reading
int *m_readings; // pointer to the dynamically allocated interval array
};
#endif -
Tomika86
senior tag
Sziasztok!
Egy könyvtárban az hol van megírva, hogy figyelmeztetést adjon, hogy nem arduino eszközre való? header fájlban nincs. Amikor fordítom le a programot, akkor ír ki egy figyelmeztetést az arudino ide.
Köszönöm! -
Tomika86
senior tag
válasz
Janos250 #17067 üzenetére
Bővítetted amióta elküldted?
Van például 6darab analóg bemeneten beolvasott érték, mindegyiket mozgóátlaggal "szűrném". Ezt egy darab paraméteres visszatérési értékű függvénnyel nem tudom megcsinálni, ha jól gondolom, mert a bemenetek "összemosódnak".
Mind a 6bemenethez külön függvény kellene.Ezt oldja meg az osztály?
hogy akkor így lesz:
adc0.avg(be1)
adc1.avg(be2)
.
.
adc5.avg(be6)
így egy osztállyal megoldható mind a 6?
Köszi! -
Tomika86
senior tag
Sziasztok!
Lehet hülye kérdés lesz. Ha ugyanazt az átlagoló függvényt fel akarom használni különböző helyekre, akkor nem lesz jó, mert az összes jel bent lesz a tömbben.
Ezt, hogy lehet megoldani? Erre vannak az osztályok, példányosítás?
Köszönöm!
-
Tomika86
senior tag
Sziasztok
Pár kérdésem lenne:
1. Fordítaskor kiírja az arduino ide hogy az egyik library nem kompatibilis esp32 platforma, működik, de esetleg okozhat gondot?
2. Nagyon lassan fordít le, ha másodszor is fordítom már sokkal gyorsabb
3. Reset és gpio0 10kohm-al felhúzva 3,3vra. Ha a kapcsolóhoz kondenzátort teszek akkor boot módba lép tápfeszültség megjelenésekor, 100nF és 1uFal is próbáltam, kisebb kell? 1nF?
Usbs újraindítás nincs, csak a kettő gomb.Köszönöm
-
Tomika86
senior tag
Sziasztok!
Ezeket így teljesértékű adatokként tudom kezelni ha "csak" float?
// Beszívott levegő NTC adatok
const float c1_1 = 1.1494275e-03;
const float c2_1 = 2.5608838e-04;
const float c3_1 = 0.6755814e-07;Vagy double-ként kellene?
A számolások végén a hőmérséklet "csak" 1 tizedes kijelzésűKöszönöm!
-
Tomika86
senior tag
válasz
tonermagus #16632 üzenetére
A jelszintek is változnak ESP32 esetén, 3,3v lehet maximum.
-
Tomika86
senior tag
Jelenlegi állapot:[link]
-
Tomika86
senior tag
válasz
its_grandpa #16574 üzenetére
Köszönöm
Új hozzászólás Aktív témák
- Motorola Edge 60 és Edge 60 Pro - és a vas?
- Milyen processzort vegyek?
- Formula-1
- LEGO klub
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- MIUI / HyperOS topik
- Vélemény: nem úgy tűnik, de Lip-Bu Tan most menti meg az Intelt
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- 3D nyomtatás
- exHWSW - Értünk mindenhez IS
- További aktív témák...
- Venture Electronics VE RunAbout RA 2B-FE Amplifier
- Venture Electronics VE RunAbout RA 2B-FE Amplifier
- Sürgősen eladó egy újszerű AI-erőmű!
- MICROSOFT SURFACE PRO 7 12.3" i5-10th 8GB/256GB Notebookká alakitható Windows Tablet
- BEACN MIC Dynamic Podcast RGB USB-C - Professzionális stúdióminőségű Mikrofon - Win/Mac - Ár alatt!
- Azonnali készpénzes Apple Macbook Air felvásárlás személyesen / csomagküldéssel korrekt áron
- AKCIÓ! Apple MacBook PRO 15" 2018 i9 32GB 500GB 560X 4GB notebook garanciával hibátlan működéssel
- Konzol felvásárlás!! Playstation 5, Playstation 5 Pro
- Újszerű Apple MacBook Air 13.6" (2024) - M3 - 68 Ciklus- 8GB/256GB (MRXN3MG/A) Asztroszürke - MAGYAR
- Telefon felvásárlás!! Samsung Galaxy A13/Samsung Galaxy A33/Samsung Galaxy A53
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest