- Xiaomi 14 - párátlanul jó lehetne
- Samsung Galaxy A54 - türelemjáték
- iPhone topik
- Ezekben a változatokban lesz elérhető a OnePlus 13 Kínán kívül
- Eufy X10 Omni - lát, de nem néz
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Samsung Galaxy S23 Ultra - non plus ultra
- Kína vezeti az okosórapiacot, a Huawei az első helyen
- Motorola Razr 50 Ultra - ajtó, ablak
- Ekkor és itt mutatkozik be a Galaxy S25
-
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
-
Janos250
őstag
válasz Wolfram #20199 üzenetére
"Hogy lehet ESP32-n nanosecond-ot /system_get_time()/ dátummá alakítani? "
Az biz' macerás lesz!
1. a 80 Mhz-es perifériális órajelet számlálja (ha az, amire én gondolok)
2. időnként túlcsordul -> átfordul
3. tudni kell valami kezdő időpontot, onnan tudod számolni
Én régen így oldottam meg, lehet, ha ma újra használnám, már másként csinálnám:
http://arduinouser.hu/esp32/ccount/ccount.txt
Ez persze csak a túlcsordulást/átfordulást kezeli, ettől még nem lesz dátum.Elvileg ez létezik, de még nem próbáltam
std::string s = date::format("%F %T", std::chrono::system_clock::now());[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
#68216320
törölt tag
válasz #68216320 #20197 üzenetére
Például egy ilyet néztem ki: [link] (AliExpress link)
Itt ugyan Rpi-t említik meg az adapternél, de egy egyszerű szalagkábel-vezeték konverter, szóval az spi ereket arra kötöm elméletileg amire tetszik. [yt video]
[ Szerkesztve ]
-
#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.
-
nagyúr
válasz #68216320 #20193 üzenetére
Vettük ám a poént
Én is a több Nokia kijelzőt akartam javasolni, ha már, ahogy írod, van több is. Ha nem tudod egymás mellé tenni úgy, hogy ne legyen látható az illesztés, akkor csináld direkt láthatóra! Nem tudom pontosan milyen kijelzés lesz rajta, de rendezd el őket aszimmetrikusan, mondjuk egy 3D nyomtatott keretbe. Az egyiken legyen csak időjárás, a másikon a naptár stb. Vagy ha van 6 kijelző, akkor például az óra minden száma külön kijelzőre tud kerülni.
-
#68216320
törölt tag
válasz ViZion #20194 üzenetére
Tablet esetén van max. 5óra kijelzőidő. Nem lenne jó megoldás sajnos.
Pedig gondoltam rá, mert az is van, ahogy régebbi telefon is.
Viszont ezek mind a szükségeshez képest pazarlóan bánnak az erőforrásokkal.Már arra is gondoltam, hogy több oled vagy nokia kijelzőt egymás mellé pakolva valahogy létrehozni egy méretesebb megoldást. De sajnos annyira szorosan nem tudom egymás mellé illeszteni őket, hogy ne legyen zavaró.
Anno 3db oled-el már csináltam ilyesmit és működött csak nem volt szép, mert a fehér nem ugyanolyan árnyalata volt a 3db kijelző. Illetve itt már túl sok a pixel ahhoz, hogy alacsony maradhasson a fogyasztás. Egy sima 128x64 pixelszám elég volna csak nagyobb méretben.
[ Szerkesztve ]
-
ViZion
félisten
válasz #68216320 #20193 üzenetére
tehát akkuidő + olvasható méret + ócó... Ez egy régi android tablet lesz.
A kijelző mérettel az akkut is növelni kell, szal. hamar átlépi azt a határt, amiért márnormálishasználható tabletet kapni használtan.Hold on, trying to give a fuck... Nope, not Happening • Powered by Linux • "Az élet olyan sz@r, szerencsére a felén már túl vagyok" Al Bundy ¤¤¤ Hirdetéseim: https://hardverapro.hu/aprok/hirdeto/vizion/index.html
-
#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.[ Szerkesztve ]
-
ViZion
félisten
válasz bagarol #20190 üzenetére
erre gondoltam én is, de nem írtam választ a kollégának, mert
nem szimpatikusa fogyasztásról fogalmam nincs.Hold on, trying to give a fuck... Nope, not Happening • Powered by Linux • "Az élet olyan sz@r, szerencsére a felén már túl vagyok" Al Bundy ¤¤¤ Hirdetéseim: https://hardverapro.hu/aprok/hirdeto/vizion/index.html
-
-
#68216320
törölt tag
válasz #68216320 #20167 üzenetére
"Milyen kis fogyasztasu kijelzot tudnatok ajanlani karakteres/numerikus adatok megjelenitesehez, ami megkozeliti egy mobiltelefon kinelzo meretet?"
Semmi ötlet? Csak nem vagyok szimpatikus vagy nincs igazán ekkora méretben kis fogyasztású kijelző?(Asszonynak csinálnék egy szobai hőmérő/páratartalom/hőfok/naptár és egy meglepi üzenetes eszközt Li-Ion akkuról használva)
-
Wolfram
aktív tag
ESP-ben vannak thread-ek? Tudok valamit futtatni úgy hogy az nem blokkolja a loop-ot?
-
-
nagyúr
válasz Wolfram #20171 üzenetére
Nem lehet, hogy nincs egyetlen delay sem a loop-ban és emiatt nem tud a CPU a wifivel foglalkozni? Bár ez ha jól tudom, ESP8266-ra jellemző, te meg ESP32-t használsz, de hátha ez a gond, egy próbát megér.
ESP-n a delay máshogy működik, más funkciót tölt be, mint az AVR-eken. -
Janos250
őstag
válasz Wolfram #20171 üzenetére
Lehet, azt is nézni kéne, hogy a
http.begin(url);
milyen eredményt ad.
Ha az FD negatív, nem sikerült megnyitni, ne akarj get-elni, ha 48 körüli, akkor minden OK, ha 63-nál tart, akkor baj van, tűl sokat egyszerre megnyitni.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Wolfram #20173 üzenetére
Van olyan, hogy:
bool connected(void);
int available();
Meg kellene próbálni, ezeket használni.Az FD-t meg le lehet kérdezni:
int fd()
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Wolfram
aktív tag
válasz Janos250 #20172 üzenetére
Mármit hogy írod magad, kézzel nyitsz valamit a 80-as porton?
Ezzel a http.GET-el több gond is van: 1. hogy blokkol, 2. hogy nem tudom mennyi a timeoutja. Mivel nincs exception ezért a watchdog (ennek sem tudom a timeoutját) indíthatja újra a lapot, egy másik watchdog meg végtelen ciklust érzékelhet és lelövi az egész lapot. Jól ki van ez találva.[ Szerkesztve ]
-
Janos250
őstag
válasz Wolfram #20171 üzenetére
Ezért nem használom én a többféle http fv. egyikét sem. Mivel egyszerű, magam írom meg hozzá kezelést.
Ha minden kötél szakad, akkor be kell tenni a fv-t a .ino mellé, esetleg át is nevezni, azt includolni, mert abba akkor tehetsz magadnak átmenetileg kiíratást, hogy mi a nyűgje.
Az ESP32 16 darab klienst tud kezelni. Nem forduhat elő, hogy többet nyitsz meg, mert még a régiek is élnek, mert nem kaptak választ?
Nincs benne olyan lehetőség, hogy csak akkor get-elj, ha van is ot valaki, aki várakozik?
Próbáld meg kiíratni az FD-jét, ha túlszalad a 63-on, akkor ez a baj.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Wolfram
aktív tag
Ez az a kód ami miatt folyamatosan resetel az ESP (nem látni exception-t a serial monitoron) :
HTTPClient http;
http.begin(url);
int httpResponseCode = http.GET();egy idő után feladja a resetelgetést és lehal az egész lap.
Valaki szakértsen mi a gond ezzel a kóddal. -
vargalex
félisten
-
bazsimano
őstag
Sziasztok!
A következő kérdésem lenne. Adott egy társasházban ahol a kk 7ezer forintért szeretne másolni codefon proxyt (125khz); létezik olyan megoldás , hogy arduionon és egy másik modulon keresztűl megoldjuk a proxy másolást? Csak azért mert édesanyám elhagyta a sajátját és most az enyémet használja.
Előre is köszönöm a segítséget!
udv
b. -
lanszelot
addikt
válasz its_grandpa #20152 üzenetére
Először is nagyon szépen köszönöm a "gonosz kérdést", ez nagyon jó, mert pont a scope-val van gondom. Nem tudom hogy működk c++ -ban.
for "i" változója nem azonos a többivel.for változó nincs létrehozva, tehát azonos a kintivel, a függvényen belül létrehozottat használjamivel a függvényen belül létre hoztad, így az más mint amit kint hoztál létre.
Szerintem 3 különálló.2 különbözőViszont jól gondolom-e, ha a függvényben nem hoztad volna létre, csak felülírod az értékét, akkor csak 1?
ha így lenne:int i = 5;
void teszt_elek() {
i = 0;
for ( i = 10 ; i > 0 ; i-- )
{
..... ;
}
}
jól gondolom?for -nak nem így kellene lennie?
for (int i = 0; i < 5; i++) {
}
ahhoz hogy külön legyen a változója?[ Szerkesztve ]
-
#68216320
törölt tag
Milyen kis fogyasztasu kijelzot tudnatok ajanlani karakteres/numerikus adatok megjelenitesehez, ami megkozeliti egy mobiltelefon kinelzo meretet?
Neztem egy relativ nagyobb i2c oled kinelzot, de mas lehetosegek is erdekelnek.
Csatlakozas szinte mindegy, stm32 meg parallel is elhajthatja, ha epp olyan. -
vargalex
félisten
válasz its_grandpa #20163 üzenetére
Nem lehet tudni, hogy mi van a ....-ban.
Egyébként szerintem ebben a formában kettő. Tehettél volna a
for
-ba egy deklarációt, akkor legalább 3 lenne...Alex
-
ViZion
félisten
válasz its_grandpa #20162 üzenetére
Akkor azok nem használták egyiket vagy a másikat...
Win 10 reinstall volt a napokban, kicsit meghízott minden is, nem tudjuk miért, netes infók szerint azokból semmi nem törölhető. OK, akkor reinstall, sokéves telepítés, ráfér.
Az új már auto frissít drivereket... nagyszerű, a hangkari driverem törölte, nem működőre frissült. Gamer egér SW frissíti, el sem indul win 10-en amit felrakott. Új telepítés, még AV sem volt fent. Szal. jó ez, csak máshogy. Fél oldal batch script után kigyomlálva, tűzfalon minden kimenő lezárva és már használhatóra van telepítve...Cserébe a szövegek kicsik (tudom, dpi beállítás, de nah... szánalom), ikonok, stb. nem testreszabható, bloatware kiírtás fél nap, de visszarakja frissítésnél (batch script remove működik, de nah...), biztonságból kuka (bekapcsolva közvetítés, meg minden lóf* alapból, az milyen már?). Ha gyerekek nem játszanának, akkor maradna csak a Fedora, a 7-8 sec boot idővel, ami trükközés hibernálás, fastboot meg minden nélkül leáll pár sec alatt... ehh.
törölhető. De Te kezdted!Hold on, trying to give a fuck... Nope, not Happening • Powered by Linux • "Az élet olyan sz@r, szerencsére a felén már túl vagyok" Al Bundy ¤¤¤ Hirdetéseim: https://hardverapro.hu/aprok/hirdeto/vizion/index.html
-
its_grandpa
tag
A #20152-ben feltett gonosz kérdésre más C-t kedvelő is válaszolhat, nem csak lanszelot.
-
-
ViZion
félisten
válasz vargalex #20158 üzenetére
Nem C, de máshol sem találtam goto-t, gosub-ot, miért? Mi a baj vele?
Mondjuk anno még ezt tanultam, de nem tudom, h mi van helyette, szerencsére meg tudtam kerülni.[ Szerkesztve ]
Hold on, trying to give a fuck... Nope, not Happening • Powered by Linux • "Az élet olyan sz@r, szerencsére a felén már túl vagyok" Al Bundy ¤¤¤ Hirdetéseim: https://hardverapro.hu/aprok/hirdeto/vizion/index.html
-
vargalex
félisten
válasz its_grandpa #20153 üzenetére
Én sem használok goto-t, pont ezért rendesen meglepődtem, mikor a legutóbbi melónál kernel patch-et kellett backportolni (OpenWrt alá) és bőven van goto a mainline kernel kódjában...
Alex
-
Wolfram
aktív tag
-
-
válasz its_grandpa #20153 üzenetére
És ha az van oda írva, hogy ugorj bele, akkor beleugrasz? Persze, ha a munkáltató megköveteli, OK, nálunk is van Sonarqube, de egy rakás szabály ki van dobva /főleg kód komplexitás, meg ilyenek/, mert csak szopatnánk vele magunkat. Nekem az a véleményem, hogy az a jó kód, ami érthető és karbantartható, nem az, ami megfelel valami szabálynak. Ha a kettő között van átfedés, az még jobb.
I did nothing, the pavement was his enemy!
-
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-- )
{
..... ;
}
} -
bagarol
junior tag
[link] Itt már írtam.
LoRa.beginPacket();
LoRa.print(state,"hello ",T1," ",T2," ",counter);
LoRa.endPacket();if (packetSize) {
// received a packet
state = ((char)LoRa.read());
Serial.print("Received packet :");
// read packet
while (LoRa.available()) {
Serial.print((char)LoRa.read());
}
// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi()); -
-
lanszelot
addikt
válasz its_grandpa #20140 üzenetére
Ebben egyszerűbb átlátni.
Ezt gyárilag adták az érzékelőhöz, nem én írtam.Így értetted?
bool b_measure = false;
static bool measure_environment( float *temperature, float *humidity )
{
static unsigned long measurement_timestamp = millis( );
/* Measure once every four seconds. */
if( millis( ) - measurement_timestamp > 3000ul )
{
if( dht_sensor.measure( temperature, humidity ) == true )
{
measurement_timestamp = millis( );
b_measure = true;
}
}
return( b_measure );
}[ Szerkesztve ]
-
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");
}*/
```By cool !
-
-
válasz its_grandpa #20140 üzenetére
Structured programming says you should only have one return statement per function.
Szerintem ez csak preferencia kérdése.
I did nothing, the pavement was his enemy!
-
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. -
-
lanszelot
addikt
Ennél miért rak mindent static-ba?
Értem mi a static, csak azt nem itt miért használja.
17, 36, 38 sorokMásik kérdés: 4-es sor
Azt írja, hogy kell egy felhúzó ellenállás. De a bekötési rajzán az nam szerepel.
Hova kellhet az az ellenállás?
Én a pozitív és az érzékelő pozitív lába közé tenném. /de egyáltalán nem vagyok biztos benne/ -
-
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?By cool !
-
lanszelot
addikt
válasz lanszelot #20127 üzenetére
2ik kérdés visszavonva.
Valami miatt 4 jegyű számokat ít ki gombNyomas értékének, de valójában nem az
Ezt ne mértem miért.
Csak újra rátöltöttem ugyanazt a programot, semmit se változtattam, és gombNyomas értéke 1-4
Viszont akkor is jól működött amikor hülyeséget írt ki /4 jegyű számmal/.lehetséges, hogy a serial monitor hibásan működött?
[ Szerkesztve ]
-
lanszelot
addikt
Volna pár kérdésem a programmal kapcsolatban:
itt a jelenlegi, működő program kód178 sor -> 300ul
211 sor -> 500
Mi a különbség?
Néztem mit jelent az UL , de nem igazán értem.217 sor -> gombNyomas%4
ez hogy működik?
tudom mit jelent a % , gombNyomas / 4 maradéka
De nem értem hogy működik.
Hogy lesz 0,1,2,3 ?
0 mikor nincs maradék, 1 mikor 1 a maradék ...stb
de gombNyomas egy 4 jegyű szám -
Tankblock
aktív tag
válasz Wolfram #20104 üzenetére
C++ try() catch() nekem tesztek alatt működik esp-idf et használok (configurálni kellett a sdkconfigot is hozzá), lehet dobni hibát throw() , arra nem esküszök meg hogy ESP_ERROR_CHECK makróra is tud e dobni, nálam működött....
másik megoldás a JTAG pl : [link] bár ezt még nem használtam, ha lesz ráidőm kipróbálom majd.
Release the Beast....
-
-
nagyúr
Azért mondjuk az űrhajók, atomerőművek szoftverei eléggé meg vannak írva. Persze nyilván igazad van, egy szoftver fejlesztése sosem fejeződik be, csak abbahagyni lehet.
Egy mikrokontroller esetén van az a komplexitás szerintem, amit kis szerencsével még meg lehet írni hiba nélkül, illetve a memory leak-eket el lehet kerülni bizonyos konvenciók betartásával.
[ Szerkesztve ]
-
-
olli
tag
```cpp
#include <SPI.h>
#include <LoRa.h>
int state;
//LoRa32u4 ports
#define SS 8
#define RST 4
#define DI0 7
#define BAND 433E6
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT); // fehér led sets the pin as output for relay
digitalWrite(13,HIGH);
//while (!Serial); //if just the the basic function, must connect to a computer
delay(1000);
SPI.begin();
LoRa.setPins(SS,RST,DI0);
Serial.println("LoRa Receiver");
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("LoRa Initial OK!");
}
/*----( LOOP: RUNS CONSTANTLY )----*/
void loop() {
digitalWrite(13,LOW);
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet
Serial.print("Received packet :");
// read packet
while (LoRa.available()) {
Serial.print((char)LoRa.read());
}
// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
while (LoRa.available()) {
Serial.println();
state = ((char)LoRa.read());
}
if (state == 1) //If this code received then turn on pump
{
Serial.println("Pump ON");
digitalWrite(13,LOW); //Pump relay ON
delay(500);
}
if (state == 0) //If this code received then turn off pump
{
Serial.println("Tank Full - Pump OFF");
digitalWrite(13,HIGH); //Pump relay OFF
delay(3000);
}
}
}serial print:```
Received packet :hello 16.2515.25112121' with RSSI -78 Tank Full - Pump OFFKüldő oldalon mit is kellene megadnom, hogy kiváltsa a relé on-off kapcsolását?
By cool !
-
-
lanszelot
addikt
válasz its_grandpa #20101 üzenetére
Köszönöm szépen
Tanultam/lok elméletet. A nagyon alapok meg is vannak.
Előző programozási tapasztalataim alapján, ha meg vannak az operator-ok. tömbök, változók, loop-ok, statement-ek, függvények.
Ekkor háttérbe kell rakni az elméletet, és el kell kezdeni programozni.
Közben felmerülnek a hiányok, amit ki kell tömni.
De csak elmélettel nem lehet megtanulni.- A fő gondom a scope. Nem találok olyan oldalt ahol megérteném.
pl: itt a 135 -üs sorban scope hiba van, de nem értem miért
- másik nagy gondom, hogy le van írva valami, és úgy nem működik.
pl:#define Gas_pin_digital 2;
ez hibát dob, azt írja így kell:#define Gas_pin_digital (2);
Nem programozni nehéz, hanem megtalálni a hibát. Mert akkor az egészet át kell látni.
Ez egy kezdőnek nem megy. Én pedig kezdő vagyok.
Ezért kell a segítség.Biztos sok hülyeséget kérdezek/írok, de azért mert nem értem.
Vagy nincs az alapokban az amiről kérdezek.
pl : interrupt
Ezeket meg kell tanulnom, de már használat közben, nem szárazon betűkből.
Mindenki más sebességgel tanul/ért meg dolgokat.
És van aki tud magolni, van aki nem. Én nem tudok. Nekem a gyakorlat kell.
Jelenleg meg kell értenem a működését. Most vagyok az ezt innen kiveszem, enyémbe beteszem, itt is működik-e. No, akkor miért nem, és hogy kell, hogy igen. -
-
nagyúr
-
-
nagyúr
válasz Wolfram #20104 üzenetére
Programhibából fakadó fagyás, vagy véletlenszerű, a körülmények miatti (pl. táp vagy wifi) hiba?
Kódból watchdog timerrel szokás az ilyet "kezelni". Ha pedig nem külső körülmények vagy hardverhiba okozza, vagy végtelen ciklus, akkor szinte biztos, hogy memóriaelfogyás az oka.[ Szerkesztve ]
-
Wolfram
aktív tag
Amikor egy lap (ESP32) lefagy, milyen lehetőségek vannak a debugolásra?
Lehet a fagyást kódból kezelni, pl.: letárolni az utolsó hibát valahova? -
nagyúr
válasz its_grandpa #20101 üzenetére
Álljunk le a C programozás tanfolyammal ?
Én ilyet nem mondtam.
-
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 ?
Új hozzászólás Aktív témák
Hirdetés
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Xiaomi 14 - párátlanul jó lehetne
- Samsung Galaxy A54 - türelemjáték
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Hitelkártyák használata, hitelkártya visszatérítés
- A fociról könnyedén, egy baráti társaságban
- Asszociációs játék. :)
- Milyen házat vegyek?
- Ukrajnai háború
- Melyik tápegységet vegyem?
- További aktív témák...
- Nintendo Switch OLED 19.0.1 Dual-Boot Cfw + 128GB MicroSD + Atmosphere 1.8.0, 3 hó garival!
- XBOX ONE S 1TB, dobozában, gyári tarozékaival és 6 hó garanciával, Bp-i üzletből!
- XBOX ONE X 1TB, makulátlan szép állapotban, 6 hó teljeskörű és 1 év SW garanciával Bp-i üzletből!!
- XBOX Series X, dobozában, gyári tartozékaival, 2025.06.28.-ig gyári garancia!! Bp-i üzletből eladó!
- GIGABYTE Nvidia Geforce GTX 1080 TI Aorus
Állásajánlatok
Cég: Axon Labs Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest