- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Bluetooth hangszórók
- Azonnali fotós kérdések órája
- Raspberry Pi
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Szünetmentes tápegységek (UPS)
- Nem indul és mi a baja a gépemnek topik
- AMD Navi Radeon™ RX 9xxx sorozat
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
-
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
-
ViZion
félisten
válasz
ViZion #17999 üzenetére
Alap probléma: keringető szivattyú 35-45W fogyasztás redukálása, mert sokat pörög feleslegesen. Nem nagy a ház, jól szigetelt, vegyestüzelés+puffer. De a csövezés, meg az egész rendszer nagy átfolyásra van tervezve (szándékosan), emeleten termofejek, lent meg kb szaladhat, amúgy is minden egyben van.
Elvileg okos keringető mehetne, de mint megtudtam, az az átfolyást nézi, tehát nálunk automatán visszavenné a teljesítményét (másnál is ez a tapasztalat, okos keringetőt manuálban használnak), nem jutna/sokára jutna meleg víz a távolabbi pontokra.Visszatérő mérése differenciál termosztátos megoldással: ez sem jó, mert a fürdő (szándékosan) külön kör, ahol gyorsan megfordul a víz, a visszatérő így meleg hamar. Megbontani nem akarom, lehetne mágnesszelep, vagy másik szivattyú... drága az ESP-hez képest.
Akkor mérjünk... időt. A legtávolabbi radiátor a kihűlt állapotból a forróra kevesebb, mint 5 perc alatt melegszik fel, ha megy a keringető. Itt a hőleadás sebessége és a kis légköbméter/radiátor miatt van egy durva túllövése a rendszernek, ha a keringetőt a belső termosztát kapcsolja. Erre is lett volna alternatív megoldás, különböző okok miatt elengedtem ezeket.
A programról: boot-nál idők és hőmérsékletek dummy változóba mentve, ha meghalok, akkor is tudják kezelni...
Min hőmérséklet: kazán/puffer a kimenőnél ha eléri, csak akkor keringethet.
mid hőmérséklet: átlagos üzeni alsó határa
max: 90°C-nél minden mindegy, valamit elkeféltem a kazánnál, túlfűtöttem, keringessen hamar.
rögtön indítja is a vége ciklust, ami 2 percenként nézi, h mi a szituáció a hőfokokkal.
A fűtés még az érdekes, ha a minimum-optimum közé esik, akkor hosszabb keringetés (mert a kazán vagy hűl, vagy melegszik), majd szünet. Utána ha még a termosztát "be" állapotban van, akkor ismételje meg, keringetés hosszan, szünet.
Ha az optimális felett van a hőfok, akkor fűtésnél elég, ha ~5 percig keringet, majd vár, ha termosztát még aktív, akkor újra.A lényeg, h sokkal kevesebbet megy a szivattyú, a "túllövések" is ritkábbak lesznek, ehhez az időket finomítani kell, tapasztalat szerint. 3 szenzor van, az egyik a külső hőre, a másik csak infó a pufferről. A külső hőmérséklet kód nincs még benne, ez annyi, hogy mint pl. ma, ha 18°C felett van kint, akkor ne fűtsön 23-ra, mert minek, tutira szellőztetünk is ilyenkor. Akkor az a meleg maradjon estére inkább.
-
ViZion
félisten
Nah, itt a teljes, szenzor helyett még dummy-temp-el, így tudtam tesztelni is:
on System#Boot do
TaskValueSet 1,1,30 //minimum hőmérséklet
TaskValueSet 1,2,43 //normál fűtés
TaskValueSet 1,3,90 //túlfűtés
TaskValueSet 2,1,1080 //felfűtés keringető idő long 1080 mp
TaskValueSet 2,2,330 //normál fűtés keringető idő short 300-600
TaskValueSet 2,3,600 //keringetési ciklus szünet pause 600
TaskValueSet 2,4,120 //watchdog 120
Timerset2,10
endon
on [termo#state]=0 do
event,heatoff
endon
on heaton do
if [sk#temperature1]>[deftemp#tempmin] and [sk#temperature1]<[deftemp#tempmid]
event,heatlong
elseif [sk#temperature1]>[deftemp#tempmid]
event,heatshort
else
event,heatoff
endif
endon
on heatlong do
gpio,13,1
oled,5,2,Heating L -ON-
timerset,1,[deftime#keringl]
endon
on heatshort do
gpio 13,1
oled,5,2,Heating S -ON-
timerset,1,[deftime#kerings]
endon
on heatover do
gpio 13,1
oled,5,2,OVERHEAT! -ON-
timerset,2,600
endon
on heatoff do
gpio,13,0
oled,5,2,Heating -OFF-
timerset,2,[deftime#watch]
endon
on Rules#Timer=1 do
gpio,13,0
oled,5,2,Heating -OFF-
timerset,2,[deftime#keringp]
endon
on Rules#Timer=2 do
if [sk#temperature1]>[deftemp#tempmax]
event,heatover
elseif [termo#state]=1
event,heaton
else
event,heatoff
endon -
robohw
aktív tag
..
-
ViZion
félisten
válasz
its_grandpa #17995 üzenetére
Szia!
Éjjel megírtam és teszteltem is jórészt, de az asszony megjelent és elzavart aludni... pedig még alig múlt fél 2...
Lényeg, h működik, kell az off-ra is, mert az on/off jelet a lakás termosztát adja, amúgy meg ciklusok vannak. Csak nem tudtam befejezni, h nincs-e valahol -nemkívánatos/hibás- végtelen loop. Ide is lehet bepattintani ilyen hosszabb "kódot", vagy majd logoutra inkább? Mert javítani biztos lehet rajta, eléggé az alapoknál vagyok. Kijelzőre is íratnék dolgokat, de arra ráérek, ha a többi működik. -
its_grandpa
tag
válasz
ViZion #17994 üzenetére
Pedig le van írva szépen, az action plugin specifikus parancs.
Az event a rendszer által indított esemény, bizonyos esetekben feltételhez kötött.
Az on System#Boot do .. például arra jó, hogy ha áramszünet miatt újraindul az eszköz akkor be tudd állítani azt az állapotot ami neked kell (mondjuk ne kezdjen el világítani véletlenül a lámpa vagy ne induljon el a fűtés).on [heaton#state]=0 do
event,heatoff
endonén ezt fordítva csinálnám
on [heaton#state]=1 do / fűtés#állapota=1 , azaz igaz
event,heatoff // kapcsold ki a fűtést
endon -
ViZion
félisten
válasz
its_grandpa #17993 üzenetére
Nah, megtaláltam szépen leírva:
on <trigger> do
if <test1>
event,<EventName1>
endif
endonon <EventName1> do
if <test2>
<action>
endif
endonItt nem értem, h mi a különbség az event és az action között.
Saját rules részlet:
on [heaton#state]=0 do
event,heatoff
endonon [heaton#state]=1 do
if [sensorkazan#Celsius]<[deftemp#tempmin]
event,heatoff
elseif [sensorkazan#Celsius]>[deftemp#tempmin] and [sensorkazan#Celsius]<[deftemp#tempmid]
event,heatlong
else [sensorkazan#Celsius]>[deftemp#tempmid]
event,heatshort
endif
endon -
its_grandpa
tag
-
ViZion
félisten
válasz
its_grandpa #17991 üzenetére
igen, csak néhol az akciót is úgy írják le, hogy "event,csináldezt" máshol meg nincs előtte az "event,"
igen az "akármi" is event, pl. a switch status=1
A rules-t éjjel 90%-ban megírtam, a tesztelésen agyalok, hogy a hőszenzorok helyett is dummy változókat rakok egyelőre. Méretbe beleférek bőven, elején ezt túlaggódtam. Sőt, gondolom aki rutinosabb, az a rules-em is tudná optimalizálni, méretben csökkenteni.
-
ViZion
félisten
ESPEasy kérdés, rules-ban mi a különbség ha event,csinádeztnév vagy ha csak simán csinádeztnév van megadva?
on akármi do
csinádeztnév
endon -
ViZion
félisten
válasz
Janos250 #17988 üzenetére
van egy tucat hasonló, fentebb -vagy máshol?- említettem. Ált. Londoni cím, megszűnt cég regisztrációja, csak előreutalás, magyar (OTP) számlára. Ali-s termékeket húznak be az oldalak, marha alacsony áron, minimális postaköltséggel.
Sem a bank, sem a rendőrség nem törte össze magát, h segítsen a károsultaknak, legalábbis a fórumokból ez jött le. Mai napig is élnek a weboldalak, pedig nem mai probléma.
Ha nem ismert cég és csak előre utalás van, meg olcsó is a futár, akkor rá kell keresni a cégre. -
Janos250
őstag
Majdnem beleszaladtam ismét, szerencsére most már utánanéztem a neten:
kinaiwebaruhaz pont hu/
azsiacenter pont com/
mikroelektronik pont hu/
aliexpress pont hu/Majdnem rendeltem a mikroelektroniktól, de szerencsére írják, hogy soha nem érkezik meg a megrendelt, kifizetett áru, és a pénznek is annyi. Korábban az azsiacenterrel már buktam pár ezret, mert azt hittem, hogy az ilyen nevű magyar társaság.
Vajon hányan dőlnek be az aliexpress pont hu -nak?
-
ViZion
félisten
Nah, kezdő gyakorlatként leprogramoztam egy gombot, ami bekapcsolja a kijelzőt. Ma már végleges(ebb) a HW, át kell írkálni GPIO-kat, stb. Akkor vettem észre, h a display-nál kérdezi, h melyik pinre kapcsoljon be... OK
Sok dolgot tud a progi, pl. változóknál agyaltam, h mi lesz a tizedesekkel (számolnia is kell velük kicsit), de az is beállítható, nem kell rules-t írni rá.Eddig nagyon tetszik,elkezdtem az alapokat összeírni, vázlatolni, h mikor mi legyen. Ezt meg már csak bele kell pötyögni, h értse is. Hihetetlen az ESPeasy, rules méret miatt aggódok, de majd kiderül.
...és a relémodulon van led. -
ViZion
félisten
válasz
its_grandpa #17984 üzenetére
Köszönöm, ma-holnap elvileg tudok vele foglalkozni. Valami ledet ráaggatok a kimeneti relére, h lássam is mit csinálok...
-
its_grandpa
tag
válasz
ViZion #17981 üzenetére
Nem teljesen jó de kiindulási alapnak....
Kell egy dummy device name=Rel_1, és State nevü változó.on System#Boot do
Monitor GPIO,15 //Relay1_GPIO-ja
timerSet,1,600 //Set Timer 1 for the next event in 600 seconds
Rel_1#State = 0
endon
On Rules#Timer=1 do //When Timer1 expires, do
Rel_1#State = 1
endon
on GPIO#15=0 and Rel_1#State = 1 do //Relay1 low
Rel_1#State = 0
http://<espeasyip>/control?cmd=LongPulse,Relay2_GPIO,1,300 //Relay2 5 minute on
endon
A GPIO-kat és az IP-t konfigodnak megfelelően kell beállítani.
ESP nélkül írtam, nincs tesztelve. -
-
ViZion
félisten
válasz
its_grandpa #17978 üzenetére
Olvasgatom, meg a randomnerds-et és az espeasy.readthedocs.io-t is nézem.
A HW rész már majdnem kész, de ma megint nem lesz időm szenzorokat forrasztgatni. Finder relét is kaptam "olcsón", ami a neten 1100 Ft, itt egyik boltban csak tartóval van ~4900 Ft, másikban kaptam tok nélkül 2800 Ft-ért... Hát annyi, h ez itt van, de a postaköltséget "beépítették" az árba.
Kérdésem is lenne:
az egyik bemenetre active low switch-et állítok, ezt a relé (relé 1) zárja GND-re.
Ehhez a szabály, h ha low, akkor indítson egy másik relét (relé 2) egy időzítővel meghatározott időre (timerset mittomén 5 perc). A kérdés az, h ha letelik az 5 perc, de a relé 1 még low-on tartja a pin-t, akkor a timer újrakezdi?
Mert amit szeretnék az kb ez:
relé 1 low -> 5 percig relé 2 be -> 10 perc szünet -> relé1 újra figyel -
nyunyu
félisten
Adott egy Arduino Pro Micro, hogyan tudnék lehet ehhez USB billentyűzetet illeszteni?
Azt tudom, hogy ez a modell natívan tud USBt, és van hozzá billzet/egér library, de azok arra szolgálnak, hogy maga az Arduino viselkedjen PCre dugva billzetként/egérként.
Nekem meg azt kellene megoldanom valahogy, hogy az USB billzeten lenyomott billentyűkombináció hatására az Arduino kiadjon a saját USBjén egy billentyű kombinációt, tehát először fel kéne dolgoznom a bejövő USB adatcsomagokat.
(Hülye KVM switchem lenyel egy rakás billentyűkombinációt, ha a dedikált billzetportjára van dugva a billzet, így át szeretném tenni egy másik portra, viszont a hotkeyes gépek közötti váltásra kéne valami USB kütyü, amit a dedikált portba dughatnék helyette.)
-
its_grandpa
tag
válasz
ViZion #17971 üzenetére
Rendben de előbb ezt a két oldalt nézd át.
https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules
https://www.letscontrolit.com/wiki/index.php?title=ESPEasy_Command_ReferenceÉn ESPEasy-vel kezdtem a saját eszközök építését (kapcsoló,hőmérő).
Ma már vannak Tasmotás eszközeim is de talán az ESPEasy nekem jobban kézre áll.
Ha vége lesz a kerti szezonnak ismét neki látok. -
Dißnäëß
nagyúr
-
ViZion
félisten
válasz
Dißnäëß #17974 üzenetére
wat? Ez local (ESP saját weboldalába lépsz be, a belső hálón. Kifelé router nem is engedi, ahogy pl. nas vagy a nyomtató sem tud kifelé kapcsolatot létrehozni, mert nekik nincs net), nem tuya vagy ilyesmi, amitől az okosotthon topikban rettegnek. Magam is aggódom, h a kínaiak tudják, h valami fogyaszt a konnektorokban, meg kapcsolgatom a villanyt... veszélyes. És igen, működnek net nélkül is.
-
ViZion
félisten
válasz
its_grandpa #17970 üzenetére
ju-húúú... akkor ha lesz kérdésem, majd zaklatlak.
Elsőre sokkolt, h a nyomógomb push button active high-on váltotta a státuszt és az nem váltott vissza. normal switch (amire azt gondoltam, h on/off) lett a megoldás, videók alapján.Kicsit a rules-al bajban voltam, timer műxik. Itt amolyan "szubrutinokat" lehet írni, amit egy másik if/else hív meg? Vagy csak ez a on-do dolog van?
Vagy ehhez kellenek a generic dummy változók?
Kicsit fura a programozása, azokhoz képest, amiket ismerek. A dokumentáció is elég szerény, vagy még nem fejtettem meg a logikáját.
Egyelőre amit akartam, azt tudja: kijelző kikapcs, gombra bekapcsolja. Most idáig jutottam, szenzorokat kell rápattintani, csak át is kábeleztem, szal. a HW részt fixálom. Programba csak belelestem egyik este, ennyire futotta. időből eddig -
ViZion
félisten
UP!
nah, ezt a topikot kerestem...
ESPeasy-vel valaki foglalkozott már? -
válasz
Krisztian01 #17967 üzenetére
Oszd már meg, amit a ghidrával kinyertél. Meg hogy milyen címekre/milyen adatokra vagy pontosan kíváncsi. A hex fájlt visszafordítottam én is assembly-ra, csak nem tudom mit keressek benne.
-
Wolfram
aktív tag
USB-s nyomógombot keresek, de nem találok.
Tud valaki ilyet?
-
And
veterán
válasz
daninet #17959 üzenetére
Képtalálatok: [link], itt tényleg csak az RC-tagok (a jelúttal soros R- ill. utána a 0V felé kötött C-tag) érdekesek. A konkrét értékük több tényező függvénye lehet, mint pl. a PWM frekvenciája, a szükséges időállandó (R*C érték) vagy épp a vezérelt áramkör bemeneti impedanciája. Ha a PWM frekvencia és a fogadó áramkör impedanciája kellően magas, akkor elég széles tartományból válogathatunk, de alapesetben néhány kΩ és pár µF megfelelő.
-
And
veterán
válasz
daninet #17957 üzenetére
Ehhez nem kell feltétlenül analóg kimenet. Egy kellően magas frekvenciásra állított PWM-kimenet és egy külső aluláteresztő / integráló szűrő (egyetlen RC-tag formájában) is megfelelő lehet. A kitöltési tényező változtatásával az RC-tag után egy változó DC-szintet kapsz. Ha a PWM-kimenet 5V-os, akkor 0..100% kitöltésre 0..5V DC-t kapsz.
-
daninet
veterán
Sziasztok! Ezt a dc motor vezérlőt hogyan tudnám legegyszerűbben szabályozni arduinoval? 0-5V feszültséggel lehet egy lábán szabályozni anfordulatot. Jól gondolom, hogy analog lábbal ezt tudom szabályozni? Vagy digitpot kell hozzá?
-
Undoroid
őstag
válasz
Wolfram #17955 üzenetére
Szia!
Attól függ, hogy mi a célod és mennyire vagy gyakorlott ebben a témában?! Az elektronika fő részét szerencsére sok helyen lehet már kapni! Vannak olcsóbbak és vannak drágák! 'Túl sokat' egyiktől sem kell várni! A Hi-Fi jelölésűeket nem ismerem, de működik, szól...sok dolog fog azon múlni, hogy milyen hangkeltő(ket) választasz és a szerkezet bedobozolása, tápellátása sem lényegtelen!
-
Wolfram
aktív tag
Bluetooth-os hangszórót mennyire nehéz építeni? Csinált már valaki hasonlót?
-
Tomika86
senior tag
Githubon a könyvtár készítőnek lehet írni valahogyan?
-
Tomika86
senior tag
válasz
its_grandpa #17948 üzenetére
Ha a fájl nagy és más a kiterjesztése, akkor a nem .tft fájl figyelmeztetés se jelenik meg.
Nem jövök rá mi a hiba
-
válasz
tonermagus #17949 üzenetére
TTL-UART-hoz nyugodtan használhatsz feszültségosztót.
I²c-nél és 1wire kapcsolatnál van szükség aktív illesztésre a 3 állapotú adatvezetékek miatt. -
Tomika86
senior tag
válasz
its_grandpa #17948 üzenetére
Ez a lényeg, a kijelző nincs csatlakoztatva, ezért írja a hibát soros monitoron.
Így tudom tesztelni hogy bejön e a failure oldal.
Az a furcsak hogy elötte, és a send utáni sorban lévő serial.printet is kiírja, result 0val egyenlő, tehát odalép
De valamiért a server.send üzenet nem kerül végrehajtasra.
Lehet azért mert az index oldal van betöltve és elkezd "gondolkodni" a böngésző, megy a karika körbe amikor az upload gombot megnyomom.Ha csatlakoztatom a kijelzőt akkor végigcsinálja a kijelzőn a folyamatot és átvált a success oldalra.
Köszönöm
-
tonermagus
aktív tag
Sziasztok!
Logikai szintillesztéssel kapcsolatban lenne egy kérdésem.
Használok egy modult, amivel TTL-UART-on kommunikálok.
A modul 3,3 -ról az ardu 5V-ról megy. A vissziránnyal nincs gond, mert gondolom a 3,3V-ról üzemelő modul által küldött high level megüti az 5V-os logikai bemenet high szintjét. Az oda irány viszont necces, mert ha 5V-ot kap a 3,3V-os bemenet abból lehet probléma.
Tudom hogy kaphatóak logikai szintillesztő modulok, de ha szerintetek az esetemben elég csak az oda irányt korlátozni 2 ellenállással (feszültségosztó) akkor inkább azt választanám. -
Tomika86
senior tag
Csináltam képeket, hogy mit is csinál, hátha észrevesz valaki valamit benne, pastebinre feltettem a kódot.
- ip cím/nextion beírásakor bejön az index oldal
- aktív lesz a feltöltés gomb is(kód szerint csak akkor ha az esp megkapja a fájl méretet)
- ha rányomok akkor megjelenik a fájl méret tehát belép a soros kiiratáshoz
- mivel nincs rákötve a kijelző, így a hibához lép a programban(statusmessage is megjelenik a soros monitoron), de a failure_html már nem töltődik be. 102. sor
- a weboldal elkezd gondolkodni és hibát ad egy idő után (soros monitoron pedig odalép ahol meghívná 105.sor soros kiiratás)Innét viszont a böngészővel hiába lépek az index oldalra, mindig az Error-t írja csak.
(csak .tft fájl hibaüzenet működik, de itt is megáll a server, hiába lépek a kezdőlapra)Köszönöm a segítséget!
Itt a pastebin:
teljes kód[hiba üzenet soros monitoron]
[gomb megnyomva]
[index és fájl kiválasztva]
[index kép] -
Tomika86
senior tag
válasz
Janos250 #17943 üzenetére
sendHeader részeket kivettem.
Jelenleg kijelző nélkül próbálom, az index_html is bekerült így van kezdőoldal.
Működik a fájl méret átküldés is.
A nem .tft fájl üzenet működikDe a failure nem megy, illetve a reason se működik.
Ebben esetleg tudsz segíteni hogy kellene?nextion_update_server.send(200, "text/html", "failure_html?reason=" + nextion.statusMessage);
Köszönöm!
-
Janos250
őstag
válasz
Tomika86 #17942 üzenetére
Ez csak egy elképzelésem, nem biztos, hogy így van, csak a névből próbálok következtetni.
Először is:
Mitől lesz http szabványú egy elküldött karaktersorozat? (A http mindig karakteres!)
Attól, hogy legelőször egy http headert küld.
Például:HTTP/1.1 200 OK
Content-type:text/html
Connection: closeUtána jönnek az egyebek, azaz a tényleges html kód.
Elsőként a html header, pl.:<!DOCTYPE html>
<html lang = hu >
<head>
<meta charset="UTF-8">
<title>minta WEB szerver</title>
</head>Utána a html body, pl.:
<body>
Ide jön a lap tényleges html kódja
</body></html>Ha a sima WiFiServer osztályt használjuk, akkor saját magunknak el kell küldenünk a http headert is. Aztán van pár féle webserver, httpserver, miegymás osztály, ami elvileg elsőként el kell küldje automatikusan a http headert, ezért elég már csak a tényleges html kódot küldeni. html header + body
Én régebben már számos alkalommal belezavarodtam abba, hogy a különböző emberkék által elkészített webserverek másként, és másként működtek, ezért én leálltam a használatukról, hanem csak a WiFiServer osztályt használom, és saját magam elküldöm a http headert is.Mivel te a WebServer osztály példányát hozod létre,
WebServer nextion_update_server(100);
ezért én úgy gondolom, hogy ennek automatikusan el kellene küldeni a http headert is.
De mint írtam, ezek csak elképzelések.
-
Tomika86
senior tag
Sziasztok!
Átírtam és kommenteztem a Nextion webserveres feltöltést. Az átalakítás oka, hogy a programkódban legyen a 3db html oldalkód, eredetileg SPIFFS-re volt feltöltve.
Lenne kérdésem ezzel kapcsolatban:
- Mi a különbség, hogy send vagy sendHeader (csak mert eredetileg a sendHeader küldte)
- Ez így jó e?
Eredetileg így volt://server.sendHeader(F("Location"),"/failure.html?reason=" + nextion.statusMessage);
Erre írtam át (itt is látni, eredetileg senHeader volt):nextion_update_server.send(200, "text/html", "failure_html?reason=" + nextion.statusMessage);
- Ez így a kiválasztott fájl méretét adja a programnak át, jó így?// Fogadjuk a fájl méretét egyszer, amikor kiválasztjuk a fájlt.
nextion_update_server.on("/fs", HTTP_POST, [](){ // Ez mit jelent? "/fs"
fileSize = nextion_update_server.arg(F("fileSize")).toInt(); // "fileSize" a weboldalról jön
nextion_update_server.send(200, F("text/plain"), "");
});Köszönöm a segítséget!
Itt a teljes kód, loop nélkül:
#include <WiFiClient.h>
#include <ESPmDNS.h>
#include <WebServer.h>
#include <ESPNexUpload.h>
/*
ESP32 használja a hardveres soros portot RX:16, TX:17
Soros port pinek ESPNexUpload.cpp fájlban vannak definiálva
*/
// Wifi adatok
const char *host = "ezaz"; // Host név beállítása
const char *ssid = "ESP"; // Hálózati azonosító név beállítása
const char *password = "xxx"; // Kapcsolódáshoz jelszó
IPAddress local_ip(192,168,10,150); // ESP32 IP cím beállítása
IPAddress local_mask(255,255,255,0); // Maszk cím beállítása
IPAddress gateway(192,168,10,150); // Átjáró cím beállítása
// used only internally
int fileSize = 0;
bool result = true;
// Nextion objektum létrehozása
ESPNexUpload nextion(115200);
// Webserver objektum létrehozása a megadott portszámmal
WebServer nextion_update_server(100);
// Hiba oldal
char failure_html[] = R"=====(
<!DOCTYPE html>
<html lang="en">
<head>
<title>Nextion kijelző frissítő</title>
<script>
function getUrlVars() { // Ez mit csinál?
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
function setReason() { // Ez adja át a reason értékét a weboldalra?
var reason = getUrlVars()["reason"];
document.getElementById("reason").innerHTML = decodeURIComponent(reason);
}
</script>
</head>
<body onLoad="setReason()">
<h2>Frissítés sikertelen!</h2>
Üzenet: <strong><span id="reason"></span></strong>
</body>
</html>
)=====";
// Index oldal
char index_html[] = R"=====(
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Nextion kijelző frissítő</title>
</head>
<body>
<h3>Válaszd ki a .tft fájlt a feltöltéshez</h3>
<form method="post" enctype="multipart/form-data">
<input type="file" name="name" onchange="valSize(this)">
<input id="button" type="submit" value="Feltöltés és frissítés" disabled>
</form>
<script>
function valSize(file){ // megszerezzük a kiválasztott fájl méretét és elküldjük az ESP-nek
var fs = file.files[0].size;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function(){
if(this.readyState == 4 && this.status == 200) { // Ha az ESP megkapta a fileSize-t akkor engedélyezzük a gombot(Feltöltés)
document.getElementById("button").disabled = false;
}
};
xhttp.open("POST", "/fs", true); // Ez a 3 sor mit csinál?
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fileSize="+fs);
}
</script>
<p>A frissítés sokáig tarthat, ha nagy a .tft fájl. Ellenőrizd a feltöltés folyamatát a kijelzőn.</p>
</body>
</html>
)=====";
// Sikeres oldal
char success_html[] = R"=====(
<!DOCTYPE html>
<html lang="en">
<head>
<title>Nextion kijelző frissítő</title>
</head>
<body>
Frissítés sikeres!
</body>
</html>
)=====";
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Fájl feltöltés kezelés
bool handleFileUpload() {
HTTPUpload& upload = nextion_update_server.upload(); // HTTP alapú fájl feltöltés
if (!upload.filename.endsWith(F(".tft"))) { // Ellenőrizzük, hogy a fájl .tft végű-e
nextion_update_server.send(500, F("text/plain"), F("CSAK .TFT FÁJL ENGEDÉLYEZETT!\n")); // Ha nem akkor hibaüzenet kiiratása
return false; // Visszatérési érték flase
}
if (!result) { // Ha result értéke hamis
nextion_update_server.sendHeader("Connection", "close"); // Átirányítjuk a failure.html oldalra a klienst
nextion_update_server.send(200, "text/html", "failure_html?reason=" + nextion.statusMessage); // reason hogy megy innét át a html fájlba? Így jó?
//server.sendHeader(F("Location"),"/failure.html?reason=" + nextion.statusMessage); // Ezt hogy tudom a felső sorba beírni?
return false; // Visszatérési érték false
}
if (upload.status == UPLOAD_FILE_START) { // upload.status értékét vizsgáljuk, értéke 0
Serial.println(F("\nFajl fogadva. Nextion frissitese..."));
result = nextion.prepareUpload(fileSize); // Előkészítjük a Nextion kijelző soros küldéshez és elküldjük a fájl pontos méretét
if (result) { // Ha készen áll a Nextion kijelző a fogadásra
Serial.print(F("Feltoltes inditasa. A fajl merete: "));
Serial.print(fileSize); // Fájl méretének kiírása
Serial.println(F(" bytes"));
}
else {
Serial.println(nextion.statusMessage + "\n"); // Ha végzett akkor kiiratjuk a státusz üzenetet
return false; // Visszatérési érték false
}
}
else if (upload.status == UPLOAD_FILE_WRITE) { // upload.status értékét vizsgáljuk, értéke 1
result = nextion.upload(upload.buf, upload.currentSize); // Írjuk a fogadott byte-kat a Nextion kijelzőbe
if(result) {
Serial.print(F(".")); // Amíg a feltöltés tart, addig pontokat iratunk ki
}
else {
Serial.println(nextion.statusMessage + "\n"); // Ha végzett akkor kiiratjuk a státusz üzenetet
return false; // Visszatérési érték false
}
}
else if (upload.status == UPLOAD_FILE_END) { // upload.status értékét vizsgáljuk, értéke 2
nextion.end(); // Soros kapcsolat bontása és Nextion szoftveres újraindítása
Serial.println("");
Serial.println(nextion.statusMessage); // Kiratjuk a státusz üzenetet
return true; // Visszatérési érték true
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void setup(void) {
Serial.begin(115200);
WiFi.mode(WIFI_AP); // WIFI Access Point módba állítása
WiFi.softAP(ssid, password, 1, 0, 1); // WIFI konfiguráció: SSID és Jelszó, csatorna, rejtett ssid, maximum csatlakozható eszközök
delay(500); // Késleltetés
WiFi.softAPConfig(local_ip,gateway,local_mask); // IP címek beállítása
Serial.print("AP neve ");
Serial.println(ssid); // SSID kiírása
Serial.print("IP cim: ");
Serial.println(WiFi.softAPIP()); // IP cím kiírása
if (!MDNS.begin(host)) {
while (1) {
delay(1000);
}
}
// Szerver inicializálás
nextion_update_server.on("/", HTTP_POST, [](){
Serial.println(F("Succesfully updated Nextion!\n")); // Sikeres Nextion frissítés kiiratása soros monitoron
nextion_update_server.sendHeader("Connection", "close");
nextion_update_server.send(200, "text/html", success_html); // Átirányítjuk a klienst a sikeres oldalra, miután kezeltük a fájl feltöltést
return true;
},
handleFileUpload // Fogadás és fájl mentése kijelzőre
);
// Fogadjuk a fájl méretét egyszer, amikor kiválasztjuk a fájlt.
nextion_update_server.on("/fs", HTTP_POST, [](){ // Ez mit jelent? "/fs"
fileSize = nextion_update_server.arg(F("fileSize")).toInt(); // "fileSize" a weboldalról jön
nextion_update_server.send(200, F("text/plain"), "");
});
nextion_update_server.begin();
Serial.println(F("\nHTTP szerver elinditva"));
} -
its_grandpa
tag
válasz
Krilehor #17940 üzenetére
Szerintem nem de még nem ittam meg a második kávémat
Ez a Canton 1200 a 868.4 Mhz-n kommunikál, gondolom azért, hogy a sokkal nagyobb számú 433 Mhz-s eszköz még véletlenül se vezérelje.
Azt kellene kiderítened milyen vezérlő IC van benne. Ezután könnyebb lenne találni hozzá valamilyen vezérlést pl. infrást (google -> diy ir remote volume control).szerk. ekkold munkásságát ismerve (és elismerve) biztos tudna valami megoldást.
-
Krilehor
tag
válasz
its_grandpa #17931 üzenetére
its_grandpa és #17932Aryes köszi a válaszokat.
Megpróbálkozom a dekódolással. Ha nem sikerülne, akkor manuálisan egy ilyen és az ebben a threadben említett megoldással még kivitelezhető lenne azért szerintetek? -
Harcipocok84
tag
Arduino Nano-t szeretnék ISCP porton keresztül programozni.
USBasp eszközöm van, és BitBurner a program.
Arduino Mega 2560-at simán tudok vele programozni, de a Nano-t nem. Azt írja hogy nincs kapcsolat. A Bitburner-t pedig átállítottam atmega328P-re.
Mi lehet a probléma? -
válasz
Krilehor #17928 üzenetére
Ha jól gugliztam utána, nem túl komplikált/sok funkciós a távirányítója, esetleg meg lehetne próbálni a távirányítót szétszedni és a kontaktusokra egy-egy vezetéket forrasztva egy ESP32-ről közvetlenül vezérelni azt (emulálni a gombnyomásokat).
Tudsz esetleg szerezni hozzá egy másik távirányítót (hogy ne az eredetit tedd tönkre)? -
its_grandpa
tag
válasz
Krilehor #17928 üzenetére
Ez egy nagyon nehéz feladat szerintem. Számtalan rádiós protokoll van, a pontos frekvencia ismerete kevés. Próbálkoztam sokat 868 Mhz kapcsoló vezérlésével RFM22-es modullal.
Kellene egy usb-s RTL-SDR vevő és akkor az RTL_433-al talán ki lehet deríteni a kódolás módját (https://github.com/merbanan/rtl_433).
Az RFM69 (és sok más egyéb) vezérlését, protokollokat meg tudod nézni itt https://www.airspayce.com/mikem/arduino/RadioHead/index.html.Én inkább megpróbálnám kiváltani a rádiós vezérlést.
Számtalan eszköz decodere megtalálható de sajnos a tiéd (vagy ahhoz hasonló) nem.
https://triq.org/explorer/ -
válasz
Wolfram #17929 üzenetére
Sajnos én az analóg részhez nem annyira értek, de egy 10kΩ megfelelő lehet a feladatra. Annyi gond lehet, hogy a poti egyik végállásában rövidre tudja zárni a két pólust, ami tönkreteheti a végfokot, tehát szükség lesz még egy védő ellenállásra.
Kevésbé veszélyes megoldás lenne a fixre beforrasztott, 2db ellenállásból álló feszültségosztó, hátránya, hogy nem állítható így a hangerő, csak a tagok cseréjével. -
Krilehor
tag
Sziasztok.
Kezdő vagyok és segítséget szeretnék kérni. Vagy egy 868.4MHz-en működő rádiós mélyládám (Canton Sub 1200R) amit egy Logitech Harmony Elite távirányítóval szeretnék vezérelni, ami csak infrát ismer. Értelmezésem szerint nekem egy IR-RF gatewayt kellene építenem. Amit kezdésnek gondoltam beszerezni:
- Arduino Uno (Rev3)
- WiFi Module: ESP8266
- Radio module: RFM69HCW vagy AR-LORA-868 vagy egyéb? (itt nekem elég max 10m-es hatótáv)
- valami IR LED és IR receiver
- ha kész akkor mondjuk egy Arduino Nano-ra ráforrasztani és valami házba betenni?WiFi modulet azért gondoltam, hogy weben keresztül is meg lehessen nézni az aktuális állapotot, esetleg még vezérelni is. Ahogy néztem cikkeket, ez evvel a modullal meg is oldható
Rádió modullal valahogy dekódolni is kellene majd a távirányító kódjait, remélem ezt valamilyen libbel meg lehet oldani, legvégső esetben olvastam manuálisan is kivitelezhető
Amiket kinéztem jó irány lenne? Főként a 868MHz-es rádió modulnál vagyok elég bizonytalan, mert mindenhol a 433MHz-ról vannak tutorialok.
-
válasz
Wolfram #17924 üzenetére
A fotó mindenképp segít, ha itt nem is, a hobbielektronika topikban biztosan tudnak az alapján segíteni.
Látatlanban annyit tudok javasolni, hogy ragaszd le valamivel a hangszóróját, ehhez elektronikai ismeret sem kell, csak szigszalag.
De amúgy hogy lehet egy riasztó túl hangos?
-
Wolfram
aktív tag
Vettem egy kínai noname betörés riasztót, az a gond vele hogy túl hangos és nincs rajta hangerőszabályzó.
Mekkora tudás kell a hangerő szabályozhatóvá tételéhez?
Ha posztolok egy képet a belsejéről valaki elmagyarázza melyik kábelt kell elvágni? -
Tomika86
senior tag
válasz
Janos250 #17922 üzenetére
Köszönöm a választ!
És ha jól gondolom ezek is csak azért vannak, hogy az spiffs-ről beolvassa a tartalmakat.
String getContentType(String filename){
if(server.hasArg(F("download"))) return F("application/octet-stream");
else if(filename.endsWith(F(".htm"))) return F("text/html");
else if(filename.endsWith(".html")) return F("text/html");
else if(filename.endsWith(F(".css"))) return F("text/css");
else if(filename.endsWith(F(".js"))) return F("application/javascript");
else if(filename.endsWith(F(".png"))) return F("image/png");
else if(filename.endsWith(F(".gif"))) return F("image/gif");
else if(filename.endsWith(F(".jpg"))) return F("image/jpeg");
else if(filename.endsWith(F(".ico"))) return F("image/x-icon");
else if(filename.endsWith(F(".xml"))) return F("text/xml");
else if(filename.endsWith(F(".pdf"))) return F("application/x-pdf");
else if(filename.endsWith(F(".zip"))) return F("application/x-zip");
else if(filename.endsWith(F(".gz"))) return F("application/x-gzip");
return F("text/plain");
}
bool handleFileRead(String path) { // send the right file to the client (if it exists)
Serial.print("handleFileRead: " + path);
if (path.endsWith("/")) path += "index.html"; // If a folder is requested, send the index file
String contentType = getContentType(path); // Get the MIME type
String pathWithGz = path + ".gz";
if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) { // If the file exists, either as a compressed archive, or normal
if (SPIFFS.exists(pathWithGz)) // If there's a compressed version available
path += ".gz"; // Use the compressed verion
File file = SPIFFS.open(path, "r"); // Open the file
size_t sent = server.streamFile(file, contentType); // Send it to the client
file.close(); // Close the file again
Serial.println(String("\tSent file: ") + path);
return true;
}
Serial.println(String("\tFile Not Found: ") + path); // If the file doesn't exist, return false
return false;
} -
-
Janos250
őstag
válasz
Tomika86 #17919 üzenetére
Én be szoktam rakni a programba, mégpedig általában "R" típusú stringgel, mert akkor a sorváltás, szóköz, stb. is jól látszik.
Itt egy minta az R stringre:
https://prohardver.hu/tema/arduino/hsz_17542-17542.html
Ha kész WEBszervert használsz, akkor persze csak a htmlHeadertől kell.
És ami a loopban a mintában van, az neked nem kell, egész más lesz. -
Tomika86
senior tag
A 3 html fájlt belerakhatom Stringként a forráskódba, át kellene alakítani hozzá. Vagy így a jobb ha fájlként fel van töltve az esp32-re?
Esp32 ota programban benne vannak a forráskódban.
A szerveres dolgot átgondoltam
-
Tomika86
senior tag
válasz
Janos250 #17917 üzenetére
Már szerkeszteni nem tudtam
Szeretnék egyet kérdezni, ha tud valaki segíteni ebben.
Van ebben a könyvtárban webserveres példaprogram.Viszont én már az ESP32 ota feltöltéshez is azt használok, ebbe belezavar ha most a kijelzőét is beletenném a programba?
Ezek első blikkre mindkettőben ott vannak
MDNS.begin(host);
WebServer server(80);
server.begin();
server.handleClient();Nextion upload webserver
#include <FS.h>
#include <WiFi.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <SPIFFS.h>
#include <ESPNexUpload.h>
/*
ESP32 uses Hardware serial RX:16, TX:17
Serial pins are defined in the ESPNexUpload.cpp file
*/
const char* ssid = "your_wlan_ssid";
const char* password = "your_wlan_password";
const char* host = "nextion";
// used only internally
int fileSize = 0;
bool result = true;
// init Nextion object
ESPNexUpload nextion(115200);
WebServer server(80);
String getContentType(String filename){
if(server.hasArg(F("download"))) return F("application/octet-stream");
else if(filename.endsWith(F(".htm"))) return F("text/html");
else if(filename.endsWith(".html")) return F("text/html");
else if(filename.endsWith(F(".css"))) return F("text/css");
else if(filename.endsWith(F(".js"))) return F("application/javascript");
else if(filename.endsWith(F(".png"))) return F("image/png");
else if(filename.endsWith(F(".gif"))) return F("image/gif");
else if(filename.endsWith(F(".jpg"))) return F("image/jpeg");
else if(filename.endsWith(F(".ico"))) return F("image/x-icon");
else if(filename.endsWith(F(".xml"))) return F("text/xml");
else if(filename.endsWith(F(".pdf"))) return F("application/x-pdf");
else if(filename.endsWith(F(".zip"))) return F("application/x-zip");
else if(filename.endsWith(F(".gz"))) return F("application/x-gzip");
return F("text/plain");
}
bool handleFileRead(String path) { // send the right file to the client (if it exists)
Serial.print("handleFileRead: " + path);
if (path.endsWith("/")) path += "index.html"; // If a folder is requested, send the index file
String contentType = getContentType(path); // Get the MIME type
String pathWithGz = path + ".gz";
if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) { // If the file exists, either as a compressed archive, or normal
if (SPIFFS.exists(pathWithGz)) // If there's a compressed version available
path += ".gz"; // Use the compressed verion
File file = SPIFFS.open(path, "r"); // Open the file
size_t sent = server.streamFile(file, contentType); // Send it to the client
file.close(); // Close the file again
Serial.println(String("\tSent file: ") + path);
return true;
}
Serial.println(String("\tFile Not Found: ") + path); // If the file doesn't exist, return false
return false;
}
// handle the file uploads
bool handleFileUpload(){
HTTPUpload& upload = server.upload();
// Check if file seems valid nextion tft file
if(!upload.filename.endsWith(F(".tft"))){
server.send(500, F("text/plain"), F("ONLY TFT FILES ALLOWED\n"));
return false;
}
if(!result){
// Redirect the client to the failure page
server.sendHeader(F("Location"),"/failure.html?reason=" + nextion.statusMessage);
server.send(303);
return false;
}
if(upload.status == UPLOAD_FILE_START){
Serial.println(F("\nFile received. Update Nextion..."));
// Prepare the Nextion display by seting up serial and telling it the file size to expect
result = nextion.prepareUpload(fileSize);
if(result){
Serial.print(F("Start upload. File size is: "));
Serial.print(fileSize);
Serial.println(F(" bytes"));
}else{
Serial.println(nextion.statusMessage + "\n");
return false;
}
}else if(upload.status == UPLOAD_FILE_WRITE){
// Write the received bytes to the nextion
result = nextion.upload(upload.buf, upload.currentSize);
if(result){
Serial.print(F("."));
}else{
Serial.println(nextion.statusMessage + "\n");
return false;
}
}else if(upload.status == UPLOAD_FILE_END){
// End the serial connection to the Nextion and softrest it
nextion.end();
Serial.println("");
//Serial.println(nextion.statusMessage);
return true;
}
}
void setup(void){
Serial.begin(115200);
Serial.println(F("\nRunning UploadServer Example\n"));
Serial.setDebugOutput(false);
if(!SPIFFS.begin()){
Serial.println(F("An Error has occurred while mounting SPIFFS"));
Serial.println(F("Did you upload the data directory that came with this example?"));
return;
}
//WIFI INIT
Serial.printf("Connecting to %s\n", ssid);
if (String(WiFi.SSID()) != String(ssid)) {
WiFi.begin(ssid, password);
}
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print(F("\nConnected! IP address: "));
Serial.println(WiFi.localIP());
MDNS.begin(host);
Serial.print(F("http://"));
Serial.print(host);
Serial.println(F(".local"));
//SERVER INIT
server.on("/", HTTP_POST, [](){
Serial.println(F("Succesfully updated Nextion!\n"));
// Redirect the client to the success page after handeling the file upload
server.sendHeader(F("Location"),F("/success.html"));
server.send(303);
return true;
},
// Receive and save the file
handleFileUpload
);
// receive fileSize once a file is selected (Workaround as the file content-length is of by +/- 200 bytes. Known issue: https://github.com/esp8266/Arduino/issues/3787)
server.on("/fs", HTTP_POST, [](){
fileSize = server.arg(F("fileSize")).toInt();
server.send(200, F("text/plain"), "");
});
// called when the url is not defined here
// use it to load content from SPIFFS
server.onNotFound([](){
if(!handleFileRead(server.uri()))
server.send(404, F("text/plain"), F("FileNotFound"));
});
server.begin();
Serial.println(F("\nHTTP server started"));
}
void loop(void){
server.handleClient();
} -
Tomika86
senior tag
Sziasztok!
Ha valakinek kellene:
[link]Nextion kijelzőre .tft fájl feltöltése ESP32-n keresztül, WIFI kapcsolattal
-
válasz
gordonfreemN #17914 üzenetére
Elméletileg semmi akadálya, de utána kell nézni, hogy 5V-os jelszinttel kompatibilis-e a választott kijelző, mert ezek jellemzően 3,3V-ról üzemelnek inkább. De ez amúgy nem fog akadályt jelenteni, csak ha olyan, akkor kell hozzá szintillesztés.
Itt egy példa, hogy hogy kell ezt elképzelni (a kijelző itt egész pici, csak 0.95"-os): https://www.electronics-lab.com/project/color-oled-ssd1331-display-arduino-uno/update:
Itt egy kijelző kimondottan Arduino Mega board-hoz: [link]. Szerintem kompatibilis az Uno GPIO tüskesorával is, de lehet maga a board kevés lesz (pl. kevés a RAM) a driveréhez. -
gordonfreemN
addikt
Na, köszi de akkor végül csak a kijelző lesz, mert bár én se ecseteltem, de 60mm-ben maximalizálnám a dolgot. Szolidra szeretném az előlapon, nem meghatározóra.
De amúgy a ledes se hülyeség, bár hogy milyen kicsi a lépték azt nehéz lenézni.
Mindenesetre oled-et ily módon tudnék vezérelni atmegával? -
válasz
gordonfreemN #17912 üzenetére
Hát annyi ötletem lenne, hogy egyénileg címezhető ws2812 RGB LED-eket kellene sűrűn egymás mellé applikálni egy PCB-re, mert ennyire sűrű LED szalagot gyárilag nemigen csinálnak.
Nem tudom mekkorára szeretnéd csinálni a kijelzőt, a legsűrűbb a 144LED/m, ott kb. 7mm egy osztás, akkor 10cm-re 14/15 LED jut. Arra kell tenni mondjuk egy polikarbonát csíkot, aminek a hátoldala fel van csiszolva, hogy szórja a fényt, és akkor egybefüggő csíknak fog látszani kívülről. Ez jutott eszembe.A kijelzős megoldást én nem vetném el abban az esetben, ha piciben szeretnéd elkészíteni, egy 4-5cm hosszú színes OLED kijelző erre pont jó lenne, viszont nagyobban azért nem érdemes, mert ilyen hosszúkás kijelzőt nemigen gyártanak, és a hosszával együtt a szélessége is nő, na meg az ára is, hatványozottan.
-
válasz
gordonfreemN #17909 üzenetére
Én inkább RGB ledekkel próbálnám megcsinálni, a videón látható mütyür is azzal van megoldva. Ügyes megoldás, az optikai részét nem tudom hogy csinálták.
Egy LCD kijelző, vagy inkább színes OLED is szóba jöhetne amúgy, de feleslegesen nagy kellene belőle, és nem biztos, hogy ugyanolyan flowless lenne a látvány, ezeknek a képrissítése nem túl gyors.
-
Tomika86
senior tag
válasz
Tomika86 #17908 üzenetére
Na így jó:
#define Gyujtas 15
#define Led 2
unsigned long aktualis_millis;
unsigned long mentett_millis;
unsigned long ido = 20000;
unsigned long kulonbseg_millis;
byte ido_futott;
byte beleptunk;
void setup() {
pinMode(Gyujtas, INPUT);
pinMode(Led, OUTPUT);
Serial.begin(115200);
}
void loop() {
if ((digitalRead(Gyujtas) == 1) || beleptunk) {
kikapcsolas();
}
Serial.println("Fut a program");
delay(1000);
}
void kikapcsolas() {
beleptunk = 1;
if(ido_futott == 0) {
mentett_millis = millis();
ido_futott = 1;
}
kulonbseg_millis = millis() - mentett_millis;
if (kulonbseg_millis <= ido) {
if (digitalRead(Gyujtas) == 0) {
ido_futott = 0;
beleptunk = 0;
Serial.println("Kilepes");
return;
}
Serial.print("Ido kulonbseg: ");
Serial.println(kulonbseg_millis);
Serial.println("Idozitoben vagyunk");
}
else {
Serial.println("Esp leallas itt");
// deep_sleep();
digitalWrite(Led, HIGH);
}
} -
gordonfreemN
addikt
Üdv!
Azt szeretném kérdezni, szerintetek megolható-e atmegával meg egy beszerezhető kijelzővel hasonló kivezérlés kijelző?
[link]
0:30-tól -
Tomika86
senior tag
Hát végül összeraktam, elég nyakatekert, de működik.
Soros kiírasok a szimulátor miatt van.
[link] -
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 -
Tomika86
senior tag
Megpróbálom mégegyszer:
loop {
.
.
.
.
if (!digitalRead(Gyujtas))
{
kikapcsolas();
}
.
.
.
.
.
}
void kikapcsolas() {
fuggveny_1();
....
idozito 20másodpercig
Ha a 20sec letelt akkor: függvény_2(ebben lesz a deep_sleep())
Ha a kikapcsolas függvényben bárhol digitalRead(Gyujtas)
akkor fuggveny_3 aztán kikapcsolas() függvényből kilépés
}És ha a kikapcsolas függvénybe újra belépünk akkor a 20sec induljon újra
Új hozzászólás Aktív témák
Hirdetés
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Eredeti játékok OFF topik
- exHWSW - Értünk mindenhez IS
- CMF Phone 2 Pro - a százezer forintos kérdés
- Le Mans Ultimate
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- Autós topik
- Nyaralás topik
- EAFC 25
- További aktív témák...
- Apple iPhone 13Pro 128GB Kártyafüggetlen 1Év Garanciával
- Garmin Fenix 8 Amoled 51mm Sapphire Carbon Gray DLC - Használt, karcmentes
- Nitro ANV15-51 15.6" FHD IPS i5-13420H RTX 4050 16GB 512GB NVMe magyar vbill ujjlolv gar
- Apple iPhone SE 2020 64GB Kártyafüggetlen 1Év Garanciával
- iPad Pro 11 gen 2 + magic keyboard magyar makulátlan új állapot
- BESZÁMÍTÁS! Dell Precision 5820 XL Tower PC - Xeon W-2123 112GB RAM 512GB SSD 1TB RX 580 8GB Win 11
- Xiaomi Redmi Note 13 256GB, Kártyafüggetlen, 1 Év Garanciával
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X3D 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- Tablet felvásárlás!! Samsung Galaxy Tab A8, Samsung Galaxy Tab A9, Samsung Galaxy Tab S6 Lite
- BESZÁMÍTÁS! Gigabyte H610M i5 13400F 32GB DDR4 512GB SSD RTX 3070 8GB Zalman Z1 Plus Enermax 750W
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest