Hirdetés
- GoodSpeed: Ágymatrac keresési kálvária
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- gban: Ingyen kellene, de tegnapra
- sziku69: Szólánc.
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sh4d0w: Kalózkodás. Kalózkodás?
- btz: Internet fejlesztés országosan!
- Pajac: száz pí
- Real Racing 3 - Freemium csoda
-
LOGOUT
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
-
olli
tag
Boot folyamatosan nyomva, reset egyszer, boot felengedve a futó kijelzés leáll.
Továbbra is hiba a feltöltésnél.
A fatal error occurred: Failed to connect to ESP32: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
Failed uploading: uploading error: exit status 2 -
olli
tag
FTDI232-vel com4 porton egyenlőre sikertelen a feltöltés.
Lehet helytelenül választottam lapot, vagy a feltöltéshez kell gombokat nyomogatni, vagy egyéb.
Ami még zavar:
Sketch uses 702225 bytes (53%) of program storage space. Maximum is 1310720 bytes.
Global variables use 42660 bytes (13%) of dynamic memory, leaving 285020 bytes for local variables. Maximum is 327680 bytes.
Mintha nem stimmelne terület mérete. -
olli
tag
-
-
MrChris
nagyúr
Zongorában a kalapácsfejeknek egymáshoz képest teljesen párhuzamosan kell mozogniuk. Ha 2-t egy vonalzóval felemelek azok hibás esetben vagy össze, vagy széttartanak, ezt lehet korrigálni. Az eltérés amúgy nagyon kicsi, azt viszont a szem észreveszi, hogy valami nem stimmel. Amikor már precízkedés megy jó lenne valami segítség.
A terv az lenne, hogy az egyik kalapácsra egy érzékelőt tennék, mellette lévőre pedig valami felületet. Mikor ezeket felemelem akkor valamilyen mértékben távolodnak-közelednek egymáshoz és arról szolgáltatna valamilyen értéket. Ha korrigáltam áttenném a következőre.
Ilyesmi érzékelőt gondoltam. Egy barkácsoló talán ehhez hasonlót használ zongorakalapács gyorsulás mérésre. -
Wolfram
aktív tag
-
Micsurin
nagyúr
CH340 5V-os lába volt rajta amint átraktam egy R3-ra azonnal észhez tért. Előbbin magát a polyfuse-t se véltem felfedezni!

Innentől csak egy tetsző szűrő kell meg finom hangolni a python kódot. Csak már élek a gyanúperrel mert a Pycharm messze a legfapadosabb környezet amivel dolgom volt. Szakirány szerint Beágy/IoT de melóban meg Dotnet, hobbinak meg szintén C#.

-
olli
tag
Lelkes amatőrként törekednem kell a megfelelő befektetés/haszon arányra.
Van egy hardwer gyártó, saját programozó platformmal, megtanulod, jön egy másik, meg újabbak. Standardok, szabványok, á minek.
Ezért kérdeztem a LoRa32u4 kapcsán más platformra.
Arduino alatt is sikerült a két esp közötti csomagküldésben a vezérlés megvalósítása, és ez volt a lényeg. -
Micsurin
nagyúr
Konkrétan ráraktam a példa kódot mert akartam látni, hogy működik mert a sajátom katasztróf
de egy ~5-30-en belül leáll a feldolgozás csak a board reset vagy a kód redeployra indul el ismét egy rövid időre, tippre a FIFO túlcsordul mert a megszakítást is próbáltam kikapni a kódból de nem változtatott semmit 
-
-
Janos250
őstag
Köszi, azt hiszem, valami ilyesmi lesz. Ilyen DC/DC-m van pár, de nem is kell a 3 potis, elég az 1 potis is, mert pl. áramkorlát nem kell.
Vagy tényleg 3 potis, és akkor az "indokolatnul nagy kondi", egy Li akku lesz, ami állandóan rajta lesz a töltőn, és az áram lekapcsolásakor is működik egy darabig.
Egyébként egy riasztó része lesz.
A mai "olcsó" kínai kamerák zöme is tudja az emberi alak felismerést, valamint nem csak mailre, hanem riasztó szerverre is tud küldeni egy karaktersorozatot TCP-n.
Ez a szerver egy ESP32 + SIM800 lesz, ami megcsörgeti a zsebemben lévő (buta) telefont, amivel telefonálni szoktam. Nem veszem fel, mert akkor ingyenes.
Erre előveszem a táskából az okostelefont, bekapcsolom, és megnézem neten a kamerát, hogy a sok gyerek közül melyik az, amelyik megint le akarja verni kalapáccsal a vasszekrényről a lakatot. -
olli
tag
-
#68216320
törölt tag
Mert nem akarok egy komplett pc-t azert tartani, hogy mondjuk a netrol leszedett anyagot usb-n atvigyem arra, majd azon kiirjam lemezre, amit atviszek az adott gepemre. Majd ugyanez visszafele, ha a retro gepemen elkeszitett cuccot akarom mondjuk elkuldeni valakinek. Erre piszkosul felesleges tartani egy kulon gepet monitorral, billentyuzettel, miegyebbel.
Amikor meg nem kell akkor kerulgethetem. Minek???A linkelt cuccokkal ugyanaz van, mint az összes többi project-el.
Nem jelenik meg az OS-en közvetlen hardverként.
De, hogy érthető legyen:
Az USB portra dugva nem jelenik meg az A: meghajtó a fájlkezelőben és nem tudok hagyományos módon írni/olvasni/formátni vele 1.44/720 formátumban. -
#68216320
törölt tag
A probléma az, hogy bár több márkanév alatt érhetőek el jelenleg usb-s floppy drive-ok, de a belseje mindegyiknek ugyanaz.
A jelenlegi problémát maga a belsejében használt Teac fdd jelenti.
Az a tapasztalatom, hogy annyira vacakul állítják be őket, hogy sok közülük a mások által írt lemezeket talán-talán beolvassa (bár a fejmozgást figyelve küzd velük), de amikor írni kell annyira elcsúszottak a szektorok, hogy a többi drive képtelen beolvasni.
Sanszos, hogy egyreszt a két fej sincs teljesen egyvonalban, másrészt megfigyeltem, hogy a léptetőmotor sincs jól beállítva.
Mivel csak usb-n érhető el, gyakorlatilag semmi korrigációt nem lehet rajtuk eszközölni, mert a kalibrációs programok nem kapnak ilyen jellegű adatokat.
A lényeg, hogy ezért csinálnám azt, hogy desktop gépekhez használatos floppy drive-okat használnék usb-re kötve.
Ezek filléres tételek, ha valamelyik problémás akkor kuka és mehet a kábelra egy másik.Egyszerű megoldásnak tűnik erre valami MCU.
-
lanszelot
addikt
Igen, félre értettél.
Sehol se írtam hogy át írom a pinMode -ot.
Csak a pineket írom át.
Hiszen Megán nem ott van ahol Digispark-on.its_grandpa
Mi az az ISR?
Én azt a kódot a fent linkelt példából vettem.
De majd ha haza érek kipróbálom amit írtál
Itt a 0 az nem a pin-t adja meg, ez egy rövidítés, az első interrupt pin-t jelenti mindegy melyik chippen. Általában az a 2-es pin.
attachInterrupt(0, teker, CHANGE); -
lanszelot
addikt
Nem értem.
Szerintem félre értettél.
Mind a kettőre ugyanazt töltöm fell.
Csak a pint írom át.
Tehát nincs különbség.Janos250:
Huhh, az nekem még nagyon bonyolult.
Néztem az oldalt is ami alapján van, de valahogy nem áll össze a fejemben. Nagyon sok benne ami után nézek, és bele kavarodok.
De köszönöm szépen, még agyalok rajta, legalább tanulok
-
lanszelot
addikt
Fix tekerések vannak. Nem lehet félúton megállítani.
1 teljes kör 20 tekerés.
Nem tudom mi a lépés. Gondolom ha nem fix.
Tehát tekerés.
1/20 ot fordítok, azaz egy tekerést, az idő korlát nélkül akkor 10 vagy többnek számolja. Nem tudom mennyi, mert nincs serial monitor digispark-on.
Ha nem találok megoldást, elvileg hét végére megjön a nano amit rendeltem és azzal megnézem mennyi egy tekerés. Azon van serial monitor, de kijelzőt is tudok rárakni. És kiiratom épp mennyit számol.Még mindig úgy gondolom az "if" feltétele nem jó.
Honnan tudom hogy melyik irányba tekerem, erre kell rájönnöm.
Kijavítom az "if" feltételt és akkor a másik irányba is tudom tekerni. -
lanszelot
addikt
Sajnos nem oldotta meg.
module: elegoo rotary encoder
hátha ez segít.jelenlegi kódom így néz ki :
/*LED input*/
#define led 0
/*rotary encoder input*/
#define inputCLK 2
#define inputDT 1
int currentStateCLK;
int previousStateCLK;
int keses = 1000;
uint32_t lastms= 0;
void teker(){
if (millis() - lastms > 1000)
{
lastms = millis();
if(digitalRead(inputDT) == currentStateCLK){
keses = keses+100;
}else{
if(keses > 100){
keses = keses-100;
}
}
/*update */
previousStateCLK = currentStateCLK;
}
}
void setup() {
/*inicializálja a Rotary Encoder CLK pin-t inputnak , default HIGH !!! */
pinMode(inputCLK, INPUT_PULLUP);
/*rotary encoder pins input*/
pinMode (inputDT, INPUT_PULLUP);
/*LED pin output*/
pinMode (led, OUTPUT);
/*read initial state of inputCLK*/
previousStateCLK = digitalRead(inputCLK);
/* meghívjuk az fv.-t ha LOW-ra húzod a pin-t */
attachInterrupt(0, teker, CHANGE);
}
void loop() {
/*read current state of inputCLK*/
currentStateCLK = digitalRead(inputCLK);
/*red led on off*/
digitalWrite(led, HIGH);
delay(keses);
digitalWrite(led, LOW);
delay(keses);
}razorbenke92:
nem +-1 extrát ugrik, hanem minimum 10-et.
lehet, hogy többet is, csak azt nem tudom ellenőrizni.
1000 az érték, és 100 -asával csökken, 1 tekerés 100-ra viszi le azonnal.
100 alá nem tud menni.
Serial monitor nem működik digispark-al, így nem tudom ellenőrizni mennyit ugrik 1 tekerésre.Janos250:
Nálam azért nem jó, mert ha 1000 -ről 500-ra akarom levinni, 100 -al csökkentve, akkor 5 ször ugyanaz a csatorna kell változzon. -
Janos250
őstag
Én már nagyon rég használtam rotary encodert, de én úgy emlékszem, hogy a pergést nem idővel, meg ilyesmivel küszöböltük ki, hanem a változást csak akkor szabad változásnak tekinteni, ha nem ugyanaz a csatorna változik, hanem a másik. Ez kiküszöböli a pergést.
Vagy valamit nagyon rosszul értelmezek? -
lanszelot
addikt
Oh, azt hittem az attachInterrupt más

pin-ek:
digispark gnd : RotEnc gnd
digispark 5V : RotEnc+
digispark pin2 : RotEnc CLK
digispark pin1 : RotEnc DT
digispark 5V : R1
digispark gnd : R2
pirosLED rövid láb : R1
kékLED rövid láb : R2
pirosLED hosszú láb : digispark pin0
kékLED hosszú láb : digispark pin0már úgy ahogy működik, de egy irányba állítja csak a sebességet:
/*LED input*/
#define led 0
/*rotary encoder input*/
#define inputCLK 2
#define inputDT 1
int currentStateCLK;
int previousStateCLK;
int keses = 1000;
uint32_t lastms= 0;
void teker(){
if (millis() - lastms > 1000)
{
lastms = millis();
if(digitalRead(inputDT) == currentStateCLK){
keses = keses+100;
}else{
if(keses > 100){
keses = keses-100;
}
}
}
}
void setup() {
/*inicializálja a Rotary Encoder CLK pin-t inputnak , default HIGH !!! */
pinMode(inputCLK, INPUT_PULLUP);
/*rotary encoder pins input*/
pinMode (inputDT, INPUT);
/*LED pin output*/
pinMode (led, OUTPUT);
/*read initial state of inputCLK*/
previousStateCLK = digitalRead(inputCLK);
/* meghívjuk az fv.-t ha LOW-ra húzod a pin-t */
attachInterrupt(0, teker, CHANGE);
}
void loop() {
/*read current state of inputCLK*/
currentStateCLK = digitalRead(inputCLK);
/*red led on off*/
digitalWrite(led, HIGH);
delay(keses);
digitalWrite(led, LOW);
delay(keses);
/*update */
previousStateCLK = currentStateCLK;
} -
lanszelot
addikt
Először is nagyon szépen köszönöm a segítséget mindenkinek.
Azért nem.valaszoltam még, mert nekem még sok időbe telik programozni.
Utána kell olvasgatnom, megértem, próbálgatom .
Mind a 2 megoldást szeretném megcsinálni, csak az interupt -ot nem értem, és keresgetek hátha találok valami kódot, és nem nyers leírást. A kódból könnyebben megértem.A millis() -t már csináltam, ezért a nehezebbel kezdtem.
Még sehol se tartok, csak próbálom megérteni.
Mindenképpen jelzem, hogy sikerült e. -
olli
tag
avrdude.exe: reading input file "0x00"
avrdude.exe: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude.exe: 1 bytes of lfuse written
avrdude.exe: verifying lfuse memory against 0x00:
Reading | ################################################## | 100% 0.02s
Na ezt a részt nem értem.
Bepipáltam az írást, csak 0x00 beállítással fut le.
Nem írható felül, milyen filet kellene írni? -
-
lanszelot
addikt
Most jöttem rá, hogy fogalmam sincs hogyan kell digispark bootloader-t felrakni.
Amit vettem azon alapból volt.
Így nem tudom hogy csináljam az Attiny85 bootloader-t.
Emiatt fiók méllyére raknám a programmer board-ot, és maradnék az arduino feltöltéssel.
De az miért nem működik?Ha tudok bootloader-t hiba nélkúl rárakni, miért nem tudok programot rátölteni?
Miért dob hibát? -
-
lanszelot
addikt
A link véletlen lemaradt.
De ha ugyanezzel bootloadert rakok fel, akkor viszont semmi gond.
Minden uyanaz, csak a kondenzátort rakom a rst gnd -re.itt a bootloader lefutása:
"
C:\Users\robag\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\robag\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -v -v -v -pattiny85 -cstk500v1 -PCOM3 -b19200avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg WunschSystem wide configuration file is "C:\Users\robag\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"
Using Port : COM3
Using Programmer : stk500v1
Overriding Baud Rate : 19200
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
AVR Part : ATtiny85
Chip Erase delay : 400000 us
PAGEL : P00
BS2 : P00
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 12 4 0 no 512 4 0 4000 4500 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
flash 65 6 32 0 yes 8192 64 128 30000 30000 0xff 0xff
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
avrdude: Send: A [41] . [80] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [02]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [81] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [01]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [82] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [12]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [98] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
avrdude: Send: A [41] . [84] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [85] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [86] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [87] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [89] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [00]
avrdude: Recv: . [10]
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 usavrdude: Send: A [41] . [81] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [01]
avrdude: Recv: . [10]
avrdude: Send: A [41] . [82] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [12]
avrdude: Recv: . [10]
avrdude: Send: B [42] . [14] . [00] . [00] . [01] . [01] . [01] . [01] . [03] . [ff] . [ff] . [ff] . [ff] . [00] @ [40] . [02] . [00] . [00] . [00] [20] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: PAGEL and BS2 signals not defined in the configuration file for part ATtiny85, using dummy values
avrdude: Send: E [45] . [05] . [04] . [d7] . [a0] . [01] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: Send: P [50] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude: AVR device initialized and ready to accept instructionsReading | avrdude: Send: V [56] 0 [30] . [00] . [00] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [1e]
avrdude: Recv: . [10]
avrdude: Send: V [56] 0 [30] . [00] . [01] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [93]
avrdude: Recv: . [10]
################avrdude: Send: V [56] 0 [30] . [00] . [02] . [00] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [0b]
avrdude: Recv: . [10]
################################## | 100% 0.02savrdude: Device signature = 0x1e930b (probably t85)
avrdude: Send: Q [51] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]avrdude done. Thank you.
" -
#68216320
törölt tag
Nem rossz ötlet. Négy darab kijelző van, ha nagyon leredukálom, hogy mondjuk a másodperc nem kell, akkor bele is férhet.

Viszont valahogy nem olyan szépek és nekem nem is egyformák a megjelenített pixelek a különböző nokia kijelzőkön. Próbáltam a kontrasztot állítani, de max azt értem el, hogy amelyik pixeleknek nem kell látszódnia az is megjelent.
Szóval elméletben nem rossz ötlet (bár az stm32 ha jól tudom 3 spi kimenettel rendelkezik) valahogy nem lenne tökéletes.Lehet teszek egy próbát az e-paper kijelzővel. Még úgysem dolgoztam olyannal.
-
#68216320
törölt tag
Ugye itt a fogyasztás lefaragása nem a villanyszámla miatt érdekes, hanem amiatt, hogy akkuról tudjam üzemeltetni.
A kijelzőméret amiatt érdekes, hogy egy asztalra, polcra letéve könnyen leolvasható legyen, amikor az ember elhalad előtte.
Emiatt sajnos a nokia kijelző nem jó (pedig van pár darab), mert kicsi.
Oled kijelzőből láttam 2.42" méretet, ami még mindig nem túl nagy sajnos, de legalább piszok drága.
Szóval emiatt van dilemma, hogy mi lehetne megfelelő. Az e-paper kijelző egyelőre vonzó alternatívának tűnik, bár nagyobb méretben szintén nem olcsó, de legalább a fogyasztása minimális.
Ez a "szimpatikus" dolog úgy látom magas labda volt
Viccként gondoltam azt a mondatot. Lehet egy smile kellett volna. -
olli
tag
```cpp
#define boiler 23 // villanyra kapcsol,rel1
#define gaz_kazan 17 // gázra kapcsol,rel2
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 13
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress D0 = { 0x28, 0x31, 0xBF, 0x29, 0x07, 0x00, 0x00, 0x7D }; // "T1"
DeviceAddress D1 = { 0x28, 0x4F, 0x8E, 0x2A, 0x07, 0x00, 0x00, 0x37 }; // "T2"
#include <Wire.h>
const char* ssid = "";
const char* password = "";
const char* ntpServer = "hu.pool.ntp.org";
const long gmtOffset_sec = 0;
const int daylightOffset_sec = 3600;
#define RTC_ADDRESS 0x68
#include <RtcDS3231.h>
RtcDS3231<TwoWire> Rtc(Wire);
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val){
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val){
return( (val/16*10) + (val%16) );
}
#include <Arduino.h>
#include "Wire.h"
#include "oled.h"
#include <WiFi.h>
#include "time.h"
#include <LoRa.h>
#define SCK 5 // GPIO5 -- SX1278's SCK
#define MISO 19 // GPIO19 -- SX1278's MISO
#define MOSI 27 // GPIO27 -- SX1278's MOSI
#define SS 18 // GPIO18 -- SX1278's CS
#define RST 14 // GPIO14 -- SX1278's RESET
#define DI0 26 // GPIO26 -- SX1278's IRQ(Interrupt Request)
#define BAND 433E6
unsigned int counter = 0;
String rssi = "RSSI --";
String packSize = "--";
String packet ;
struct tm timeinfo;
static char msg[20]; // character buffer
OLED display = OLED(4, 15, 16, 0x3C, 128, 32, true); // SSD1306
void szelep_vez ()
//T1+T2 >75 II T1>50= a boilerben van melegvíz
//rel2/pin17 villanyra kapcsol
//T1+T2<75 II T1<50= gáz melegíti a vizet
//rel1/pin23 gázra kapcsol
{
sensors.requestTemperatures();
float T1 = sensors.getTempC(D0);
float T2 = sensors.getTempC(D1);
if((T1+T2) > 75 || T1>49)
{
display.begin();
display.clear();
display.draw_string(4, 8, "BOILER", OLED::DOUBLE_SIZE);
display.display();
digitalWrite(boiler, HIGH);
digitalWrite(gaz_kazan, LOW);
delay(5000);
}
else
{
display.begin();
display.clear();
display.draw_string(4, 8, "GAZ_KAZAN", OLED::DOUBLE_SIZE);
display.display();
digitalWrite(gaz_kazan, HIGH);
digitalWrite(boiler, LOW);
delay(5000);
}
}
void setup(){
pinMode(boiler, OUTPUT); //villanyra kapcsol
digitalWrite(boiler, LOW);
pinMode(gaz_kazan, OUTPUT); //gázra kapcsol
digitalWrite(gaz_kazan, LOW);
pinMode(16,OUTPUT);
pinMode(25,OUTPUT);
digitalWrite(16, LOW); // set GPIO16 low to reset OLED
delay(50);
digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high
Serial.begin(115200);
while (!Serial);
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.setPins(SS,RST,DI0);
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("init ok");
Wire.begin();
Serial.setDebugOutput(true);
//setTime(&timeinfo); // Valamikor be kell állítani az órát...
Serial.print("Connecting to ");
Serial.print(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
// Init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
Serial.println();
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
//disconnect WiFi as it's no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
display.begin();
display.clear();
display.draw_string(4, 8, "RTC clock", OLED::DOUBLE_SIZE);
display.display();
//------- Initialize the Temperature measurement library--------------
sensors.begin();
sensors.setResolution(D0, 10); //T1
sensors.setResolution(D1, 10); //T2
// set the initial time here:
//DS3231 seconds, minutes, hours, day, date, month, year
//setDS3231time(00,34,12,2,6,3,23);
}
void loop(){
sensors.requestTemperatures();
float T1 = sensors.getTempC(D0);
float T2 = sensors.getTempC(D1);
Serial.print("Sending packet: ");
Serial.println(counter);
// send packet
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print( T1);
LoRa.print( T2 );
LoRa.print(counter);
LoRa.endPacket();
counter++;
digitalWrite(25, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(25, LOW); // turn the LED off by making the voltage LOW
delay(1000);
getLocalTime(&timeinfo); // display time/date
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
RtcTemperature temp = Rtc.GetTemperature();
temp.Print(Serial);
// you may also get the temperature as a float and print it
// Serial.print(temp.AsFloatDegC());
Serial.println(" C ");
display.clear();
strftime (msg, 15, "%Y-%b-%d %a ", &timeinfo);
display.draw_string(16, 1, msg); // Display date
strftime (msg, 10, "%T ", &timeinfo); // Display time
display.draw_string(8, 12, msg, OLED::DOUBLE_SIZE);
display.display(); // Refresh screen
delay(3000);
display.clear();
display.setCursor(8,0);
display.println("T1= ");
display.setCursor(30,0);
display.println(T1);
display.setCursor(60, 0);
display.println(" C");
display.setCursor(8,12);
display.println("T2= ");
display.setCursor(30,12);
display.println(T2);
display.setCursor(60, 12);
display.println(" C");
display.display();
Serial.print(sensors.getTempC(D0));
Serial.println(" C");
Serial.print(sensors.getTempC(D1));
Serial.println(" C ");
//printLocalTime(); // display the real-time clock data on the Serial Monitor,
delay(1000); // every second
szelep_vez();
}
//--- Set RTC time/date ------------------------------------
void setLocalTime(struct tm* time) {
struct tm timeinfo;
Wire.beginTransmission(RTC_ADDRESS);
Wire.write(0); // set register pointer to 00h
Wire.write(decToBcd(time->tm_sec)); // set seconds
Wire.write(decToBcd(time->tm_min)); // set minutes
Wire.write(decToBcd(time->tm_hour)); // set hours
Wire.write(time->tm_wday + 1); // set day of week (1=Sun, 7=Sat)
Wire.write(decToBcd(time->tm_mday)); // set date (1 to 31)
Wire.write(decToBcd(time->tm_mon) + 1); // set month
Wire.write(decToBcd(time->tm_year - 100)); // year from 2000 (0 to 99)
Wire.endTransmission();
}
//--- Read time/date from RTC ------------------------------
void getTime(struct tm* time) {
Wire.beginTransmission(RTC_ADDRESS);
Wire.write(0); // a kiolvasás kezdőcímének beállítása
Wire.endTransmission(false);
Wire.requestFrom(RTC_ADDRESS, 7); // Hét bájt kiolvasása (time/date)
time->tm_sec = bcdToDec(Wire.read() & 0x7f); // Másodpercek (0-59)
time->tm_min = bcdToDec(Wire.read()); // Percek (0 - 59)
time->tm_hour = bcdToDec(Wire.read() & 0x3f); // Órák (24h kijelzéshez)
time->tm_wday = bcdToDec(Wire.read() - 1); // Hét napja (0 - 6)
time->tm_mday = bcdToDec(Wire.read()); // hónap napja (1 - 31)
time->tm_mon = bcdToDec(Wire.read() - 1); // hónap sorszáma (0 - 11)
time->tm_year = bcdToDec(Wire.read()) + 100; // 1900-tól eltelt évek
}
void printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
Serial.print("Day of week: ");
Serial.println(&timeinfo, "%A");
Serial.print("Month: ");
Serial.println(&timeinfo, "%B");
Serial.print("Day of Month: ");
Serial.println(&timeinfo, "%d");
Serial.print("Year: ");
Serial.println(&timeinfo, "%Y");
Serial.print("Hour: ");
Serial.println(&timeinfo, "%H");
Serial.print("Hour (12 hour format): ");
Serial.println(&timeinfo, "%I");
Serial.print("Minute: ");
Serial.println(&timeinfo, "%M");
Serial.print("Second: ");
Serial.println(&timeinfo, "%S");
Serial.println("Time variables");
char timeHour[3];
strftime(timeHour,3, "%H", &timeinfo);
Serial.println(timeHour);
char timeWeekDay[10];
strftime(timeWeekDay,10, "%A", &timeinfo);
Serial.println(timeWeekDay);
Serial.println();
}
/*void setup_sntp() {
const char* ntpServer = "hu.pool.ntp.org"; // regionális NTP hálózat
const char* time_zone = "CET-1CEST,M3.5.0,M10.5.0/3"; // Europe/Budapest időzóna
configTzTime(time_zone, ntpServer); // Időzóna megadása
Serial.println("Connecting to sntp server");
while (!getLocalTime(&timeinfo)) {Serial.print(".");} // Pontosidő lekérése
setTime(&timeinfo); // A DS3231 RTC beállítása
Serial.println(" NTP connected");
Serial.println(&timeinfo, "NTP time: %A, %B %d %Y %H:%M:%S");
}*/
``` -
olli
tag
sensors.requestTemperatures();
float T1 = sensors.getTempC(D0);
float T2 = sensors.getTempC(D1);
Serial.print("Sending packet: ");
Serial.println(counter);
// send packet
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print( T1);
LoRa.print( T2 );
LoRa.print(counter);
LoRa.endPacket();
A küldő LoRa packet összeállítása jelenleg.
Még nem világos, így mitől =0 az állapot?
Továbbra is küldeném a fenti adatokat + a relé kapcsolását.
Egyszerre, vagy külön mehet? -
-
lanszelot
addikt
Nem értem, azért kérdezem.
Mivel nem értem nem tudom mit kérdeztek ti.
De ez is egy értékadás:
const int ledPin = 6;Mi a kettő között a különbség?
Ton-ton:
tehát amit a modul mellé letöltök a Library -ból az csak egy program kód részlet
Ezek szerint én is meg tudok írni egy modulhoz egy ilyet a modulhoz?
Mert amiket néztem, azok pár soros program részek a *.h -ban.
Illetve van még ott más kiterjesztés is.Azért kérdem, mert van egy másik hőmérséglet érzékelőm, és ott a példában csak celziusz van, nincs farentheit. Tudom, írjak egy átváltást,és kész, de ha tudja akkor minek. Viszont hogy tudom meg miket tud. Mármint milyen alap parancsok, vagy mik vannak benne, aminek ne íjak extra sorokat.
Remélem érthető amit szerettem volna kérdezni. -
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özt
Vagy ....
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();
} -
ekkold
Topikgazda
Pergésmentesítésre sokféle megoldás van.
- Hardveres megoldás: külső felhúzó ellenállás a gombon, majd RC szűrő
- Megszakításból: állapotváltásra le kell tiltani a további megszakítást kb. 1...2msec-re, amíg a prellezés lezajlik.
- 0.1...1ms-os timer megszakításból: azt kell figyelni, hogy a gomb állapota néhány megszakításon át változatlan-e, ha igen akkor van vége a prellezésnek, és felhasználható az új állapot.
- loop()-ban: az állapotváltás időpontját menteni kell (millis() vagy micros() függvény), ha az utolsó változás óta eltelt több mint 1...2msec, akkor már nem prelleg, felhasználható az aktuális állapot.Én a legutóbbit haszánlom leggyakrabban, mert ehhez nem kell megszakítás, és ha a loop() nem katasztrofálisan lassú akkor stabil és jó megoldás. (még enkóder is kezelhető így, gyakorlatilag hibamentesen). Arra pedig mindíg érdemes törekedni, hogy a loop a lehető leggyorsabb legyen, (azaz pl. amennyire csak lehet kerüljük a delay()-t, és az egyéb lassú függvényeket).
-
bagarol
tag
byte gomb = 0;
void gombotnyom(){
gomb++; /* növeljük 1-el a gombnyomások számát */
}void loop() {
if (millis() - lastms > 500)
{
lastms = millis();
if (gomb) /* volt valamennyi gombnyomás */
{
gomb = 0;
gombNyomas++;
gombNyomas = gombNyomas%3 ;
Serial.println(gombNyomas); /* kiírjuk hány gombnyomásnál tartasz */
}
megnyomva();
}
} -
lanszelot
addikt
Huh, ez nekem magas. Nagyon kezdő vagyok még ehhez.
Az ellenállás nélkül, de úgy raktam be.
Tegnap azt írta vki vegyem ki az ellenállást, és 1-10 nano -s kondenzátort rakjak be. Azért úgy csináltam.Amit írtál azt nem értem. A kalkulátort se tudom hogy használjam.
Az addig ok, hogy berakok egy kondenzátort .
Ezt a debounce-t egyáltalán nem értem.80ms kevés a hőmérőnek. Minimum 270ms kell.
Nem tudom hol allitom az interrupt idejét. -
lanszelot
addikt
-
lanszelot
addikt
Új hozzászólás Aktív témák
- iPhone 15 PRO MAX 256GB natúr titán gyonyörű! KÁRTYAFÜGGETLEN! Akkumlátor 89%! Fulldoboz!
- -ÚJ,2 ÉV GAR- GAMER PC: RYZEN 5 4500-5600X +RX 6600/6700XT +16-64GB DDR4! SZÁMLA! 70 féle ház!
- MacBook Pro 14 (2021) M1 Pro / 16 GB RAM / 512 GB SSD Új topcase, 100% akku
- Yamaha R-N402D sztereó erősítő
- HP ProBook 450 G7, 15,6" FHD IPS, I5-10210U, 8GB DDR4, 256GB SSD, W11, Számla, 1 év garancia ( olvas
- GYÖNYÖRŰ iPhone 13 mini 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3447, 94% Akkumulátor
- ÚJ HP ProBook 445 G11 - 14" WUXGA - Ryzen 5 7535U - 16GB - 256GB - MAGYAR - 2+ év garancia
- DELL Thunderbolt TB16 Dock (ELKELT)
- Apple iPhone X Space Gray Ikonikus dizájn, Face ID, OLED kijelző 64 GB Használt, megkímélt ,100%
- Gombászkönyvek egyben
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Jó dolog, de azért na...
: https://www.aliexpress.com/item/1005005449219195.html




ekkold
