- Hónap végén érkezik a Xiaomi Band 10, ára is van
- Milyen okostelefont vegyek?
- Samsung Galaxy A55 - új év, régi stratégia
- Samsung Galaxy S23 Ultra - non plus ultra
- One mobilszolgáltatások
- Elkészült és telepíthető az Android 16
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Mobil flották
- Xiaomi 15 - kicsi telefon nagy energiával
- Samsung Galaxy A54 - türelemjáték
-
Mobilarena
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
-
its_grandpa
tag
válasz
Postas99 #23524 üzenetére
>> Idén tervbe van véve a mozgó szemű horror baba.
Remélem nem vágnak ki a modik.
Van elfekvőben PT IP kamerám (vga,wifi és drót) aminek a mechanikája jó lehet(ne) szemmozgatáshoz.
Meg minden olyan szerkezethez ami vízszintes, függőleges mozgást igényel ki erővel.
Gombokért felajánlom a barkácsoló kedvű fórum lakóknak. -
its_grandpa
tag
válasz
Undoroid #23517 üzenetére
>>Pontosan hogyan lehet azt az ESP01-et programozni?
Pontosabban a lefordított binárist feltölteni, mert programozni több nyelven és IDE-vel lehet.
Az ESP01 GPIO0 lábát kell a GND-re kötni boot előtt.
Ez a programozó nem szerencsés választás és nincs kép a hátáról sem.
Ezen a típuson egy anya-anya Dupont kábellel rövidre lehet zárni a lábakat mielőtt
az usb-be dugod a programozót (én rövid usb kábelt is használok).
Ezt kell megoldanod valahogy.
Az akkus/elemes tápláláshoz meg deepsleep kell,ami az ESP01-nél egy nem egyszerű forrasztás. [link] + némi kód módosítás. -
its_grandpa
tag
válasz
Cheesy #23488 üzenetére
Ránéztem a kódra, jelenleg annyi az ötlet, hogy a setup-ban, az
sendATCommand("AT+CSQ"); után szúrd be a
sendATCommand("AT+CMEE=2"); sort
A SIM800 AT command manual 1.11 alapján ez a
2 Enable +CME ERROR: <err> result code and use verbose <err> values
A te modulodban vélhetően 0 ez a paraméter és akkor csak "ERROR" üzenetet kapsz.
0 Disable +CME ERROR: <err> result code and use ERROR instead.
Ezt kapod az AT+CPIN?-re, láttuk, a bővebb üzenet talán segít.
Az AT+CMEE? egyébként kiírja a jelenlegi beállítást, de az AT manual 390 oldalas olvasmány :) -
its_grandpa
tag
válasz
Cheesy #23486 üzenetére
>>Az ESP32-vel próbáltam a tanácsaid alapján tesztelni a SIM800L-t ...
Én a SIM800L tesztelésére csak sima soros porti megoldást javasoltam, ESP nélkül.
Végig zongorázhatnál egy rakat AT parancsot, hátha kiderül a baj.
Nem értem miért adtál neki 5.0V-t amikor a max. 4.2V.
Az Arduinos kód feltöltés rész világos, így is kell.
Teljesen biztos vagy abban,hogy a kód hibátlan ?
A #23479-ben csak egy részlet látszik.Én csak kipróbálnám a "How To Test A GSM Modem Manually"-t (2. link a #23485-ben).
-
its_grandpa
tag
válasz
Cheesy #23479 üzenetére
Nem írtad honnan tápolod a SIM800-at, 3.7 - 4.2 volt kell neki és néha 2A !
>> Based on my experience, the module is a bit power-hungry and the current consumption can be up to 2 A in peaks.ESP32-t írtál emiatt feltételezem,hogy van usb uart adaptered a kód feltöltéséhez.
Ha össze tudod vezetékelni + rendes táp, putty-al tudnád tesztelni a modult. -
its_grandpa
tag
válasz
Undoroid #23426 üzenetére
Megnéztem az 1.8-as Arduinómban, amiben az alábbi alaplapkezelők vannak (az arduino-s is httpS):
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json,
https://arduino.esp8266.com/stable/package_esp8266com_index.json,
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
És meg is találtam.
Ezt a VCP drivert telepítetted ? [link]
-
its_grandpa
tag
válasz
vargalex #23251 üzenetére
>>Ugye most a kazán "vezérli" a szivattyút.
Én is ebben a cipőben jártam, nagyon megértem a törekvésedet.
Nyílt égésterű öntöttvas gázkazán, a fűtéssel együtt indult a keringető (2-es fokozat).
Nagyon nem jó üzemállapot, mert sok időbe telt amíg a kazán elért egy normális hőfokot (~ 45C).
A táblázatomat nézve 2018.01-ben vettem Aliról 2db XH-W3001-220-at (még 265 volt a $ ) 1.200.-/db áron.
Még most is az első működik.Az érintkező a rézcsövön, a keringető akkor indul ha már 45 fokos a víz és leáll 40-nél. Amikor a szoba termosztát leállítja a kazánt a keringető nem áll le amíg a víz nem lesz 40 fok ( 2 törülköző szárító veszi fel a "hulladékhőt").Az első ESP8266-os relé modult 2018.11 hóban (már 289 volt a $ ) vettem, akkor kezdtem el "okosotthonozni".
-
its_grandpa
tag
Ez az nap is jól kezdődik.
Bocs Teki de azt most loptam. -
its_grandpa
tag
válasz
Wolfram #22952 üzenetére
Többet tudnánk segíteni ha elárulnád mit szeretnél megoldani.
Általam kipróbált és működő (nem filléres) megoldás n+1 433Mhz-s eszköz vételére.
1 Arduino Mega + Rxb6 + Rflink [link]
2 Lilygo + Openmqttgateway [link]
3 RTL-SDRAz ESP-s megoldások is működnek de (szerintem) páka+programozás is szükséges, még ha minimális is.
-
its_grandpa
tag
válasz
Wolfram #22762 üzenetére
Mint kés a vajon
Kapacitív érintkező, bizonyos közelítés távolságot elbír, le is írta - It'll work through a few millimeters of plastic ..
Kommentben - I found that they worked without any kind of problems through 3mm of 3D-printing... I'd guess that you could push it up to around 5mm without loosing the ability to activate the switch. -
its_grandpa
tag
válasz
Wolfram #22760 üzenetére
Ez egy ~ 17*20*3 mm-es cucc.
1. Fúró,lombfűrész,tűreszelő. Megcsinálod a "likat" neki (nem lesz tökéletes), berakod a modult festhető tömítővel, maszkoló szalaggal leragasztod és lefújod bármilyen színűre.
2. Keresel egy lézervágót aki tökéletes "likat" tud vágni rajta.
3. 3D nyomtatóval nyomtatsz megfelelő méretű előlapot.
[link](nekem ez téli hobbi, még nincsenek beépítve, lehet soha nem is lesznek)
-
its_grandpa
tag
#define BUTTON_PIN 4
void setup()
{
RADIO_FREQ freqs []= {9500, 9700, 10190, 10700};
int freqNum = sizeof(freqs) / sizeof(freqs[0]); // csatornák száma kiszámolva
int currentFreq = 0;
// hangolás
radio.setBandFrequency(FIX_BAND, freqs[currentFreq]);
// gomb figyelés beállítása
pinMode(BUTTON_PIN, INPUT_PULLUP);
.
.
.
.
}
void loop()
{
byte buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW) { // gomb megnyomva
currentFreq++;
if (currentFreq = freqNum) currentFreq=0;
} // button state
.
.
.
.
.
} // loop
-
its_grandpa
tag
válasz
Janos250 #22045 üzenetére
Emlékeim szerint a deep sleep-et tesztelgetted.
Az S3 doksijáben ez keltette fel a figyelmemet:RTC: GPIO0-5 can be used to wake up the chip from Deep-sleep mode. Other GPIOs can only wake up the chip from Light-sleep mode.
Az S3 4 RTC forrást kezel egy <100 HUF-os 32,768 kHz óra kvarccal 1 uA a deep-sleep fogyasztása. Az internal 150kHz RC oscillatorral (default) még kevesebb de az nem annyira pontos. Gondoltam érdekes lehet a DSnnnn rtc modul kiváltására.
-
its_grandpa
tag
válasz
2thletme2day #21982 üzenetére
Akkor teszteljünk (github kód sorszámot írok).
201 displayNumber(firstHourDigit, 126, clockHourColour);
Ez kiírja az óra első digitjét ami nálad 2,1,0 mivel 24 órás.
Írj egy for ciklust 0-9 ig és hívd meg vele ezt az fv-t.for (int i=0; i < 10 ; i++)
{
displayNumber(i, 126, clockHourColour);
delay(500); /* hasamra ütöttem */
}
Ha az óra first digitje 0-9-ig szépen látszik akkor nincs gond az offsettel.
Az idő ellenőrzését azért írtam, hogy nézd meg a soros port kiírásánál, tényleg jó
időt kapsz-e a DS3231-től (másik szerző kódja). -
its_grandpa
tag
válasz
2thletme2day #21978 üzenetére
Rögtön az elején, ez így teljesen felesleges:
#ifdef __AVR__
#endif
Ennek van értelme (Adafruit lib):
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
Beraktam notepad++ ba a kódot, sorszámok az alapján.
A 101-ben kiírja a soros portra az óra értékét (MyDateAndTime.Hour), ezt ellenőrizd, tényleg 23:46 ?
A strip construktornak meg kell adni a ledek számát (LEDCLOCK_COUNT) ami nálad 252.
Ebben a kódban viszont csak 216. [link]Viszont a displayNumber fv-k hívásakor az offsetBy értéke ugyanaz.
Azt gondolom hibás a ledszalag címzése de majd a WS2812 guruk megmondják, én még nem programoztam ilyet.
Annyit tudsz még megtenni, hogy a 121 void displayNumber() fv.-ben a switch elé beszúrsz egy sort és kiíratod a soros portra digitToDisplay értékét, hogy lásd melyik digitet gondolja megjeleníteni.
Az Adafruit-nak van egy rakat example kódja a githubon, tesztelheted a szalagod /ledszám, szegmensek offsetje/ (simple.ino kis módosításával).szerk: a forrás linkjét berakhattad volna
-
its_grandpa
tag
válasz
Wolfram #21975 üzenetére
>> 25 x 17 mm (elírás lenne?)
Nem az, megmértem az S3-at, itt van előttem az asztalon.>> Az a tüskesor nem normális az biztos.
Emlékeim szerint az S3 ráment a breadboard-ra amikor beforrasztottam a tüskesort, C6-om még nincs.
Még tanulom ezeket az új chip-eket, az S3 RTC-t tervezem tesztelni csak hát az idő... -
its_grandpa
tag
válasz
gordonfreemN #21897 üzenetére
Remélem nem hágok át semmilyen szabályt.
A Mega2560-ak ára nagyot esett Ali-n, 75 % , megkapod ~ 10 $ -ért (8,90 ; 9,50).
Sok helyen - trükkösen - 10 $ felett free shipping.
De hát úgy is 2 kell, legyen tartalék, 20$ meg ~ 7.200.- HUF. -
its_grandpa
tag
Ezek az .ino-k csak az Arduino kompatibilitás miatt vannak, minden kód .cpp és .hpp.
Szerintem VSC-vel fordítja, megnéztem a platforio.ini-jét, azzal jó lenne.>>Vagyis csak létrehoz egy TALLY_TEST_SERVER konstanst, és betölti a kliens kódját.
Szerintem nem tölti be a kliens kódját illetve gond van a sorrenddel. Ezt írják az okosok az Arduino fórumon.
The IDE first compile the dotCPP and only after compile the dotINO file, with the included dotH.
Ha ez igaz, akkor lefordul az ATEM_tally_light.cpp az ATEM_tally_test_server.ino előtt ahol a #define van.A server.ino nem kell a #define TALLY_TEST_SERVER meg a Atem_tally_light.cpp-be (szerintem) jó helyen van.
Lehetne az Atem_tally_light.hpp-ben is de a forráskódot gyakrabban nézzük mint az include fájl tartalmát.ps: miért velem gugliztatod ki hol van a github-on ?
-
its_grandpa
tag
-
its_grandpa
tag
válasz
Wolfram #21814 üzenetére
Még tanulom, az biztos, hogy az Arduino ismeri (1.8-at használok) , az alapkezelő persze frissítve lett. Amit idáig próbáltam ESP_Easy-vel, minden működött (külön C3-as verziók vannak).
Van rajta antenna csak a másik oldalán, a kis piros "bigyó". Az enyém pont ilyen, logo nélküli.
-
its_grandpa
tag
Én ezt mindig elb....m, mert nem használok olyan ESP lapot amin rajta van az usb2com chip. Nem kell neked adapter.
>> Az USB portot nem tudom közvetlenül a Mac-be dugni egy mezei kábellel?
Nem értek a Mac-hez de szerintem menni fog.>>Ezen felül még telepíteni kell a ch340 driverét is, hogy szót értsenek?
Igen, kell keresned egy Mac-en működőt. -
its_grandpa
tag
válasz
Wolfram #21789 üzenetére
Partvonalról mert nem engem kérdeztél.
Nekem van 5 (a 15 day delivery miatt, nem szeretek sokat várni).
Az elején gondom volt a CDC usb serial-al nem tudtam rá feltölteni. Zadig-al mókoltam usb drivert, hogy legyen soros port.
ESP_Easy-vel kezdek az új board-okon mindig mert azt régóta használom.
Először a "normal"-t raktam fel + rá egy 4 digites led display-t + NTP setup, lett 1 pontos órám
Jött az oled kijelző de a "normal"-al nincs I2C-t tudó GPIO ezért kicseréltem az Easy-t a "display" verzióra. A következő lépés, hogy a 433Mhz->WiFi gateway által mqtt-n küldött hő/pára mérő adatokat megjelenítsem az oled-en. -
its_grandpa
tag
válasz
Janos250 #21776 üzenetére
>> A legbiztosabb, ha beteszed a kívánatosat az .ino mellé, akkor biztosan azt használja.
Sajna nem [link] , csak akkor ha " " jelek között van a forráskódban.
Gondot okozhat még az include fájlban lévő #ifndef feltétel.
A példát tekintve az #ifndef Base64 és az #ifndef base64 nem ugyan az, ellenőrizned kell van-e ilyen a tervezett include fájlban.Aki jót akar magának az kezdjen el VSC-zni, Arduino helyett.
-
its_grandpa
tag
-
its_grandpa
tag
válasz
its_grandpa #21631 üzenetére
Ez a szösszenet csak azért készült, hogy aki 433Mhz-es dolgokban töri a fejét az átgondolja mi történhet. A hőmérők adatait is lehet módosítva kiküldeni tehát fűtésre pl. nem biztos, hogy biztonságosan megfelel.
-
its_grandpa
tag
Felraktam párat a játszós Domo dashboardra, most készült.
A sárgák az enyémek, a -152.5 dekódolási hiba, legalábbis remélem, mert egyébként valaki megfagyott :)
De egyébként sok más üzenet is érkezik, elég nagy itt a 433Mhz-s "zaj".
A vezeték nélküli csengőm jelét rc-switch-el "grabbelve", pár sorral simán lehet send-elni, csenget is szépen.
Grab részlet:Decimal: 7915795 (24Bit) Binary: 011110001100100100010011 Tri-State: not applicable PulseLength: 551 microseconds Protocol: 5
Raw data: 7740,328,808,900,256,896,252,900,......................
Decimal: 7915795 (24Bit) Binary: 011110001100100100010011 Tri-State: not applicable PulseLength: 250 microseconds Protocol: 1
Raw data: 7756,300,836,888,264,888,264,888,......................
Arduino kód részlet:mySwitch.setPulseLength(551);
mySwitch.setProtocol(5);
mySwitch.send("011110001100100100010011");
mySwitch.setPulseLength(250);
mySwitch.setProtocol(1);
mySwitch.send("011110001100100100010011");
Ez egy érdekes msg a soros port konzolról:N: Send on /RTL_433toMQTT/Interlogix-Security/motion/400405 msg {"model":"Interlogix-Security","subtype":"motion","id":"400405","battery_ok":1,"switch1":"OPEN","switch2":"CLOSED","switch3":"CLOSED","switch4":"CLOSED","switch5":"CLOSED","raw_message":"4488f0","protocol":"Interlogix GE UTC Security
Nem tudom kié az a "szekuriti" de egy-két switch-et átírva "OPEN"-re és kiküldeni az üzenetet lehet hamar kiderülne.
Van a közelben rádiós redőny is -tudom is kinél - azt is lehetne mozgatni de nem lenne úri dolog. -
its_grandpa
tag
Még nem tudom
így jöttem ki árban és időben jobban.
Nemrég vettem egy LilyGo TTGO-t is (433Mhz) az OpenMQTTGateway-hez 7.000.- ért.
Látom az összes szomszéd hőmérőjét, meg persze az enyémeket is.
Nem volt még BLE-s ESP-m, most már van.
Az OMG jó volt agytornának, sokat tanultam mert fordítottam magamnak "játékból".
Az utolsó - nekem jó - verzió az 1.5, most 1.7 van de még erősen reszelik, nekem el se indult.
ps: Ki fogom próbálni pl. a BLE gatewayt. -
-
its_grandpa
tag
válasz
JulianSinulf #21499 üzenetére
Belenéztem Github-on a kódba.
>> Az utils részen a 29, 30. sorban ...
És nem adtál a 28.-ban hostnevet ? Szerintem próbáld meg.>>....egy lábat összezár a GND-vel ..
A GPIO0-át a gnd-re kell kötni, akkor kerül az ESP boot módba és persze mielőtt összedugod a USB-vel. Ilyenkor a soros porton 57600 boud-al lehet látni pár adatot a modulról.Az most hirtelen nem látom át hová írja a log-ot, de az ESP32-CAM_MJPEG2SD.ino 117. sorában van logSetup(); fv. hívás. Lehet egy log is segítene.
(nekem meg 1 kávé
)
-
its_grandpa
tag
Nem megyek bele többet a LoraWAN-ba.
Igen 2 eszköz tud önmagával beszélgetni, idézek:
>> A LoRa protokoll szépsége a hatótávolsága. A LoRa eszközök gyakorlati hatótávolsága általában valahol 10 km környékén van feltüntetve, az elérhető hatótáv pedig valahol 15 és 20 km között van. Számos tényező azonban növelheti vagy csökkentheti ezt a távolságot.
Forrás: https://www.sparkfun.com/news/3919
Csak annyi a feladat, hogy a balatoni nyaralód és BP között telepíts kb. 12 ilyet (Aryes is megírta, amit csak most vettem észre).
Lehet Heliumozni is csak milyen lesz ennek a kommunikációnak a biztonsága ?
Nézzétek meg a Helium map-et [link] . -
its_grandpa
tag
válasz
vegyszer #21440 üzenetére
Ez egy örökzöld,havonta előjön.
A válaszok röviden : igen,igen.
De te nem akarsz erre ennyit költeni (Aryes linkje #21442), itt az ára [link]
Jelenleg nincs MO-n elérhető free LoRaWan az álompolgároknak.
Olvasnivalók: [link] , [link] és a gyakorlat [link]
A járható megoldás egy kb. 6.000.- huf-os GSM modul+sok munka (és persze egy SIM valakitől). -
its_grandpa
tag
-
its_grandpa
tag
válasz
ViZion #21419 üzenetére
Ágyúval verébre ? :)
Arduino Pro mini, elmegy egy 18650-es akkuval 4 hónapot.
https://www.the-diy-life.com/how-long-can-an-arduino-run-on-batteries-i-tested-6-of-the-most-common-boards/
Ha meg moddolod akkor éveket (bár a 2900 napban kicsit kételkedem).
https://www.the-diy-life.com/making-an-ultra-low-power-arduino-pro/Hőmérséklet+pára projekt.
https://github.com/alexarch21/th433-sensorOK értem én, nem wifi,nem bt de a 433Mhz könnyen integrálható.
Oppps, ez lemaradt:
https://community.home-assistant.io/t/diy-low-power-433mhz-th-sensor-with-5-year-battery-life/499475 -
its_grandpa
tag
válasz
Wolfram #20811 üzenetére
Oooops, ez a kérdést csak most vettem észre.
Ehhez van egy vastag tűm, egyenesre köszörülve, főleg tranzisztor kiszedéshez.
Belemegy a furatba és rámegy a lábra.
Tüskesorra még nem próbáltam de én nem is forrasztok be tüskesort csak oda teszek egyes tüskét amelyik PIN-t használni szeretném. -
-
its_grandpa
tag
válasz
Wolfram #20638 üzenetére
Ezt most kérdés ?
Lora P2P, Lorawan nélkül, EU 868 Mhz - The typical range provided by LoRa can be up to three miles (5km) in urban areas, and up to 10 miles (15 km) or more in rural areas of line of sight.
Tekintve, hogy a Lora max. packet size256 byte, nem lesz paripa a kommunikáció.
Kombinált fogóval is lehet szöget beverni de az ideális eszköz a kalapács.
Arra kéne használni a Lora-t amire való. -
its_grandpa
tag
-
its_grandpa
tag
válasz
lanszelot #20330 üzenetére
>>.... mindegy melyik chippen. Általában az a 2-es pin.
Nem mindegy - Uno WiFiRev.2, Due, Zero, MKR Family and 101 boards the interrupt number = pin number.>> Serial print -ek lényegtelenek, az csak az ellenőrzéshez kellettek.
Aha, ellenőrzés - sem a counter, sem a currentDir változó értékét nem módosítod.Egy kis olvasni/tanulni való - [link]
>>'digitalPinToInterrupt' was not declared in this scope.
Hát igen, ehhez a makróhoz bizony kell egy #include <pins_arduino.h>>>Mi az az ISR?
A milánói kedvenc kocsmámba van kiírva,rövidítés. Itt Senkisem Római.A többiek kommentjeit olvasva úgy látom a stílusod náluk sem aratott osztatlan sikert.
Én elgondolkoznék a helyedben. -
its_grandpa
tag
válasz
lanszelot #20318 üzenetére
Ez a kód (szerintem) annyi sebből vérzik, hogy kénytelen vagyok ....
Az ISR-ben használt változók, volatile, tehát a definiciók:
volatile int keses = 1000;
volatile uint32_t lastms= 0;ISR-ben nem írunk a soros portra, ha jót akarunk magunknak.
Vegyunk fel a változásra egy boolean-t.volatile bool tekertem = false;
void teker(){
if (millis() - lastms > 200)
{
lastms = millis();
tekertem = true;
if(digitalRead(DT) == currentStateCLK) keses = keses+100;
else if (keses > 100) keses = keses-100;
lastStateCLK = currentStateCLK;
}
else tekertem = false;
} /* teker fv end */A void loop() -ban lehet kiírni a soros portra ha volt tekerés
if (tekertem)
{
serial.print-ek
}Sem a counter, sem a currentDir változó értékét nem módosítod, mindig ua.-t fogja kiírni.
És a hab a tortán.
Nem is értem miért működik mert ugyan INPUT_PULLUP a 2,3-as pin de az ISR fv. a 0-as pin-re van konfigurálva, nem szépen.attachInterrupt(0, teker, CHANGE);
Így illene:attachInterrupt(digitalPinToInterrupt(PIN), teker, CHANGE);
-
-
its_grandpa
tag
A #20152-ben feltett gonosz kérdésre más C-t kedvelő is válaszolhat, nem csak lanszelot.
-
its_grandpa
tag
válasz
lanszelot #20147 üzenetére
bool b_measure = false;
static bool measure_environment( float *temperature, float *humidity )
{Nem, mert ez így nem lokális változója a függvényednek.
Igy :static bool measure_environment( float *temperature, float *humidity )
{
bool b_measure = false;Gonosz kérdés, hány i változó van az alábbi kódrészletben ? :
int i = 5;
void teszt_elek() {
int i = 0;
for ( i = 10 ; i > 0 ; i-- )
{
..... ;
}
} -
its_grandpa
tag
Miért használod a LoRa library-t ?
Ez ugye nem valós LoRa hálózati kommunikáció mert LoRa.begin(433E6) de a LoRa 867 – 868MHz-es Magyarországon.
LoRa példa itt [link]
A packet összerakásakor kell még 2 sor szvsz.
LoRa.print("Relay state: ");
LoRa.print(r_state);
A vett üzenet parse-olásra meg találsz példát a link-ben. -
its_grandpa
tag
válasz
lanszelot #20112 üzenetére
Alakul ez és közben a többiektől minden kérdésedre megkaptad a választ.
Néztem a kódodat, csak egy apró észrevétel.
A measure_environment() fv.-ben két return van.
Structured programming says you should only have one return statement per function.
Legyen egy fv. lokális változód - ebben az esetben pl. bool b_measure - és a fv. végén csak egy return( b_measure );
Ha megszokod a több return-ozást előbb-utóbb olyan fv.-ket fogsz írni ami n+1 return-t tartalmaz, ami (szerintem) nem szerencsés. -
its_grandpa
tag
lanszelot
#20092
>> kiteszem functionból a 2 változót:
De nem ezt csinálod. A globális változók definiálásakor akarsz fv. végrehajtást.
Vedd fel őket 0 értékadással és akkor már meghívhatod a gáz fv.-knél.
Aryes is ezt írta a #20096-ban.>> nem tudom itt mit kell tennem
Pedig megírtam.
Képzeld el azt a szitut, hogy változtatnod kell a gázszenzor pin-eken.
Ha így hagyod - digitalRead(2) - akkor végig kell menni az egész kódon és átírni pl. digitalRead(5)-re.
Ahogy írtam - int Gas_pin = 2 - meg egyetlen helyen , int Gas_pin = 5.
De az is jó (sőt jobb) amit ekkold írt, #define Gas_pin 5.#20097
>>De ez is egy értékadás:
>>const int ledPin = 6;
>>Mi a kettő között a különbség?
A ledPin egy program globális konstans definició, értéke nem változhat, mindenki látja.
Próbáld meg mit mond a fordító ha futás során megpróbálod módosítani - ledPin=3;>> isgas = digitalRead(2);
Itt meg egy int típusú változó kap értéket egy int visszatérés értékü fv.-től.
Az isgas nem lehet const de lehet program globális vagy fv.-n belüli lokális változó.
Ha globális akkor a void homeroVanRajta() fv.-ben csinálhatsz ilyet - isgas = 12345; - de a mostani verziódban hibaüzenetet fogsz kapni.bagarol #20093
>>500 msecig pörög a loopban, majd mér,kiír, és újabb 500 msec helybenjárás.
Miért is ???
Azért mert van egy feltétel vizsgálat, attól még a loop ki tudja meddig fut.Aryes #20100
Álljunk le a C programozás tanfolyammal ? -
its_grandpa
tag
válasz
lanszelot #20084 üzenetére
OK, continuing education.
Első sorban tüntesd el a kódból azokat amiket én "magic number"-nek nevezek.
Nem írunk ilyeneket mert ha változik a környezet, nehéz a módosítás, nem fogod tudni szörcs end riplész-elni.
analogRead(A0) és digitalRead(2).Legyen két publikus változó:
int Gas_sensor = A0; /* analogRead(Gas_sensor); */
int Gas_pin = 2; /* digitalRead(Gas_pin) */A ..vanRajta fv.-kből a teljesen azonos display sorokat kirakod egy void disp_first() fv.-be. Jobban követhető lesz az eltérő adat(ok) kiírása.
display.clearDisplay(); /*this line to clear previous logo*/
display.setTextSize(1); /*text size 3*/
display.setCursor(3,0); /*ez tartja egy helyben a szöveget*/
display.setTextColor(WHITE); /*without this no display*/
display.print("Thermometer by Gabor");
display.setTextSize(2); /*text size 2*/
display.setCursor(10,20); /*ez tartja egy helyben a szöveget*/
display.setTextColor(WHITE); /* Ebből miért kell 3,4 a kódba ???? */>>sensorValue, isgas , ha ezeket kiteszem a function-ból a többi változóhoz ....
Ezt nehezen tudom elképzelni, látnom kéne a "hibás" kódot. -
its_grandpa
tag
Több lehetőséget is látok.
Amikor hónap elsején felírjuk a villany,gáz és vízóra állást, megbootoljuk az eszköztVagy ....
A loop-ban ellenőrizzük, hogy az aktuális millis() kisebb-e a last-nál, mert akkor átfordult.
if ( millis() < lastms ) /* de lehet lastms+n ,ahol az n tapasztalati érték, a loop futásidejétől függ */
{
lastms = millis();
} -
its_grandpa
tag
válasz
bagarol #20077 üzenetére
Kellemest neked is.
>> Megszakításba a lehető legkevesebb utasítást kell írni..
Ez volt az én interrupt kódomban, ennél kevesebb utasítást nem igazán tudok elképzelni.void gombotnyom(){
gombNyomas ++; /* növeljük 1-el a gombnyomások számát */
}
Aryes
>>Nem kell, illetve nem így, de már nem akartam bántani.
Ebből lesz a spagetti kód ?FYI, ha valakinek nincs meg.
A millis() ~ 50 naponként túlcsordul, ezzel a feltétel vizsgálattal gond lehet:if (millis() - lastms > 500)
-
its_grandpa
tag
Örömmel látom az általam indított elmevihart, tényleg.
Pár apró megjegyzés.Azért írtam interruptban a gombotnyom() fv.-t, hogy akkor is számoljon ha a program éppen valamelyik ...VanRajta fv.-t hajtja végre.
Nem gondolom, hogy a számolásnak a loop-ban van a helye.
+ Nem szívesen írok interruptban fv.-ben if-et ami az én dilim, tudom :)És igen, túlcsordulhat, tudtam előre de ilyen időzítéssel nem fogja átlépni a 32.767-et (lehetne unsigned int is).
Miért kell szerintetek két változó a nyomások számolására ??? byte gomb = 0; és volatile int gombNyomas = 0 ;
A switch (gombNyomas)-t ki lehet/kell egészíteni, hogy nullázza a nyomások számát:default:
gombNyomas = 0 ;
break;
#20071
>>gáz érzékelőnek miért kell hogy benne legyen a function-ba a 3 változója?
Nem értem a kérdést, ha érteném talán tudnék válaszolni.A debounce-ingról. Tudom, nem olcsó de ahol fontos, hogy ne legyen prell érdemes beáldozni kis pénzt egy HTTM Capacitive Touch Switch-re, Alin 400 HUF, van jópár ilyenem, szép és jól működik.
-
its_grandpa
tag
válasz
lanszelot #20051 üzenetére
pinMode(interruptPin, INPUT_PULLUP); /*inicializálja a gomb pin-t inputnak , default HIGH !!! */
A 2-es pint inputra használod és default HIGH a státusza.attachInterrupt(digitalPinToInterrupt(interruptPin), gombotnyom, LOW); /* meghívjuk az fv.-t ha LOW-ra húzod a pin-t */
A gombotnyom függvényt meghívjuk, ha a 2-es pin LOW lesz.A #20050-ben írt kódod nem tűnik 100-asnak még, a megnyomva()-ban az
else if (gombNyomas == 3) {
gombNyomas = 1;
}
A loop-ban emiatt a
mindenRajtaVan()
szerintem minden periódusban le fog futni. -
its_grandpa
tag
válasz
lanszelot #20000 üzenetére
Előrebocsájtom, hogy nem ismerem ezt a Digispark lapot, úgy ötletelek.
A gombnyomások számát a loop-ban figyeljük 10 sec-enként.A gombnyomás(ok) számolásához kell egy interrupt fv. a pin, meg egy változó.
const byte interruptPin = 2;
volatile int gombNyomas = 0 ; /*valtozo a gomb nyomas szamlalasara*/
void gombotnyom(){
gombNyomas ++; /* növeljük 1-el a gombnyomások számát */
}
A setup: (zanzásítva)
void setup() {
Serial.begin(9600); /*elindítja a sorosportot ...*/
pinMode(interruptPin, INPUT_PULLUP); /*inicializálja a gomb pin-t inputnak , default HIGH !!! */
attachInterrupt(digitalPinToInterrupt(interruptPin), gombotnyom, LOW); /* meghívjuk az fv.-t ha LOW-ra húzod a pin-t */
/* ami még a setupba kell */
} /* setup_end */
És most jöjjön a loop.
void loop() {
if (millis() - lastms > 10000) /* eltelt 10 sec ? */
{
lastms = millis();
if gombNyomas > 0 /* volt valamennyi gombnyomás */
{
megnyomva();
gombNyomas = 0 ; /* nullázzuk a nyomások számát
}
} /* gombnyomások számának olvasás időzítése */
Serial.println(gombNyomas); /* kiírjuk hány gombnyomásnál tartasz */
} /* loop_end */
Jöjjön a megnyomva fv.void megnyomva() {
switch (gombNyomas) {
case 1:
mindenRajtaVan();
break;
case 2:
homeroVanRajta();
break;
case 3:
gazVanRajta();
break;
}
} /* megnyomva_end */
Most látom írtál közben.
A kódomban az interrupt pin a 2-es, neked ott a gázérzékelő van, szóval valamit módosítani kell. Én az arduinóból indultam ki, ott az Uno, Nano, Mini, other 328-based lapokon csak a 2,3 pin használható interruptra. -
its_grandpa
tag
válasz
KoVee84 #19967 üzenetére
Bocs de ez így egy ~ 130 soros borzalom.
A case ágak 0-3 ig ugyanazok, csak a név kiírása miatt van benne "magic number" azaz a texts[n].
Ez kb. a fele, 65 sor és remélem ugyanazt csinálja.int vref = 1100;
const char* persons[] = {"Kovács","Könözsi","Csepura","Németh"};
const uint64_t egy_nap = 86400000000;
RTC_DATA_ATTR unsigned int reboot_counter = 0;
void setup()
{
Serial.begin(115200);
delay(10);
epd_init();
delay(10);
// Correct the ADC reference voltage
esp_adc_cal_characteristics_t adc_chars;
}
void loop()
{
int persons_no = reboot_counter; // csak a szépség kedvéért
if reboot_counter < 4:
{
epd_poweron();
epd_clear();
delay(10);
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (persons[ persons_no]), &cursor_x, &cursor_y, NULL);
reboot_counter++;
epd_poweroff_all();
esp_sleep_enable_timer_wakeup(egy_nap * 7);
esp_deep_sleep_start();
}
else if reboot_counter = 4:
{
epd_poweron();
delay(10);
int cursor_x = 550;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, ("SZELEKTÍV KUKA"), &cursor_x, &cursor_y, NULL);
reboot_counter++;
epd_poweroff_all();
esp_sleep_enable_timer_wakeup(egy_nap * 6);
esp_deep_sleep_start();
}
else
{
esp_restart();
}
} /* loop */
A switch ágak végére meg illenék a break csak a megszokás miatt.
(ez a notepad++ ból történő másolás, kódformázás nem lett az igazi, bocs)
Új hozzászólás Aktív témák
Hirdetés
- Házimozi belépő szinten
- Óvodások homokozója
- Formula-1
- Milyen monitort vegyek?
- A fociról könnyedén, egy baráti társaságban
- BestBuy topik
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- ASZTALI GÉP / ALKATRÉSZ beárazás
- Hónap végén érkezik a Xiaomi Band 10, ára is van
- Vezetékes FEJhallgatók
- További aktív témák...
- AMD Ryzen 7 7700X - Új, 1 év garancia - Eladó!
- Apple Watch ultra 2 49mm Natur Titanium, Új, 1 év Apple garanciával
- Gamer PC - R5 5600, RTX 3060 és 16gb RAM + GARANCIA
- HP Zbook 14 laptop (14FHD/I7-G5/8GB/128SSD/MagyarVilágítós)
- Jó áron ÁRON ELADÓ! Üzleti HP Elitebook 1040 G9 Laptop! / i5-1245U 16GB 256GB
- AKCIÓ! Gigabyte B650M R7 7700X 32GB DDR5 1TB SSD RTX 3080Ti 12GB Cooler Master H500P WHITE 750W
- DOKKOLÓ BAZÁR! Lenovo, HP, DELL és egyéb más dokkolók (TELJES SZETTEK)
- Samsung Galaxy A32 4G 128GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy Z Fold5 / 512 GB / 12 GB RAM / 1év Garanciával / Gyári Független
- Apple iPhone 12 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest