Fórum témák
- • Klíma beszerelése, fűtés-hűtés házilag
- • Általános antennás kérdések, válaszok
- • Számítógép hiba, de mi a probléma?
- • Műhelyünk felszerelése, szerszámai
- • Flexibilis nyák
- • Kapcsolóüzemű táp 230V-ról
- • Mosógép vezérlők és általános problémáik
- • VF2 végerősítő
- • Oszcilloszkóp vétel, mit gondoltok?
- • Robot porszívó - Roomba
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Erősítő mindig és mindig
- • Kondenzátor
- • ESR mérő
- • Hegesztő inverter javítás
- • Klíma szervizelés, javítás
- • Boombox javítás
- • RP2040
- • Alternativ HE találkozó(k)
- • Felajánlás, azaz ingyen elvihető
- • Rádió adó építése
- • Logikai analizátor
- • PROM (TBP18S030N)
- • Fejhallgató erősítő
- • Li-Po - Li-ion akkumulátor és töltője
- • Hűtőgép probléma
- • Elektronikai témájú könyvek újságok
- • Arduino
- • Vásárlás, hol kapható?
- • MIG/MAG/Co2 hegesztő készülékek házilag
- • Kapcsolási rajzot keresek
- • MyElecParts alkatrész kereső és készlet nyilvántartó
- • Mikrovezérlős cambus-os izzító relé
- • Indukciós főzőlap, sütő bekötése, kábelek kiépítése
- • Kazettás magnó (deck) javítása
- • Szárítógép problémák
- • Napelem kivitelező keresése / kiválasztása
- • Lézer érzékelő
- • Sprint-Layout NYÁK-tervező
- • Mosogatógép hiba
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • NYÁK-tervező programok
- • Napelem alkalmazása a lakás energia ellátásában
- • Hörmann kapuk
- • Videomagnó problémák
- • PIC programozás assemblyben
- • Vicces - mókás történetek
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Kutya macska (vad) riasztó
- • FET vezérlése
- • Érdekességek
- • Áramlökés határoló lágyindító
- • Hibrid erősítő
- • Egyfázisú villanymotor fordulatszám szabályozása
- • Transzformátor készítés, méretezés
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Ész nélkül semmiképp! A fordítandó projekthez meg szokták adni hogy milyen libet igényel, abból melyik verziót. Jobb helyeken még linkelik is. Ezek nagyon könnyen összeakadnak, érdemes csak azokat feltenni amit nagyon muszáj.
Amúgy nem tudom, van erre valakinek bevált módszere, hogy ha az egyik ezt igényli a másik meg azt, akkor ne vesszenek össze? Vagy minden alkalommal megy a pepecselés hogy leforduljon valahogy???
Én nem használok libeket, vagy ha mégis akkor ragaszkodom ahhoz az egyhez ami már egyszer bevált. Mondjuk nem is szoktam idegen projekteket fordítani... Megvan az a stiklim, hogy megírom magamnak amire szükségem van.
Ha Arduinot használsz, akkor máris használsz idegen kódot. Elég nagy C++ kódbázis maga az Ardunio.
De ha kihagyod az Arduinot, akkor is itt van egy csomó lib. Az AVR-GCC beépítve tartalmaz egy csomó C és ASM kódot a mikorokontrollerek könnyebb kezelésére. A C fordítóhoz is jár egy standard függvénykönyvtár, abból is használsz egy csomó mindent.
Library mentes kódban nincs Serial.println() de még memcpy() sem...
Idézet: „van erre valakinek bevált módszere”
Megoldásom a problémára: Nem használom az Arduino keretrendszer library managerét. Minden projekt saját Git repositoryban van, a szüksége 3rd party kód pedig szubmodulként belinkelve.
Munkahelyi projekteknél pedig egyáltálán nincs Arduino, a 3rd party repositorykat pedig forkoljuk, így nem függünk harmadik fél repo törlési akcióitól.
Kipróbáltam mindkét változatot, amit mellékelt képet azt is, és az illesztő nélkülit is.
Egyik verzió se működik
A beépített szintillesztőt tartalmazó modult érdemes megvizsgálni. Hogy miért? Mert sok esetben csak a szint illesztést végzik el és nem foglalkoznak azzal, hogy a MISO vonalra esetleg más eszköz is rá van kötve. A MISO vonalnak ugyanis lebegő állapotban kell lennie abban az esetben, ha az adott eszköz nincs kiválasztva a hozzá tartozó CS vonalon. Ennek az elmulasztása addig amíg egyetlen eszköz van az SPI vonalakra rátéve semmilyen gondot nem okoz, de ha már több eszköz is rákerül akkor kezdődik a szkanderbajnokság a MISO vonalon. Ez ugye jobb esetben csak működésképtelenséget, rosszabb esetben akár valamelyik eszköz meghibásodását is eredményezheti.
De mint írtam, kipróbáltam illesztő nélkül is az sd kártyát és úgy se volt jó, a videoba is így van.
És az MFRC elengedi (azaz lebegő kimenetté állítja) a MISO vonalat akkor amikor a CS vonala magas (tehát inaktív) állapotú?
Odáig el se jut, az SD inicializálás sikerrel lefut (de az se mindig, ez is érdekes)
Az SD cs lába marad magas szinten, az MFRC ss lába lebeg,az MISO láb is.
Idézet: „Ha Arduinot használsz, akkor máris használsz idegen kódot.”
Félreértettél! Nem állítom hogy 100% natív saját gépi kódot írok, de nem szoktam külön libeket letölteni. Itt a hangsúly megint a szoktam-on van, volt már példa erre is. Csak ahhoz képest hogy sokan csak ollóznak össze-vissza és csodálkoznak hogy nem működik, nekem jóval kevesebb ősz hajszálam van. Tény, hogy cserébe meg kell küzdenem a megvalósítással. Ezért mondtam hogy stikli 
szerk.: mondjuk így ebben a formában ez már off, úgyhogy inkább szürkítem is A hozzászólás módosítva: Máj 13, 2023
A videóban lévő 3,3V-os SD kártya olvasót használ ami nem olyan mint a tied. Tieden lévő stabilizátor ic-s verzíónak mindig 1-2 V-al nagyobb tápfeszültség kell a bemenetére mint ami kimenetén van. Ezért tud 5V-ból 3,3V-ot létrehozni. Ha ugyanakkora feszültséget adsz a tápfeszültség bemenetre mint aminek a kimeneten kellene lennie az vagy instabil állapot lesz, vagy nem is fog működni.
Az LVC125A tudja a lebegő állapotot, persze csak akkor ha az OE lába be van kötve. Továbbá össze lehet kötni 3,3V-os eszközökkel tekintve hogy a táp feszültsége max 3,6V lehet. Vagyis nem tud többet kiadni mint a stab ic-től kapott 3,3V, de tud fogadni 5V-ot a bemenetén.
Az MFRC522 MISO láb lebegés jó, de a CS láb nem lebeghet. Nézd végig a vezetékezést. MOSI lábnak is lebegni kellene ha az SS vonal HIGH
Az MFRC522 tudja az SPI-t és az I2C protokollt is kezelni. Meg lehet próbálni átalakítva használni i2c-1 (bocsi, de a böngésző blokkolta így csak fordítón keresztül működik) i2c-2
Sziasztok! Végül megoldódott a problémám. A megoldást megírom. Talán hasznos lehet másnak is.
Idézet: „Üdv!
Segítségre lenne szükségem. Egy excel munkafüzet 5 cellájának értékeivel kellene vezérelnem 5 arduinora kötött ledet. A celák értéke egy nagy adatmennyiség analízise alapján 0, 1, vagy 2 lehet (na eddig vannak kézbentartva a dolgok) az arduino mindig a COM3 portra csatlakozik a ledek a 8,9,10,11 és 12 kimeneteken. Azt kellene megoldani hogy pl. ha A1 cella értéke 1 akkor led8 nem világít, ha az érték 1 akkor led8 1Hz frekivel villogjon és ha az érték 2 akkor folyamatosan világítson. Ugyanígy A2 led9, A3 led10 stb stb. Probáltam mindenféle kódokat vba és arduino oldalról is datastreamert és firmatat de csak egy két össze-vissza villódzás meg vba hibák sikeráltak. Arduinoval még nem foglalkoztam. Ha valki kisegít, akkor a ledek helyet végül agy andon lámpatorony lesz a kijelzés egyszilárdtest relékártyán keresztül, de most teljesen belezavarodtam. Ha tudnátok arduino és vba kódokat javasolni, azt megköszönném. Minden tiszteletem a segítő szándékú szakiké. Köszönöm!
Tónyó”
Végül ez vált be :
const int ledPin8 = 8;
const int ledPin9 = 9;
const int ledPin10 = 10;
const int ledPin11 = 11;
const int ledPin12 = 12;
int command;
bool led8Blinking = false;
bool led9Blinking = false;
bool led10Blinking = false;
bool led11Blinking = false;
bool led12Blinking = false;
unsigned long previousMillis = 0;
const long interval = 500;
void setup() {
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin10, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(ledPin12, OUTPUT);
Serial.begin(57600);
}
void loop() {
if (Serial.available()) {
command = Serial.read();
if (command == '1') {
digitalWrite(ledPin8, LOW);
led8Blinking = false;
} else if (command == '2') {
digitalWrite(ledPin8, HIGH);
led8Blinking = false;
} else if (command == '3') {
led8Blinking = true;
} else if (command == '4') {
digitalWrite(ledPin9, LOW);
led9Blinking = false;
} else if (command == '5') {
digitalWrite(ledPin9, HIGH);
led9Blinking = false;
} else if (command == '6') {
led9Blinking = true;
} else if (command == '7') {
digitalWrite(ledPin10, LOW);
led10Blinking = false;
} else if (command == '8') {
digitalWrite(ledPin10, HIGH);
led10Blinking = false;
} else if (command == '9') {
led10Blinking = true;
} else if (command == 'A') {
digitalWrite(ledPin11, LOW);
led11Blinking = false;
} else if (command == 'B') {
digitalWrite(ledPin11, HIGH);
led11Blinking = false;
} else if (command == 'C') {
led11Blinking = true;
} else if (command == 'D') {
digitalWrite(ledPin12, LOW);
led12Blinking = false;
} else if (command == 'E') {
digitalWrite(ledPin12, HIGH);
led12Blinking = false;
} else if (command == 'F') {
led12Blinking = true;
}
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (led8Blinking) {
int state = digitalRead(ledPin8);
digitalWrite(ledPin8, !state);
}
if (led9Blinking) {
int state = digitalRead(ledPin9);
digitalWrite(ledPin9, !state);
}
if (led10Blinking) {
int state = digitalRead(ledPin10);
digitalWrite(ledPin10, !state);
}
if (led11Blinking) {
int state = digitalRead(ledPin11);
digitalWrite(ledPin11, !state);
}
if (led12Blinking) {
int state = digitalRead(ledPin12);
digitalWrite(ledPin12, !state);
}
}
}
Az excel datastreamer bővítményébe íródnak a parancsok.
Bármilyen makró vagy vba kód kimenete lehet bármilyen led variáció.
Köszönöm a segítő hozzászólásokat!
Tónyó
Kipróbáltam mindkét változatot  (melléklet)
Igaz, saját készítés, de működik illesztő chip nélkül, persze nem egyszerre.
Az I2c-s módszer, nagyon tetszik, ki is próbálom, ha jól látom annyi a külömbség, hogy egy külön MFRC522_I2C.h kell és inicializálás előtt kell a Wire.begin();,,???
lemaradt a melléklet.
Közbe nézem, hogy egy alakítást is kell csinálni az Mfrc panelján, a hátuljába kéne fúrni egy lyukat, ami azért kicsit homály, mivel ott semmi via nincs, konkrétan belefúrnék pont a chipbe.
Idézet: „Just drill a neat little hole from the bottom side of the PC through the trace.
I used a 0.9 mm drill in a pin vise (that's a little holder like a jeweler's screwdriver, no motor).
Just drill carefully until you hit the copper, then keep on drilling until the copper is gone.”
Tehát fúrjak bele a panel hátuljába, de csak a vezetősávig, úgy, hogy az IC-t nem sértem meg vele.... 
Ezek a holdról jöttek???
Csináltam már ilyet. Hekkelésnél előfordul. 
Ha nem tetszik, akkor vegyél olyan modult, ami neked eleve megfelel.
De itt azért van némi ellentmondás: az egyik azt állítja csak át kell fúrni/vágni az 1-es pin és a test között, a másik , hogy ki kell vezetni + összekötni az 1-2-vel, akkor hol az igazság?
Te melyiket csináltad? A hozzászólás módosítva: Máj 14, 2023
„Az igazság odaát van”
Gondolom CNC-vel fúrtak, amivel nem nehéz tized, század mm-nyi pontossággal fúrni. Ha megnézed az 1-es linknél a képeket látható képeket látható hogy az 1-es és a 32-es láb be van kötve a GND-re egy ki vezetősávval. Fúrással az van meg szakítva. Talán egyszerűbb leforrasztani és kapton szalaggal visszaforrasztani ahogy a leírásban is szerepel. De ezek az RFID-ek kaphatok sokféle verzióban RFID (SPI,I2C, RS232) és még a HSTORE-ban is vannak.
A fotón lévő kábel dzsungel szép látvány  Ezek elkerülése végett tértem át erre: CARD+ RTC Könnyebb átlátni a helyzetet.
Látom van két egyforma RFID is. Ketten tudnak egy ARDUNIO-ra rákötve működni?
Kézzel fúrta ki 
Oké, a 1 és a 32 megszakít, de látok egy változatot, amin egy vékony szál kilóg a talán 32-re kötve, de nem derül ki, hogy minek.
Lehet, csak kipróbálom, mert még van pár mfrc-m.
Azt úgy nem próbáltam, hogy egy UNO-ra 2 mfrc-t bekötni.
Köszi hogy megosztottad a tudásod.
Ki fogom próbálni ha oda jutok.
Kézzel is lehet, csak úgy el kell hallgatni a nem sikerültek számát
Talán így könnyebb lesz a lábak funkcióit beazonosítani 522 verziók vagy 522 áramkör
Azt hogy 2 egyformát tegyél az UNO-ra, azért írtam mert úgy könnyebb lesz megtalálni a hibát, hiszen mindkettőn ua. azt a kell mérned. A hozzászólás módosítva: Máj 14, 2023
Nem ezen a modulon csináltam ilyet. A hekkelési technika ismerős.
Adtam egy esélyt a dolognak//nem jött be.
Levettem a chipet, ragasztottam a 32 és az 1-re kaptonszalagot (már ez challange volt)
Majd vissza, szerencsére van még pár mfrc-m
(#) |
sany hozzászólása |
Máj 15, 2023 |
 |
/ |
 |
|
Szeretnék segítséget tőletek.
Készítenenék egy félkarú rabló játékgéphez hasonló működésű készüléket. Persze sokkal egyszerűbbet. Három digites hét szegmenses multiplexelt kijelzőn szeretném majd megjelenítetni a külöböző szimbólumokat. Én úgy gondoltam, hogy az egyes szimbólumokat a kijelzőn véletlenszerű digiteken jelenítettném meg véletlenszerűen. Mindegyik szimbólumhoz egy azonosítót rendelnék és a későbbiekben ellenőrizném, hogy ezek a szimbólumok egyszerre szerepelnek-e mind a három digiten. Ha igen, akkor pl. kapcsoljanak fel egy LED-et és álljon meg a kijelzés jelezve azt, hogy három egyforma szimbólum van mind a három digiten. Azonban abba problémába ütköztem, hogy hogyan tudnám megállítani a kijelzési folyamatot, hogy látható legyen három egyforma szimbólum a kijelzőn?
Írtam egy kis kódot, ami egymás után véletlenszerű digiteken jeleníti meg a szimbólumokat:
Köszönöm a segítséget!
#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment controller object
void setup() {
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
bool resistorsOnSegments = true; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_CATHODE; // See README.md for options
bool updateWithDelays = false; // Default. Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
sevseg.setBrightness(90);
}
void szimbolum1( int sz1)
{
int digit = 0;
digit = random(0, 3);
sevseg.setSegmentsDigit(digit, 0x64);
digit--;
sz1=1;
return sz1;
}
void szimbolum2(int sz2)
{
int digit = 0;
digit = random(0, 3);
sevseg.setSegmentsDigit(digit, 0x63);
digit--;
sz2=2;
return sz2;
}
void loop() {
int sz1;
int sz2;
szimbolum1(sz1);
szimbolum2(sz2);
// itt hasonlítanám össze az egyes átadott azonosítokat sz1=sz2m stb.....
sevseg.refreshDisplay();
delay(100);
}
A hozzászólás módosítva: Máj 15, 2023
Én nem igy csinálnám. Ha jol értettem a kérdést.
A 3 display legy A, B meg C.
valamennyi displayen 0-9 számot jelenthetsz meg, azaz ezt a tartomány kell randomizálni.
int A = random ( 0,9);
Majd ugyanezt a B-re meg a C-re.
Ha nem csak számokat akarsz kijelezni a displayen, akkor ha elkészült a kép, annak van valamilyen számszerü alakja, pl ugy, hogy az egyes szegmensekhez hozzárendelsz egy számot
a = 1
b = 2
c = 3
d = 4
e = 5
f = 6
g = 7. ( ha a decimális pontot is beszámolod).
A kijelzett szám meg A = ( a+b+c+d+e+f+g)
A sorok közé berakhatsz egyébb randomizálo sorokat.
Ha megvan mint a 3 szám, akkor beraksz egy IF funkciot, hogy A=B=C, és ekkor megáll a gép és fizet..
Bocs ha félreértettelek.
heltec_lora_wifi_ esp32 sender cod:
#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 state = 0;
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 >41 II T1>25= a boilerben van melegvíz
//rel2/pin17 villanyra kapcsol
//T1+T2<41 II T1<25= 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) > 41 || T1>25)
{
display.begin();
display.clear();
display.draw_string(4, 8, "BOILER", OLED::DOUBLE_SIZE);
display.display();
digitalWrite(boiler, HIGH);
state = 1;
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);
state = 0;
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(state);
LoRa.print(" ");
LoRa.print("HELLO");
LoRa.print(T1 );
LoRa.print(" " );
LoRa.print(T2 );
LoRa.print(" ");
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");
}*/
LoRa32u4 receiver cod:
#include <SPI.h>
#include <LoRa.h>
unsigned 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());
int state =((char)LoRa.read());
if (state == 1) //Melegvíz gázkazánból..
{
Serial.println("GAZ_KAZAN - TIMER ON");
digitalWrite(13,HIGH); //Időzítés be..
delay(500);
}
/* if (state == 1); //Melegvíz boilerből..
{
Serial.println("BOILER");
digitalWrite(13,LOW); //Időzítő ki..
delay(3000);
}*/
}
}
//Serial print
// Received packet :1 HELLO 34.25 17.00 7056' with RSSI -79
//GAZ_KAZAN - TIMER ON
//BOILER
Hogyan módosítsam a kódokat? Most a fogadó nem olvassa a state értéket a packeten belül, és nincs relé kapcsolás.
Igen, ez is jó, amit te írsz.
Azonban...
Én itt a SevSeg.h könyvtár-t használnám elsősorban. Itt sajnos nem tudom, hogy hogyan kellene azt megoldani, hogy csak az adott szegmenshez tartozzon egy kijelzett szám vagy karakter. Azért inkább így elsőre azt választottam, hogy inkább a digit változzon , mint az adott kijelzési érték. Tehát adott digiten, adott karakter.
Így illetve ide lehetne valahogy beleírni a véletlen karaktert. De nem jövök rá hogyan, mert byte-ot kér. Részlet a SevSeg.h könyvtár leírásából:
Custom display setting
// Set the segments for every digit on the display
uint8_t segs[4] = {0, 0x5B, 0x6D, 0x63};
sevseg.setSegments(segs);
// Set the segments for a single digit. Set digit 3 to 0x63.
sevseg.setSegmentsDigit(3, 0x63);
De lehet így nagyon nem jó az irány.
Majd írok bele rejtett programkódot, ahol lehet majd kapcsolóval állítani , hogy ne dobálja ki az aprót feleslegesen.  A hozzászólás módosítva: Máj 15, 2023
A SevSeg helyett csinálsz egy tömböt ( arrayt) ahol definiálod a 7(8) szegments egyenként ( ahogy korábban irtam).
Itt teljesen szabadon választhatsz a definiált szegmensek közül. A 10 szám adva van (0-9), ezen felül te definiálhatod számokkal pl a
11. Legyen ||. ( 2 függöleges jelet)
12. 1-3 vizszintes jelet
13. Egy H betüt
14. Egy U betüt
15. Egy n betüt stb.
nem sok van.
Ezeket mind beviszed a tömbe és már csak a véletlen szerü kiválasztást kell megoldanod 0-x számig, amit fenn bevittél az arrayba.
Valóban lehet a SevSeg nem a legjobb a feladathoz. Megpróbálom tömbökkel.
Szép munka  Sajnálom hogy nem működik.
Vannak az i2c_1 link alatt minta programok is. Nem látja az i2c szkenner sem?
Hogyan kötötted be.
|
|