- Apple notebookok
- Autós kamerák
- Apple asztali gépek
- Samsung Galaxy Tab S6 - letett valamit az asztalra
- Mini PC
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen TV-t vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Azonnali VGA-s kérdések órája
Hirdetés
-
Befellegzett az Alone in the Dark rebootját fejlesztő csapatnak
gp A játék vegyes értékeléseket kapott, de nem gondoltuk azt, hogy ez lesz a sztori vége.
-
Nagy pofon: lőttek a Meta európai AI-tervének
it Az ír adatvédelmi hatóság kérése miatt a Meta befékezi az AI-modellek kiadását Európában.
-
ASUS blog: hátra a csatlakozókkal!
ph Az kanyargó kábelek lerontják a PC belsejének kinézetét, és a szellőzést is akadályozhaták. Az ASUS remek megoldást kínál ez ellen.
-
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
-
Tankblock
aktív tag
válasz Tomika86 #17069 üzenetére
template <typename T, typename Total, size_t N>
class Moving_Average
{
public:
Moving_Average& operator()(T sample)
{
total_ += sample;
if (num_samples_ < N)
samples_[num_samples_++] = sample;
else
{
T& oldest = samples_[num_samples_++ % N];
total_ -= oldest;
oldest = sample;
}
return *this;
}
operator double() const { return total_ / std::min(num_samples_, N); }
private:
T samples_[N];
size_t num_samples_{0};
Total total_{0};
};Moving_Average<double, double, 3> ma;
for (int i = 0; i < 10; ++i)
std::cout << (i * i) << ':' << ma(i * i) << ' ';
std::cout << '\n';Igen megoldható.... [link] Google is segít.
Inkább a cppreferenct kellene linkelni : [link][ Szerkesztve ]
Release the Beast....
-
Janos250
őstag
válasz Tomika86 #17104 üzenetére
Ez is egy lehetséges verzió:
#include <iostream>
#include <queue>
#define mintakSzama 3
#define csatornakSzama 6
using namespace std;
void setup() {
Serial.begin(115200);
delay(3000);
Serial.println();
for (uint16_t i = 1000 ; i < 2000 ; i+=100 ) {
// a 0. analog csatornara minta
uint16_t atlagertek = atlag (0,i) ;
printf("i= %d atlagertek = %d \n", i,atlagertek);
} ;
} ; // end setup
void loop() {
} ;
uint16_t atlag (uint8_t csatorna, uint16_t ertek){
static queue<uint16_t> analogErtekek[csatornakSzama];
static uint16_t szumma [csatornakSzama];
// ha static, akkor nem vesz el kilepeskor az erteke, megtartja
if ( analogErtekek[csatorna].size() == mintakSzama ){
szumma[csatorna]-=analogErtekek[csatorna].front() ;
analogErtekek[csatorna].pop() ;
} ;
szumma[csatorna] += ertek ;
analogErtekek[csatorna].push(ertek) ;
return szumma[csatorna]/mintakSzama ;
};Ezt írja ki:
i= 1000 atlagertek = 333
i= 1100 atlagertek = 700
i= 1200 atlagertek = 1100
i= 1300 atlagertek = 1200
i= 1400 atlagertek = 1300
i= 1500 atlagertek = 1400
i= 1600 atlagertek = 1500
i= 1700 atlagertek = 1600
i= 1800 atlagertek = 1700
i= 1900 atlagertek = 1800[ Szerkesztve ]
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 Tomika86 #17111 üzenetére
Nem nagyon tudjuk, hogy mit akarsz az átlaggal.
Lehet, a legegyszerűbb aanalogSetSamples(samples)
Bár, ennek a használatáról nemigen van leírás.
Hopp, már nem is ismeri. Törölték.[ Szerkesztve ]
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 Tomika86 #17130 üzenetére
Közben csináltam egy alternatívát az AnalogRead()-re, ami már átlagolva olvas, így kényelmesebben használható, csak be kell írni az analogRead() helyére. Ha gondolod, kipróbálhatod.
#include <iostream>
#include <queue>
using namespace std;
void setup() {
Serial.begin(115200);
delay(3000);
Serial.println();
} ; // end setup
void loop() {
printf("analogRead = %d \n",analogReadESP32WithMovingAverage(36,3) );
delay(2000);
} ; // end loop
int16_t analogReadESP32WithMovingAverage(uint8_t GPIOn, uint16_t periodLength){
const uint8_t GPIOs[] = {36, 39, 32, 33, 34, 35};
static queue<uint16_t> analogValues[6];
static uint16_t sum [6];
int8_t GPIOlistNum = -1 ;
for (int i = 0; i < 6; i++) {
if ( GPIOs[i] == GPIOn ){
GPIOlistNum = i;
break;
} ;
} ;
if ( GPIOlistNum < 0 ){
return -1 ;
} ;
while ( analogValues[GPIOlistNum].size() >= periodLength){
sum[GPIOlistNum]-=analogValues[GPIOlistNum].front() ;
analogValues[GPIOlistNum].pop() ;
} ;
uint16_t readedAnalogValue = analogRead(GPIOn) ;
sum[GPIOlistNum] += readedAnalogValue;
analogValues[GPIOlistNum].push(readedAnalogValue) ;
return sum[GPIOlistNum]/analogValues[GPIOlistNum].size() ;
}; // end analogReadESP32WithMovingAverageAz 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 #17144 üzenetére
Szia
Röviden igen,
Használj Microchip studiot, és tanulj meg Datasheetet és Application Manualt olvasni és megszabadulhatsz az Arduino overheadtől,
- másik oldalról meg a kódod a különbféle uC között nem lesz könnyen portolható.Választhatsz mit szeretnél - hatékonyságot és ezzel uC specifikálódást vagy gyors portolhatóságot.
Release the Beast....
-
Tankblock
aktív tag
válasz Tomika86 #17160 üzenetére
Szia,
unsigned
után nem maradt le a változó típus dekraláció véletlen plint
?Én a helyedben a If statementben vizsgálnám h mi van benne pl <1 vagy valami....
Standard struktúra működik c ill c++ alatt nincs benne semmi esp32 specifikus, vagy nem értem a kérdésed lényegét.
A kérdésed második felére hoznál fel példát? Mitől lenne a Makró gyorsabb és a Fv kevesebb memória?
[ Szerkesztve ]
Release the Beast....
-
Tankblock
aktív tag
válasz Tomika86 #17162 üzenetére
Azt nem tudom hogy tisztában vagy e azzal, hogy Compiláció során mi történik.
Első lépések egyikében a #define string ahol megtalálja a kódodban bemásolja a neve utáni részt, a fennt linkelt kódban nincs Fv hívás sehol.
Megfelelő fordíási opciók után a megkapott assembly file egyező lesz.....Az unsigned gondolom Arduino alatt intre castol, gondolom warning van, max el van nyomva. Nem szerencsés akkor se.
Release the Beast....
-
Tankblock
aktív tag
válasz Tomika86 #17172 üzenetére
Szia,
Mérd meg sizeof() fv nyel amit linkeltél structúra 1 byte hosszú lesz a definíció végett
struct {
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
} Bit;Ez tutira 1 byte tárolódik és 3 bitnek van referencia neve:
struct {
unsigned int b0:1, b1:1, b3:1;
} Bit;Reference:[link]
HA többet definiálsz mint 8 bit akkor értelem szerűen nő a structúra mérete is.
Próbáld ki ...Release the Beast....
-
Tankblock
aktív tag
válasz Tomika86 #17190 üzenetére
Tapasztalatból mondom ha egy lapra felrajzolod a software arhitektúrát ahogy most működik az sokat segít. A szakdolgozatodba is be tudod tenni.
Ha valamit duplán chekkolsz, az ilyenkor kiderül, mert az nem jó.
vagy valamit sokszor abból lehet saját classba refraktorálni pl...Release the Beast....
-
Tankblock
aktív tag
válasz Tomika86 #17192 üzenetére
Öszintén csak céged van, de keress rá a Flow vagy flow chart Diagram-ra
A másik lehetőség az UML, csak akkor ha tanultad....Minden elemet felveszel és sorrendben végigmész . setup, loop, interruptok. majd a dobozokat nyilakkal összekötöd mi mi után jön, elágazásokat felveszed Igaz hamis irányokkal....
A lényeg h programod egy reprezentációja legyen amit esetenként könnyebben átláthatsz.
Ha talűlsz ismétlődést, logakia bukfencet akkor javítod.Release the Beast....
-
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....
-
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....
-
Janos250
őstag
-
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.
-
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.
-
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.
-
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!
-
vegyszer
addikt
válasz Tomika86 #17253 üzenetére
Valószínűleg az én esetemben is user error lehet a háttérben.
Mivel a céges gépen a VSC és a PlatformIO is rendben felmászott, és a projekt mappáját kézzel betallózva tette is a dolgát.Most meg elindult a hangya, hogy ez miben másabb világ...
"Újságírás az, amit a hatalom nem akar nyomtatásban látni. Minden más csak propaganda." George Orwell
Új hozzászólás Aktív témák
- Vicces képek
- Macska topik
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Ukrajnai háború
- Letartóztatták, mert AI segítségével csalt az egyetemi vizsgán
- Samsung Galaxy Z Fold4 - egyre megy, honnan nézed
- Sorozatok
- Apple notebookok
- Autós kamerák
- Olyan telefon lett az idei foci EB hivatalos mobilja, ami nem kapható Európában
- További aktív témák...
- BenQ PD3205U 4K Tervezői Monitor!32"/99% sRGB/Pantone/AQCOLOR/Type-c/Mac Ready/Beszámítás!
- Samsung Odyssey G8 Ívelt Ultrawide Oled Monitor!34"/Oled/WQHD/175hz/0,1ms/Freesync-G-sync/Beszámítás
- Ahh! DELL Latitude 3410 Tartós Profi Laptop -60% 14" i5-10210U 4Mag 16GB 512GB SSD FHD IPS
- Ohh! DELL Latitude 3410 Tartós Profi Laptop -60% 14" i5-10210U 4Mag 8GB 256GB SSD FHD IPS
- PlayStation 4/Slim/Pro konzolok teljes karbantartása, pasztázással Thermal Grizzly 1 órán belül!!