Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   796 / 845
(#) sargarigo válasza Antennaman hozzászólására (») Máj 13, 2023 /
 
É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.
(#) vargham válasza sargarigo hozzászólására (») Máj 13, 2023 /
 
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...
(#) vargham válasza sargarigo hozzászólására (») Máj 13, 2023 / 1
 
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.
(#) asch válasza vargham hozzászólására (») Máj 13, 2023 /
 
> a szüksége 3rd party kód pedig szubmodulként belinkelve.
Ezt hogy lehet Arduinoban megcsinálni?

Én emiatt a probléma miatt elég hamar leszoktam az Arduino-ról. Amolyan "kapudrogként" ezzel kezdtem, de a lib kezelés szerintem is katasztrofális. Az a baj, hogy ezt egy nehéz probléma jól kezelni, az Arduino pedig elrejteni akarja a problémát, nem is nagyon látható, hogy mit csinál belül. Az első alkalommal amikor valami nem úgy működik ahogy kellene, jöhet a fejvakarás, hogy mi is van itt.

Az első kézzel írt makefile-omat az Arduino által kiadott parancsok alapján raktam össze, és elkezdtem azzal fordítani a programomat rendes C/C++ programként. Lassanként megszabadultam az Arduino libtől is. Most már csak akkor használok Arduinot, ha valamit nagyon gyorsan össze akarok tákolni és tudom előre, hogy nem fogok vele falba ütközni.

Az "iparban" is probléma egyébként a függőségkezeés, és az egyik megoldás hogy virtuális gépeket, vagy Docker konténereket csinálnak projektenként, amiben pontosan az van benne ami ahhoz kell. Így nem ütköznek össze. Véleményem szerint ez egy drága workaround, de legalább működik.

Arduino-ból "telepíthetsz" többet, valójában nem kell telepíteni, csak kicsomagolni egy mappába és kész. Tehát nem kell Docker sem. Hátránya, hogy 1GB körül van egy példány, de a mai SSD árak mellett ez nem óriási probléma. Én egy ideig őrizgettem így Arduino IDE-ket, de aztán portoltam mindent sima Makefile-ra és azóta nem is kell Arduino.

A külső források kezelésére a saját másolat (mirror) létrehozása jó gyakorlat. Volt ilyen "botrány" valamikor, hogy valaki viccből törölte a 11 soros "leftpad" implementációt, és tömegeknek törtek el a folyamataik, nem tudtak szoftvert kiadni: https://qz.com/646467/how-one-programmer-broke-the-internet-by-dele...f-code
(#) SzilCsong válasza robis01 hozzászólására (») Máj 13, 2023 /
 
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
(#) benjami válasza robis01 hozzászólására (») Máj 13, 2023 /
 
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.
(#) SzilCsong válasza benjami hozzászólására (») Máj 13, 2023 /
 
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.
(#) benjami válasza SzilCsong hozzászólására (») Máj 13, 2023 /
 
És az MFRC elengedi (azaz lebegő kimenetté állítja) a MISO vonalat akkor amikor a CS vonala magas (tehát inaktív) állapotú?
(#) SzilCsong válasza benjami hozzászólására (») Máj 13, 2023 /
 
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.
(#) sargarigo válasza vargham hozzászólására (») Máj 13, 2023 /
 
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
(#) robis01 válasza SzilCsong hozzászólására (») 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
(#) tonyoka válasza tonyoka hozzászólására (») Máj 13, 2023 / 1
 
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 :
  1. const int ledPin8 = 8;
  2. const int ledPin9 = 9;
  3. const int ledPin10 = 10;
  4. const int ledPin11 = 11;
  5. const int ledPin12 = 12;
  6. int command;
  7. bool led8Blinking = false;
  8. bool led9Blinking = false;
  9. bool led10Blinking = false;
  10. bool led11Blinking = false;
  11. bool led12Blinking = false;
  12. unsigned long previousMillis = 0;
  13. const long interval = 500;
  14.  
  15. void setup() {
  16.   pinMode(ledPin8, OUTPUT);
  17.   pinMode(ledPin9, OUTPUT);
  18.   pinMode(ledPin10, OUTPUT);
  19.   pinMode(ledPin11, OUTPUT);
  20.   pinMode(ledPin12, OUTPUT);
  21.   Serial.begin(57600);
  22. }
  23.  
  24. void loop() {
  25.   if (Serial.available()) {
  26.     command = Serial.read();
  27.     if (command == '1') {
  28.       digitalWrite(ledPin8, LOW);
  29.       led8Blinking = false;
  30.     } else if (command == '2') {
  31.       digitalWrite(ledPin8, HIGH);
  32.       led8Blinking = false;
  33.     } else if (command == '3') {
  34.       led8Blinking = true;
  35.     } else if (command == '4') {
  36.       digitalWrite(ledPin9, LOW);
  37.       led9Blinking = false;
  38.     } else if (command == '5') {
  39.       digitalWrite(ledPin9, HIGH);
  40.       led9Blinking = false;
  41.     } else if (command == '6') {
  42.       led9Blinking = true;
  43.     } else if (command == '7') {
  44.       digitalWrite(ledPin10, LOW);
  45.       led10Blinking = false;
  46.     } else if (command == '8') {
  47.       digitalWrite(ledPin10, HIGH);
  48.       led10Blinking = false;
  49.     } else if (command == '9') {
  50.       led10Blinking = true;
  51.     } else if (command == 'A') {
  52.       digitalWrite(ledPin11, LOW);
  53.       led11Blinking = false;
  54.     } else if (command == 'B') {
  55.       digitalWrite(ledPin11, HIGH);
  56.       led11Blinking = false;
  57.     } else if (command == 'C') {
  58.       led11Blinking = true;
  59.     } else if (command == 'D') {
  60.       digitalWrite(ledPin12, LOW);
  61.       led12Blinking = false;
  62.     } else if (command == 'E') {
  63.       digitalWrite(ledPin12, HIGH);
  64.       led12Blinking = false;
  65.     } else if (command == 'F') {
  66.       led12Blinking = true;
  67.     }
  68.   }
  69.  
  70.   unsigned long currentMillis = millis();
  71.  
  72.   if (currentMillis - previousMillis >= interval) {
  73.     previousMillis = currentMillis;
  74.  
  75.     if (led8Blinking) {
  76.       int state = digitalRead(ledPin8);
  77.       digitalWrite(ledPin8, !state);
  78.     }
  79.  
  80.     if (led9Blinking) {
  81.       int state = digitalRead(ledPin9);
  82.       digitalWrite(ledPin9, !state);
  83.     }
  84.  
  85.     if (led10Blinking) {
  86.       int state = digitalRead(ledPin10);
  87.       digitalWrite(ledPin10, !state);
  88.     }
  89.  
  90.     if (led11Blinking) {
  91.       int state = digitalRead(ledPin11);
  92.       digitalWrite(ledPin11, !state);
  93.     }
  94.  
  95.     if (led12Blinking) {
  96.       int state = digitalRead(ledPin12);
  97.       digitalWrite(ledPin12, !state);
  98.     }
  99.   }
  100. }


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ó
(#) SzilCsong válasza robis01 hozzászólására (») Máj 14, 2023 /
 
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();,,???
(#) SzilCsong válasza SzilCsong hozzászólására (») Máj 14, 2023 /
 
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.

RFID.jpg
    
(#) SzilCsong válasza SzilCsong hozzászólására (») Máj 14, 2023 /
 
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???
(#) vargham válasza SzilCsong hozzászólására (») Máj 14, 2023 /
 
Csináltam már ilyet. Hekkelésnél előfordul.
Ha nem tetszik, akkor vegyél olyan modult, ami neked eleve megfelel.
(#) SzilCsong válasza vargham hozzászólására (») Máj 14, 2023 /
 
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
(#) robis01 válasza SzilCsong hozzászólására (») 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?
(#) SzilCsong válasza robis01 hozzászólására (») Máj 14, 2023 /
 
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.
(#) robis01 válasza tonyoka hozzászólására (») Máj 14, 2023 /
 
Köszi hogy megosztottad a tudásod.
Ki fogom próbálni ha oda jutok.
(#) robis01 válasza SzilCsong hozzászólására (») Máj 14, 2023 /
 
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
(#) vargham válasza SzilCsong hozzászólására (») Máj 15, 2023 /
 
Nem ezen a modulon csináltam ilyet. A hekkelési technika ismerős.
(#) SzilCsong válasza vargham hozzászólására (») Máj 15, 2023 /
 
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!

  1. #include "SevSeg.h"
  2. SevSeg sevseg; //Instantiate a seven segment controller object
  3.  
  4. void setup() {
  5.   byte numDigits = 4;
  6.   byte digitPins[] = {2, 3, 4, 5};
  7.   byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
  8.   bool resistorsOnSegments = true; // 'false' means resistors are on digit pins
  9.   byte hardwareConfig = COMMON_CATHODE; // See README.md for options
  10.   bool updateWithDelays = false; // Default. Recommended
  11.   bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
  12.  
  13.   sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
  14.   sevseg.setBrightness(90);
  15. }
  16.  
  17.  
  18. void szimbolum1( int sz1)
  19. {
  20.   int digit = 0;
  21.   digit = random(0, 3);
  22.   sevseg.setSegmentsDigit(digit, 0x64);
  23.   digit--;
  24.   sz1=1;
  25.  return sz1;
  26. }
  27.  
  28. void szimbolum2(int sz2)
  29. {
  30.   int digit = 0;
  31.   digit = random(0, 3);
  32.   sevseg.setSegmentsDigit(digit, 0x63);
  33.   digit--;
  34.   sz2=2;
  35.   return sz2;
  36. }
  37.  
  38.  
  39. void loop() {
  40.   int sz1;
  41.   int sz2;
  42.   szimbolum1(sz1);
  43.   szimbolum2(sz2);
  44.  
  45. // itt hasonlítanám össze az egyes átadott azonosítokat sz1=sz2m stb.....
  46.  
  47.  
  48.   sevseg.refreshDisplay();
  49.   delay(100);
  50. }
A hozzászólás módosítva: Máj 15, 2023
(#) Massawa válasza sany hozzászólására (») 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.
(#) hadhazik hozzászólása Máj 15, 2023 /
 
heltec_lora_wifi_esp32 sender cod:

  1. #define boiler 23 // villanyra kapcsol,rel1
  2. #define gaz_kazan 17 // gázra kapcsol,rel2
  3. #include <OneWire.h>
  4. #include <DallasTemperature.h>
  5. #define ONE_WIRE_BUS 13
  6. OneWire oneWire(ONE_WIRE_BUS);
  7. DallasTemperature sensors(&oneWire);
  8. DeviceAddress D0 = { 0x28, 0x31, 0xBF, 0x29, 0x07, 0x00, 0x00, 0x7D }; // "T1"
  9. DeviceAddress D1 = { 0x28, 0x4F, 0x8E, 0x2A, 0x07, 0x00, 0x00, 0x37 }; // "T2"
  10. #include <Wire.h>
  11. const char* ssid     = "";
  12. const char* password = "";
  13. const char* ntpServer = "hu.pool.ntp.org";
  14. const long  gmtOffset_sec = 0;
  15. const int   daylightOffset_sec = 3600;
  16. #define RTC_ADDRESS 0x68
  17. #include <RtcDS3231.h>
  18. RtcDS3231<TwoWire> Rtc(Wire);
  19. // Convert normal decimal numbers to binary coded decimal
  20. byte decToBcd(byte val){
  21. return( (val/10*16) + (val%10) );
  22. }
  23.  
  24. // Convert binary coded decimal to normal decimal numbers
  25. byte bcdToDec(byte val){
  26. return( (val/16*10) + (val%16) );
  27. }
  28. #include <Arduino.h>
  29. #include "Wire.h"
  30. #include "oled.h"
  31. #include <WiFi.h>
  32. #include "time.h"
  33. #include <LoRa.h>
  34.  
  35. #define SCK     5    // GPIO5  -- SX1278's SCK
  36. #define MISO    19   // GPIO19 -- SX1278's MISO
  37. #define MOSI    27   // GPIO27 -- SX1278's MOSI
  38. #define SS      18   // GPIO18 -- SX1278's CS
  39. #define RST     14   // GPIO14 -- SX1278's RESET
  40. #define DI0     26   // GPIO26 -- SX1278's IRQ(Interrupt Request)
  41. #define BAND    433E6
  42. unsigned int state = 0;
  43. unsigned int counter = 0;
  44. String rssi = "RSSI --";
  45. String packSize = "--";
  46. String packet ;
  47. struct tm timeinfo;
  48. static char msg[20]; // character buffer
  49. OLED display = OLED(4, 15, 16, 0x3C, 128, 32, true); // SSD1306
  50. void szelep_vez ()
  51. //T1+T2 >41 II T1>25= a boilerben van melegvíz
  52. //rel2/pin17 villanyra kapcsol
  53. //T1+T2<41 II T1<25= gáz melegíti a vizet
  54. //rel1/pin23 gázra kapcsol
  55. {
  56.    sensors.requestTemperatures();
  57.  float T1 = sensors.getTempC(D0);
  58.  float T2 = sensors.getTempC(D1);
  59. if((T1+T2) > 41 || T1>25)
  60. {
  61.  display.begin();
  62.  display.clear();
  63.  display.draw_string(4, 8, "BOILER", OLED::DOUBLE_SIZE);
  64.  display.display();
  65.  digitalWrite(boiler, HIGH);
  66.  state = 1;
  67.  digitalWrite(gaz_kazan, LOW);
  68.  delay(5000);
  69. }
  70. else
  71. {
  72.  display.begin();
  73.  display.clear();
  74.  display.draw_string(4, 8, "GAZ_KAZAN", OLED::DOUBLE_SIZE);
  75.  display.display();
  76.  digitalWrite(gaz_kazan, HIGH);
  77.  state = 0;
  78.  digitalWrite(boiler, LOW);
  79.  delay(5000);
  80. }
  81. }
  82. void setup(){
  83.   pinMode(boiler, OUTPUT); //villanyra kapcsol
  84.   digitalWrite(boiler, LOW);
  85.   pinMode(gaz_kazan, OUTPUT); //gázra kapcsol
  86.   digitalWrite(gaz_kazan, LOW);
  87.   pinMode(16,OUTPUT);
  88.   pinMode(25,OUTPUT);
  89.   digitalWrite(16, LOW);    // set GPIO16 low to reset OLED
  90.   delay(50);
  91.   digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high
  92.  Serial.begin(115200);
  93.    while (!Serial);
  94.  
  95.   SPI.begin(SCK,MISO,MOSI,SS);
  96.   LoRa.setPins(SS,RST,DI0);
  97.   if (!LoRa.begin(433E6)) {
  98.     Serial.println("Starting LoRa failed!");
  99.     while (1);
  100.   }
  101.   Serial.println("init ok");
  102.  
  103.  Wire.begin();
  104.    Serial.setDebugOutput(true);
  105.   //setTime(&timeinfo); // Valamikor be kell állítani az órát...
  106.  Serial.print("Connecting to ");
  107.  Serial.print(ssid);
  108.  WiFi.begin(ssid, password);
  109.  while (WiFi.status() != WL_CONNECTED) {
  110.  delay(500);
  111.  Serial.print(".");
  112.  }
  113.   Serial.println("");
  114.   Serial.println("WiFi connected.");
  115.    // Init and get the time
  116.  
  117.   configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  118.   printLocalTime();
  119.  
  120.  Serial.println();
  121.  Serial.print("Connected! IP address: ");
  122.  Serial.println(WiFi.localIP());
  123.   //disconnect WiFi as it's no longer needed
  124.   WiFi.disconnect(true);
  125.   WiFi.mode(WIFI_OFF);
  126.  display.begin();
  127.  display.clear();
  128.  display.draw_string(4, 8, "RTC clock", OLED::DOUBLE_SIZE);
  129.  display.display();
  130.  
  131. //------- Initialize the Temperature measurement library--------------
  132. sensors.begin();
  133. sensors.setResolution(D0, 10); //T1
  134. sensors.setResolution(D1, 10); //T2
  135. // set the initial time here:
  136.  //DS3231 seconds, minutes, hours, day, date, month, year
  137. //setDS3231time(00,34,12,2,6,3,23);
  138. }
  139.  
  140. void loop(){
  141.  sensors.requestTemperatures();
  142.  float T1 = sensors.getTempC(D0);
  143.  float T2 = sensors.getTempC(D1);
  144.    Serial.print("Sending packet: ");
  145.   Serial.println(counter);
  146.    // send packet
  147.   LoRa.beginPacket();
  148.   LoRa.print(state);
  149.   LoRa.print("  ");
  150.   LoRa.print("HELLO");
  151.   LoRa.print(T1 );
  152.   LoRa.print("  " );
  153.   LoRa.print(T2 );
  154.   LoRa.print("  ");
  155.   LoRa.print(counter);
  156.   LoRa.endPacket();
  157.   counter++;
  158.   digitalWrite(25, HIGH);   // turn the LED on (HIGH is the voltage level)
  159.   delay(1000);                       // wait for a second
  160.   digitalWrite(25, LOW);    // turn the LED off by making the voltage LOW
  161.   delay(1000);  
  162.  getLocalTime(&timeinfo); // display time/date
  163.  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
  164.         RtcTemperature temp = Rtc.GetTemperature();
  165.         temp.Print(Serial);
  166.         // you may also get the temperature as a float and print it
  167.         // Serial.print(temp.AsFloatDegC());
  168.         Serial.println(" C ");
  169.  display.clear();
  170.  strftime (msg, 15, "%Y-%b-%d %a ", &timeinfo);
  171.  display.draw_string(16, 1, msg); // Display date
  172.  strftime (msg, 10, "%T ", &timeinfo); // Display time
  173.  display.draw_string(8, 12, msg, OLED::DOUBLE_SIZE);
  174.  display.display(); // Refresh screen
  175.  delay(3000);
  176.  display.clear();
  177.  display.setCursor(8,0);
  178.  display.println("T1= ");
  179.  display.setCursor(30,0);
  180.  display.println(T1);
  181.  display.setCursor(60, 0);
  182.  display.println(" C");
  183.  display.setCursor(8,12);
  184.  display.println("T2= ");
  185.  display.setCursor(30,12);
  186.  display.println(T2);
  187.  display.setCursor(60, 12);
  188.  display.println(" C");
  189.  display.display();
  190. Serial.print(sensors.getTempC(D0));
  191. Serial.println(" C");
  192. Serial.print(sensors.getTempC(D1));
  193. Serial.println(" C ");
  194. //printLocalTime(); // display the real-time clock data on the Serial Monitor,
  195. delay(1000); // every second
  196. szelep_vez();
  197. }
  198.  
  199. //--- Set RTC time/date ------------------------------------
  200. void setLocalTime(struct tm* time) {
  201.   struct tm timeinfo;
  202.  Wire.beginTransmission(RTC_ADDRESS);
  203.  Wire.write(0); // set register pointer to 00h
  204.  Wire.write(decToBcd(time->tm_sec)); // set seconds
  205.  Wire.write(decToBcd(time->tm_min)); // set minutes
  206.  Wire.write(decToBcd(time->tm_hour)); // set hours
  207.  Wire.write(time->tm_wday + 1); // set day of week (1=Sun, 7=Sat)
  208.  Wire.write(decToBcd(time->tm_mday)); // set date (1 to 31)
  209.  Wire.write(decToBcd(time->tm_mon) + 1); // set month
  210.  Wire.write(decToBcd(time->tm_year - 100)); // year from 2000 (0 to 99)
  211.  Wire.endTransmission();
  212. }
  213. //--- Read time/date from RTC ------------------------------
  214. void getTime(struct tm* time) {
  215.  Wire.beginTransmission(RTC_ADDRESS);
  216.  Wire.write(0); // a kiolvasás kezdőcímének beállítása
  217.  Wire.endTransmission(false);
  218.  Wire.requestFrom(RTC_ADDRESS, 7); // Hét bájt kiolvasása (time/date)
  219.  time->tm_sec = bcdToDec(Wire.read() & 0x7f); // Másodpercek (0-59)
  220.  time->tm_min = bcdToDec(Wire.read()); // Percek (0 - 59)
  221.  time->tm_hour = bcdToDec(Wire.read() & 0x3f); // Órák (24h kijelzéshez)
  222.  time->tm_wday = bcdToDec(Wire.read() - 1); // Hét napja (0 - 6)
  223.  time->tm_mday = bcdToDec(Wire.read()); // hónap napja (1 - 31)
  224.  time->tm_mon = bcdToDec(Wire.read() - 1); // hónap sorszáma (0 - 11)
  225.  time->tm_year = bcdToDec(Wire.read()) + 100; // 1900-tól eltelt évek
  226. }
  227. void printLocalTime(){
  228.   struct tm timeinfo;
  229.   if(!getLocalTime(&timeinfo)){
  230.     Serial.println("Failed to obtain time");
  231.     return;
  232.   }
  233.   Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
  234.   Serial.print("Day of week: ");
  235.   Serial.println(&timeinfo, "%A");
  236.   Serial.print("Month: ");
  237.   Serial.println(&timeinfo, "%B");
  238.   Serial.print("Day of Month: ");
  239.   Serial.println(&timeinfo, "%d");
  240.   Serial.print("Year: ");
  241.   Serial.println(&timeinfo, "%Y");
  242.   Serial.print("Hour: ");
  243.   Serial.println(&timeinfo, "%H");
  244.   Serial.print("Hour (12 hour format): ");
  245.   Serial.println(&timeinfo, "%I");
  246.   Serial.print("Minute: ");
  247.   Serial.println(&timeinfo, "%M");
  248.   Serial.print("Second: ");
  249.   Serial.println(&timeinfo, "%S");
  250.  
  251.   Serial.println("Time variables");
  252.   char timeHour[3];
  253.   strftime(timeHour,3, "%H", &timeinfo);
  254.   Serial.println(timeHour);
  255.   char timeWeekDay[10];
  256.   strftime(timeWeekDay,10, "%A", &timeinfo);
  257.   Serial.println(timeWeekDay);
  258.   Serial.println();
  259. }
  260. /*void setup_sntp() {
  261.  const char* ntpServer = "hu.pool.ntp.org"; // regionális NTP hálózat
  262.  const char* time_zone = "CET-1CEST,M3.5.0,M10.5.0/3"; // Europe/Budapest időzóna
  263.  configTzTime(time_zone, ntpServer); // Időzóna megadása
  264.  Serial.println("Connecting to sntp server");
  265.  while (!getLocalTime(&timeinfo)) {Serial.print(".");} // Pontosidő lekérése
  266.  setTime(&timeinfo); // A DS3231 RTC beállítása
  267.  Serial.println(" NTP connected");
  268.  Serial.println(&timeinfo, "NTP time: %A, %B %d %Y %H:%M:%S");
  269. }*/


LoRa32u4 receiver cod:
  1. #include <SPI.h>
  2. #include <LoRa.h>
  3.  
  4. unsigned int state;
  5.  
  6. //LoRa32u4 ports
  7. #define SS      8
  8. #define RST     4
  9. #define DI0     7
  10. #define BAND    433E6
  11.  
  12. void setup() {
  13.   Serial.begin(115200);
  14.  
  15.   pinMode(13, OUTPUT);    // fehér led sets the pin as output for relay
  16.   digitalWrite(13,HIGH);
  17.   //while (!Serial);        //if just the the basic function, must connect to a computer
  18.   delay(1000);
  19.  
  20.   SPI.begin();
  21.   LoRa.setPins(SS,RST,DI0);
  22.   Serial.println("LoRa Receiver");
  23.  
  24.   if (!LoRa.begin(433E6)) {
  25.     Serial.println("Starting LoRa failed!");
  26.     while (1);
  27.   }
  28.   Serial.println("LoRa Initial OK!");
  29. }
  30.  
  31.  
  32. /*----( LOOP: RUNS CONSTANTLY )----*/
  33. void loop() {
  34.    digitalWrite(13,LOW);
  35.   // try to parse packet
  36.   int packetSize = LoRa.parsePacket();
  37.   if (packetSize) {
  38.   // received a packet
  39.     Serial.print("Received packet :");
  40.   // read packet
  41.     while (LoRa.available()) {
  42.       Serial.print((char)LoRa.read());
  43.   }
  44.       // print RSSI of packet
  45.     Serial.print("' with RSSI ");
  46.     Serial.println(LoRa.packetRssi());  
  47.  int state =((char)LoRa.read());
  48.    if (state == 1)   //Melegvíz gázkazánból..
  49.       {
  50.       Serial.println("GAZ_KAZAN - TIMER ON");          
  51.       digitalWrite(13,HIGH);    //Időzítés be..
  52.       delay(500);
  53.       }
  54.            /* if (state == 1);  //Melegvíz boilerből..
  55.       {
  56.         Serial.println("BOILER");
  57.         digitalWrite(13,LOW);   //Időzítő ki..
  58.         delay(3000);
  59.       }*/
  60.   }
  61. }
  62. //Serial print
  63. // Received packet :1  HELLO  34.25  17.00  7056' with RSSI -79
  64. //GAZ_KAZAN - TIMER ON
  65. //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.
(#) sany válasza Massawa hozzászólására (») Máj 15, 2023 /
 
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:

  1. Custom display setting
  2.  
  3. // Set the segments for every digit on the display
  4. uint8_t segs[4] = {0, 0x5B, 0x6D, 0x63};
  5. sevseg.setSegments(segs);
  6.  
  7. // Set the segments for a single digit. Set digit 3 to 0x63.
  8. 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
(#) Massawa válasza sany hozzászólására (») 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.
(#) sany válasza Massawa hozzászólására (») Máj 15, 2023 /
 
Valóban lehet a SevSeg nem a legjobb a feladathoz. Megpróbálom tömbökkel.
(#) robis01 válasza SzilCsong hozzászólására (») Máj 15, 2023 /
 
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.
Következő: »»   796 / 845
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem