- Nyaralás előtti hardverszemle
- Apple asztali gépek
- Melyik tápegységet vegyem?
- OLED TV topic
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Nvidia GPU-k jövője - amit tudni vélünk
- HDMI topic
- Szünetmentes tápegységek (UPS)
- ZIDOO médialejátszók
- Teljesen az AI-ra fókuszál az új AMD Instinct sorozat
-
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
gordonfreemN #19638 üzenetére
Szia
A kérdés hogy gyorsan portolható megoldást keresel, mert akkor célszerű maradni az Arduino világban így könnyebben tudsz a uC között váltani,
vagy adott uC családot szertenél megtanulni.avr/sleep.h regiszter szinten állítja be közvetlenül az Atmega (AVR család) sleep módba, hozzáteszem a megfelelő regiszterek írásával te is megírhatod, ennek a megoldásnak az lesz az előnye h hatékony kódod lesz (nem forgatod bele az overheadet amit az Arduino okoz), hátránya hogy hosszabb lesz a betanulási görbe.... nemc csak a sleep van ott :-)
Microchipnek van tutorial oldala is: [link]
Amit látsz mint Arduino az egy univerzális wrapperbe csomagolt kód ami elfedi a uC sajátosságainak a nagy részét.
Mint minden ilyen megoldás hatékonyságvesztéssel jár, cserébe gyorsabban tudod alkalmazni egy másik uC családon a megírt kódot. Nem beszélek azokról az esetekről amikor 2 könyvtár ugyanazt a hw erőforrást használná és összeakad, szóval a hw arhitectúra nem ismerete okozni fog hátrányt.Power led nem 1mA lesz inkább 10-20mA. Lehet venni cél LED ami megvalósítja amit szeretnél, vagy megépítheted egy 555 időzítőből is.....
-
Tankblock
aktív tag
válasz
gordonfreemN #19635 üzenetére
Szia,
nem vagyunk gondolatolvasók (sajnos),
kérdésem az lenne, mi lenne a cél amit el szeretnél érni?Ha csak ideveted a gondolataid felét, nem lesz senki aki segíteni tud, mert mindenki csak találgatni fog. Egy problémára meg van több megoldás.
Küldtem DataSheetet linket abban benne van a ennek a uC a működése.A kódodat feltehetnéd Gitre is publicusan akkor meg tudjuk nézni azon a linken amit ide teszel, és nem kell a fórumot teletenni kóddal
További jó hobbyzást!
-
Tankblock
aktív tag
válasz
gordonfreemN #19625 üzenetére
Szia,
próbálok segíteni..
"ArduinoLowPower.h" ill "LowPower.h" telepíteni kell Könyvtárkezelőből.
Mi a különbség? --> mások írták, saccra ugyanazt lehet elérni velük.
A végén AVR registereket írja át úgy hogy a PowerMode különbféle sleep állapotba kerüljön."Lehetséges 9-es pinről is feléleszteni energiatakarékos módból, vagy csak a dedikált interrupt 1-2 lábakon?" --> csak interrupt láb lehet ebből a Atmega328 nak 2 van....
"A loop az energiamegtakarításkor i folyamatosan fut, vagy ilyenkor csak az interrupt lábat figyeli és ha azon bejön a megszakítás akkor feléled?" nem fut, csak az interrupt vector változásakor éled fel uC és fut tovább a loop kódja.
ebben találod a Power Mode, Reset interrupt handlig leírását...
-
Tankblock
aktív tag
Szia
https://github.com/indrekluuk/LiveOV7670/blob/master/CMakeLists.txt
és a .gitignore filaban benne van a szépség:
https://github.com/indrekluuk/LiveOV7670/blob/master/.gitignore
nem tölti fel gittre a sajár CMake fileját ..... modjuk ez lehet a Visual Code + PlatformIO végett van, ebben nincs tapasztalatom....idea
# ignore files generated by "platformio init"
src/.idea
src/.pioenvs
src/.gitignore
src/.travis.yml
src/CMakeLists.txt
src/CMakeListsPrivate.txt
/cmake-build-debug/CMake írja le mit hol kell keresnie a fordítónak és a linkelőnek.
Make után amikor a esp-idf átváltott CMake re a hajamat téptem egy darabig mire megszoktam. -
Tankblock
aktív tag
válasz
daninet #19086 üzenetére
Szia
a vezérlőn az egy 555 Timer IC és véletlenül nem a poti helyét próbálod meg PWM ezni? Sajna a fotón nem látszik....A OUTPUT állítása után írjál rá ki a pinre 0 át.
Másik megoldás h felparaméterezed az egyik timert PWMre és elhagyod a jól megszokott arduinot és rendes C ben megírod....
-
Tankblock
aktív tag
Szia,
Például a manuál elolvasása sokat segít:
[link] itt a User Manual.Nincs ilyen függvény definíció....
// töröltem a Manual sorait....
Szóval a megfelelő fv alkalmazása segít.
RMSVoltageMean
nek amyGLCD.printNumF(RMSVoltageMean , dec, x, y[, divider[, length[, filler]]]);
..... -
Tankblock
aktív tag
Szia,
De bele tudsz írni bőven ha a sketch Program flash része túl nagy, mivel a BootLoader a Flash végén helyezkedik el : [link]
Ha jól sejtem ISP-n keresztül ha letöltesz egy bootloadert meg egy üres scketchet menni fog.
Nem csak Arduino bootloader létezik, van sokkal kisebb is, és ha elfelejted magát az arduinot akkor még több mindent tudsz belepréselni ugyanabba a mennyiségbe...... -
Tankblock
aktív tag
válasz
Wolfram #18781 üzenetére
Szia
csatlakozom az előttem szólokhoz, mi a feladat?
Mi a 2 szenzor, mekkora range?Opció 1:
Analog switch 4066BE csak egy példa vannak sokkal modernebbek is. Aztán váltogathatsz a bemenetek között...
Opció 2:
egymás fölé eltolni a 2 jelet pl 0-0.5V első szenzor, 0.51-1V második szenzor majd összeadni. De ez lehet rosszabb megoldás....Opció 3: külső ADC akár SPI on
-
Tankblock
aktív tag
válasz
ViZion #18679 üzenetére
Szia,
jónak tűnik. Amit találtál az ugye autós környezetben van, és ott a GND loss vagy a parazita ellenállás bármikor felütheti a fejét.
leválasztott 5V egy ledszalag esetén szerintem nincs szükség.
Ezzel a megoldással ha megkotlik a FET akkor a vezérlőd még továbbra is élni fog. akár vissza is mérheted a 12V ágban folyó áramot így megtudod mondnai h működik-e vagy sem....
-
Tankblock
aktív tag
válasz
alfa78 #18557 üzenetére
Szia
magánvéleményem szerint ez nem a jó út, ha ennyire nincs időd....
töredékéért vehetsz egy Wifi képes termosztátot ami fele ilyen veszélyes.Google 1 találata: [link] szállítással 30 eHUF.
A másik út HUB 13K okos connector 13k hőmérő 7k Relé 601 HUF ([link]) + Doboz vezeték munkaidő
tényleg ezt szeretnéd? -
Tankblock
aktív tag
válasz
Wolfram #18396 üzenetére
Szia,
Mit szeretnél? Opcióból nincs hiány....
- Hostolhatsz weblapot/websocketet amin keresztül tudod GPIO vezérelni --> onnan a rádiódat
- készíthetsz másik távot ami ESPNOW protokollon keresztül küld üzenetet az elsőnnek amelyik gombot lenyomtad kiküldi mint üzenet aztán ha nem jön több gombnyomás deep sleep....
- IR receiver boardot már látom belinkeltékezeket egyszerre is meg lehet csinálni....
-
Tankblock
aktív tag
válasz
ViZion #18121 üzenetére
Szia,
Ha a relé egy normális pl OMRON márka akkor hagynám azt, mert fizikailag leválaszt.
Ha az a probléma hogy aktív low akkor egy invertert tegyél elé és készen is vagy. Opamp/komparátor negatív bemenetére kötöd a GPIO-t valami ellenállason át, +5V single supply hajtod a komparátort akkor egy Rail-to-rail ki is fog jönni belőle a szükséges jeled.
Elenállás osztót kell jól belőni.
Némi videó hozzá:
[link] -
Tankblock
aktív tag
válasz
daninet #18060 üzenetére
Egyszerű mint az egyszeregy....
Ha egyfajta paraméter van akkor kétdimenziós tömb, ha sokféle akkor struktúrákat tartalmazó tömböt használsz. Az elején az állapotgépednek megfelelő paraméterekkel inicializálod.Majd kiolvasod a bemeneteidet ami kiválasztja az állapotgéped állapotát azaz a tömb 1 sorát.
Ezt használod a függvényeidhez mint paraméter.Remélem hogy érthető így :-)
-
Tankblock
aktív tag
válasz
daninet #18045 üzenetére
// init parameters
int aiParameters[3][5] = {
{1,2,3,4}, // switch state 1
{5,6,7,8}, // switch state 2
{9,10,11,12} // switch state 3
};
// Ha különbozők kellenek akkor marad a struct
struct myParameters {
bool isNoGood;
double dRandomValue;
int iIntegerMe;
};
myParameters myParam[] = {
{isNoGood = true, dRandomValue = 0.0, iIntegerMe = 1},
{isNoGood = false, dRandomValue = 0.1, iIntegerMe = 2},
{isNoGood = true, dRandomValue = 0.2, iIntegerMe = 3}
};
int giSwitctState = 0;
giSwitctState = ReadSwitch();
// itt hívódik 1x ami kell
funcPntr_set(aiParameters[giSwitctState][0],aiParameters[giSwitctState][1],aiParameters[giSwitctState][2],aiParameters[giSwitctState][3]);
//vagy itt
funcPntrMagic_set(myParam[giSwitctState].isNoGood);Na valami ilyenre gondoltam....
A sok ifből generált jumpok helyett egy sorfolytonos dolog lesz. Bővíteni nem nehéz, remélem átmegy a lényege. Esetenként nézd meg melyik mekkora kódot generál. If else megoldás és ez.... -
Tankblock
aktív tag
válasz
ViZion #18040 üzenetére
Szia
Őszintén ESPEasy vel sohasem foglalkoztam, szerintem egy csőtermosztáttal többre mész.
Az se biztos hogy csak 1 hőmérőre bíznám magam.
Ugye nem gázkazán?Ha sima kályha én az előremenő víz hőmérsékletét nézném és 50 fok felett keringetném, hogy ne hűtse le, mert akkor kátrányosodik gyorsan.
-
Tankblock
aktív tag
válasz
daninet #18041 üzenetére
Szia,
nem az a lényeg hogy spóroltál-e, vagy sem.
A jó arhitechtúrának nem az a célja hogy spóroljunk.
Átlátható-e, és bővíthető-e más elemekkel ha szükséges később, pl 4 állapotra, vagy még egy változó kezelésével.
Ha előveszed 1 év múlva mennyi időt fogsz a kódod megértésével tölteni...
Itt jön elő az hogy milyen a kód minősége.
Nem állítottam hogy spórolsz vele, csak azt hogy olvashatóbb lenne.mint írtam csak próbálok segíteni.
-
Tankblock
aktív tag
válasz
daninet #18038 üzenetére
Ha csak 3 eshetőség lehetséges akkor nem látom értelmét az egész if else résznek.
Olvashatatlan.....Hozzáteszem szerintem egyszerűbb lenne ha egy tömbbe beletennél az egész változó kavalkádot és a pinek kilovasása után a tömb azon elemét címeznéd meg ahányadik.....
Majd az így kapott paraméterhalmazzal 1x megtetnéd ugyanazon fvnyeket.....nem lennének átláthatatlan feltételeid.....
Kapcsoló végett nézheted az állapotát csak 50 [ms]enként és probléma megoldva....Csak próbálok segíteni....
-
Tankblock
aktív tag
válasz
Tomika86 #17901 üzenetére
Szia
FreeRTOS esetén pl Queue: [link] lesz az egyik lehetséges megoldás.
Ha Interruptból próbálnád feltölteni, ne feledd a [xQueueSendFromISR] fv használni, vagy szétakadhat.
PRogramban meg QueueMessagesWaiting() fv meg tudod hány elem van a queue ban és a QueueReceive() fvnyel fogsz egyet kiolvasni.....
másik egyszerűbb út az állapotgépeket futatsz egymás után ...
Ha ugye van ign akkor a másik állapotgép is kilép az állapotából -
Tankblock
aktív tag
válasz
tibi-d #17823 üzenetére
Ha ablakként tekintesz a memóriára és azt indexelve a tömböt körbeforgatod, akkor 2 * 128 byte memóriába vígan meg lehet oldani a 2x 300 adat memóriában tartását és abban a 100 [ms] pedig el tudod kezdeni kiírni SD re mondjuk 2x20 ával, mert akkor 5 * 100ms alatt kiírtad a 100 adatodat, majd megvárni hogy megint 2*100 összegyűljön. A triggerkor meg beszélgethetsz a RTCvel és kiírhatod SDre meg az okot is..
Én fix filenevet használnék és a végére raknám az új adatokat mindig. de kinek mi.
-
Tankblock
aktív tag
Igen, ha csak 2*128 byte is bőven elfér UNOban is.
STM32 nem volt az eredeti felsorolásban :-)nem olyan vészes project ez....
Ha csak a fogyasztás érdekel akkor akár Sonoff POW WiFi is használhatsz, vagy bármit ami méri a dolgok fogyasztását, általában esp82XX va benne és akár TASMOTA is tudja monitorozni.....Az a kérdés hogy hol kell a segítség...
-
Tankblock
aktív tag
válasz
tibi-d #17814 üzenetére
Szia,
RAMba elfér, ha csak 2x128 mintát tárolsz akkor bőven. Bele kell tenni a SDkártya kezelő és a RTC mennyi memóriát foglal és maradékkal tudsz gazdálkodni.
Én timerre futtatnék ADC-t a két csatornára és értékét memóriába tárolatnám egy counterrel aztán jól van az úgy....ha megtellik akkor kezdi előről.
HA megvan a trigger akkor először RTC olvasás 1x , majd a következő ADC olvasás után kiír valahány értéket egyszerre SD re abban a 100ms ami rendelkezésre áll. Így marad 2X buffernek hely.
Digitálisra meg egy sima ISR fv figyelése egy GPIOnak aztán jól van.....
-
Tankblock
aktív tag
válasz
tibi-d #17812 üzenetére
Szia
Oszcilloszkóp
beszélgetés indítónak a következők jutottak eszembe:
ha az analog jel felakad folyamatosan a trigger szint főlé akkor mi fog történni?
Mekkora felbontással kellene tárolni az adatokat (8bit elég -e mert 2*300 byte csak maga 600 byte a memóriában vagy csak 2* 100 bytot tárolunk és azt nem tudom mennyi idő kiírni ), illetve ha megtörténik a hiba akkor mind a 2 csatorna kellene hogy mentve legyen?
Hiba után ha megvan a 200 jelszint akkor mennyi mérés eshet ki?
itt lesz fontos hogy mi van akkor ha folyamatosan a trigger szint fölött van vagy az körül ingadozik kicsit alatta, majd kicsit felette akkor mit kell tárolni? -
Tankblock
aktív tag
válasz
gordonfreemN #17726 üzenetére
Szia
Első blikkre használhatsz
#define
-t a PIN definícióhoz...Az EEPROM kiírást gondold át még egyszer, mert első blikkre minden 5 [sec] kiírod, és nem azt csinálod amit szeretnél. Ezzel lassan elhasználod EEPROMOT.... Elegendő ha volt valós change kiírni azt ahol volt change.
Én a gombokat csak interruptból figyelném, ha van változás akkor azt as loopba kezelném, hogy hol vagy a "menüben", és csak a setgomb változására kezdenék neki a funkció szerint a LED ill a relay kapcsolásoknak.
Ha beleásod magad a C++ rejtelmeibe is akkor nagyon sokféle megoldást fogsz találni.
A HW PIN kiosztást lesd meg, - én most nem tettem meg - mert ha egy portra teszed LED és a kimeneteket akkor 1 port írással megúszhatod az egészet.... De ez már csak szépség....
-
Tankblock
aktív tag
válasz
Undoroid #17727 üzenetére
Szia
A linkelt mikrokapcsolós végállásfigyelést be tudod tenni ....
Szerintem minden infod megvan,A léptetés előtt megnézed, hogy a kapcsoló be van -e kapcsolva, ha igen akkor nem lépsz arra. Ez mind a két irányba működik, és relatíve olcsó. A kapcsoló lehet optokapu is....
Mire lenne még szükséged ?
-
Tankblock
aktív tag
válasz
Undoroid #17718 üzenetére
Ha az elforgatás mértéke érdekel, akkor annyit kell tudnod, hogy 1 step az hány fok, és azt hogy steppet lépsz vagy microsteppet. --> Motor datasheet segít 1.8 fokos vagy más.
Ugye a microstep az egy step felosztva annyiad részre ahány microstep.
Microsteppet normál esetben csak motorvezérővel fogsz tudni megoldani, annke ez paramétere lesz valahol....Ezek után ha tudod a loop elején h jobbra vagy balra forgatod a steppert, ki tudod számítani a fokot is... Az LCDre kiírod majd kiadod motornak a forgás fvg h merre is csináljon mit....
-
Tankblock
aktív tag
válasz
Harcipocok84 #17644 üzenetére
Sajna nekem nincs, csak 1280 ICm van vagy 5 db eltettem rossz időkre és hát lassan eljön...
-
Tankblock
aktív tag
válasz
Harcipocok84 #17517 üzenetére
Szia,
alternatíva : [link] p-FET + 100k ellenállás + 10V Zener a biztonság végett (mármint a FET biztonsága végett.) A Load helyére kötöd az ellenállás osztót, Arduinot, ....
Fordított polarítás esetén szépen kikapcsol a FET . Esetleg ebben az irányban lehet visszajelző LED betenni és akkor látszik a hiba....
-
Tankblock
aktív tag
válasz
Killer man #17454 üzenetére
Szia,
Ha csak az USB-t kötöd rá, van visszajelző power led?
Amikor az elszállás azért történt, véeltlen nem 2 helyről tápoltad?
Akkor tud olyan vicceset csinálni, hogy nem csak a serial chip esik áldozatul, hanem a schottky dióda is.... Általában vizuálisan látszik is.... -
Tankblock
aktív tag
válasz
tonermagus #17418 üzenetére
Szia,
egyet tudok mondani, hogy chiphiány van így mindennek felfele megy az ára.
ESP meg egyre több okos kütyübe teszik, így a kereslet megy felfele....Vannak kisebb ESP32 devboardok amin csak max USB to Serial van meg 2x 2 sor tüske.
Ami nekem van belőle az 49*47 mm, de szerintem van kisebb is...[link] valami ilyesmi, sajna az oldalon nincs fennt a fizikai méretei. Ezen úgy is lehet olcsósítani, hogy magadnak tervezel egy boardot....
De találtam másikat is : [link] 31 x 39 mm
-
-
Tankblock
aktív tag
válasz
Tomika86 #17338 üzenetére
Ha olyan típusút választasz akkor igen.
Amit néztél annak is több verziója van, oylat nézz ami a 1.8V - 5V működik.
Csak Pull-up lehet húzni, ha pull down kell azt kívülről szükséges megoldani.
Van benne interrupt ami hasznos.Sima ledek, optók, stb működtetésére simán. Ha gyorsan kell akkor csakis SPI al.
-
Tankblock
aktív tag
válasz
Tomika86 #17329 üzenetére
Szia
nézd meg hogyan is használod, ahogy nézem pont belenyúltál abba a 2 lábba amik a boot meghatározzák:
GPIO2 must also be either left unconnected/floating, or driven Low, in order to enter the serial bootloader.
GPIO12:
If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is used and this pin is pulled high, causing the flash to brownout. See the datasheet for more details.Mi van akkor ha hanyagolod ezen lábakat?
-
Tankblock
aktív tag
Anno játszottam a Touch bemenettel, emlékeim szerint egy tresholdot kellett állítani és ahhoz képest mérte h van-e érintés vagy nincs ---> töltés és kisütés ciklusokat végzett abból kalkulált. Hát nekem nem volt megggőző, egy touch sensor internetről simán jobb eredményeket hozott, igaz felületekkel nem kísérleteztem.
ha csak ON-OFF kapcsoló kell akkor infrakapu közé meg betenni egy fizikai gátat a pedál által aztán kész is....
PLehhez hasonlót lehet bontani is nyomtatókból :
[link]bár a követelményed ellent mond a csendességnek....
-
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....
-
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
-
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 ....
-
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. -
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... -
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 ... -
Tankblock
aktív tag
sizeof()
függvény megadja a választ.A legkiseb egység ami foglalódik a memóriában az a byte lesz. C++ meg lehet mondani melyik bit halmazát minek is szeretném elnevezni. Gondolom fordítási időben bit arithmetikával/bitmaszkkal a helyére shifteli mindenhol....
önmagában a
unsigned
kulcsszó csak egy típus modosítás [link] és nem típus. Az egy másik kérdés, hogy miért nem ad rá warningot/errort. -
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.
-
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?
-
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.
-
-
Tankblock
aktív tag
-
Tankblock
aktív tag
Nem a programozó írja meg ugyanazt a fv, structúrát, classt, többféle típusra, hanem fordítási időben hozza létre a template alapján, ahogy a deklaráció(k) vannak. megelőzhető egy csomó copy-paste error ha használná az ember int, float,.... típusokkal ugyanazt....
A legtöbb standard library is így van megírva.Operator overload is standard c++,
Általában igaz, hogy illik tudni mi történik, mert jöhetnek a meglepetések... -
Tankblock
aktív tag
Szimpla c++ template megvalósítása a mozgó átlagnak, és némi fv operátor ....
Semmi extra, egy N elemű tömböt hoz létre és azt addig tölti fel adatokkal amíg nem éri el a megadott méretet, utána meg szépen kicseréli a legrégebbit a legújabbra, és számolja közben a mozgó átlagot.Lehet float, double, bármi ami szimpatikus....
C++ én így szeretlek..... -
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] -
Tankblock
aktív tag
válasz
gyapo11 #16936 üzenetére
Nem tudjuk mi a célfüggvény, csak találgatunk. Természetesen 12 V esetén nem ok.
Én nem vagyok híve az egy ellenállásnak, mégpedig azért mert ha 1 LED elhalálozik, akkor a többlet áram a másik 4 LEDen fog folyni, amitől azok is szépen egyesével megfőnek....Csak halványan merem leírni, hogy az elején én POWER LED láttam a szemem előtt amit 3A kellene maxban hajtani és dimmelni, már fejben összedobtam egy PWM bemenetes áramnyelő kapcsolást.....
-
Tankblock
aktív tag
válasz
tonermagus #16932 üzenetére
Szerintem túlgondoltam a projectet....
Ha 5 LED van akkor miért kell neked 12V + FETekkel játszani?
Arduino 5db pin + (5V-3.2V) /0.02 A = 100 Ohm ellenállás aztán mehet az AnalogWrite fnc.
12V esetén nem 100 Ohm kell, hanem (12-3,2)/0,02 = 440 azaz 430 v 470 ohm utóbbit preferálva.Természetesen ellenállást LED ill LED stringenként illene tenni..
-
Tankblock
aktív tag
válasz
tonermagus #16916 üzenetére
Még lenne pár kérdésem, milyen LED lesz meghajtva?
Miért szükséges a 3A?
A 12V ágat mi adja? Az Arduinot mi fogja meghajtani? -
Tankblock
aktív tag
válasz
tonermagus #16908 üzenetére
Szia,
Le tudnád rajzolni, hogy megértsük/sem? Jelenleg nekem nem tiszta a feladat.
Ez egy step down converter lenne ? -
Tankblock
aktív tag
Hello,
lastbrightState is állítsd be a setupba,State Machine -nak (Állapotgép) nézz utána, a jövőben hasznos lesz.....
Adott az alábbi kód, melynek lényege az lenne, hogyha a D0 pin-en nincs jel, akkor folyamatosan "25-ös" erősségen világít a led, ha pedig van jel, akkor fel kell erősödnie a fényerőnek "150-re",
Ennek a követelményednek a kódod pont ellentétét csinálja a setupban.
Sőt pont az ellentétjét mint a loopban....vagy a jelszintek nem ott vannak ahol gondolom.
if (digitalRead(inPin) == HIGH) {
FastLED.setBrightness(25); // Jel esetén 150
FastLED.show(); }
else {
FastLED.setBrightness(150); // nincs jel esetén 25
FastLED.show(); }
}
//ehelyett
#define HIGHLEDSTATE 150
#define LOWLEDSTATE 25
lastbrightState = digitalRead(inPin);
if (lastbrightState == HIGH) {
FastLED.setBrightness(HIGHLEDSTATE ); // Jel esetén 150
}
else {
FastLED.setBrightness(LOWLEDSTATE ); // nincs jel esetén 25
}
FastLED.show();
Új hozzászólás Aktív témák
Hirdetés
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32/64GB RAM RTX 4060Ti 8GB GAMER PC termékbeszámítással
- Csere-Beszámítás! Számítógép PC Játékra! Intel I7 6700/ RX 580 8GB / 32GB DDR4 / 500GB SSD
- AKCIÓ! Dell Optiplex 5060 TWR számítógép - i5 8500 16GB DDR4 256GB SSD 500GB HDD UHD630 WIN10
- Samsung Galaxy A40 64GB, Kártyafüggetlen, 1 Év Garanciával
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 4070Ti Super GAMER PC termékbeszámítás
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged