- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Motorola Edge 40 - jó bőr
- Samsung Galaxy A56 - megbízható középszerűség
- Milyen okostelefont vegyek?
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Netfone
- Honor 200 Pro - mobilportré
- VoLTE/VoWiFi
- Yettel topik
-
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
-
Tomika86
senior tag
Ha gombot rakok a mentésre akkor ezzel megtudom oldani?
Nextion mentés gomb megnyomási eseménynél:
print t0.txt
print "mentes#"Arduinoban pedig ez:
if (Serial.available())
{
String indata = Serial.readStringUntil('#');
if (indata.indexOf("mentes") > -1)
{
byte position_ = indata.indexOf("mentes");
arduino_adat = indata.substring(0, position_).toInt();
}
}
Annyi, hogy nem szám típusú a beviteli mező, hanem szöveg. De numerikus billentyűzet lenne megjelenítve.
Köszönöm!
-
Tomika86
senior tag
Sziasztok!
Segítséget szeretnék kérni, mert nem tudom hogy "szokás" ezt arduinónál.
Van pár adat ami jelenleg konstansként van kezelve, de szeretném ha Nextion kijelzőn lehetne módosítani. Jelenleg 2db float és 1db int értékről lenne szó, aminek van beviteli mezője a kijelzőn.
Ha beírok egy számot a megfelelő mezőbe, azt hogy tudom átvinni a programban egy változóba úgy, hogy ne legyen gomb hozzá ami elindítja az érték "átmozgatását", hanem beírom és megváltozik?
Amikor kikapcsolom az arduinot akkor a már meglévő EEPROM írás blokkal a változók értékeit lementem. Bekapcsoláskor a setup részben kiolvasom az EEPROM-ból az elmentett értéket.Köszönöm a segítséget!
-
Tomika86
senior tag
válasz
Tomika86 #15183 üzenetére
Mit jelentenek a következők:
-String indata = Serial.readStringUntil('#');
Addig olvas amíg '#' karakter nem érkezik?
-if (indata.indexOf("on") > -1)
Itt gondolom Ha a beérkezett string az on, mi a > -1 ?
- illetve az utolsó kettő sor érdekelnebyte position_ = indata.indexOf("start");
timeValue = indata.substring(0, position_).toInt();
// Soros porton érkező adat figyelése ha sorosport elérhető
if (Serial.available())
{
String indata = Serial.readStringUntil('#');
// Ha "on" string érkezik
if (indata.indexOf("on") > -1)
{
digitalWrite(output_pin, HIGH); // Kimenet bekapcsolása
}
// Ha "off" string érkezik
else if (indata.indexOf("off") > -1)
{
digitalWrite(output_pin, LOW); // Kimenet kikapcsolása
}
// Ha "start" string érkezik
else if (indata.indexOf("start") > -1)
{
byte position_ = indata.indexOf("start");
timeValue = indata.substring(0, position_).toInt();
}
}
Köszönöm!
-
Tomika86
senior tag
1. Touch gomb a HMI felületen Touch press eventnél: print "on#"
Touch release eventnél: print "off#"
2. Utolsó 2 sorban egy érték beolvasása történik, number mezőből Gomb megnyomására ahol print "start#" kód van az eventnélEzeket lehet ennél egyszerűbben is csinálni, vagy így kell library nélkül adatot olvasni a soros portról?
-
Tomika86
senior tag
válasz
WinZol #15176 üzenetére
Még sehonnét,debug van még csak.
Alin van 20-25eft körül ez 35-40eft lenne. Vám az attól függ posta vagy futár.
Ali-n nem hiszem hogy eredetiek lennének, piros panel. Hestore oldalán kék paneles.Tény és való a 7"os nem olcsó a Magyar árával már.
A te 4,3"os kijelződ annyira nem vészes.
Egyébként nézegettem mas 7"os kijelzőket is de amit uC vezérel és csak soros porton kommunikál, mindegyik drágább a Nextionnál
-
Tomika86
senior tag
Akkor nem jól gondoltam.
Nekem a double integer van plc oldalról az 32bites egész 😀
Akkor long lesz nekem a jó, ezeket nem próbáltam, csak a double-t és volt tizedes pont 🙂Ja csak szeretem megérteni amit csinálok, azért mondtam. Meg mondjuk ez a belső eepromra van, de legalább ki tudtam próbálni.
Wear leveling az lenne mint ssd esetében, hogy összevissza rakja az adatokat? -
Tomika86
senior tag
Ez így double számmal miért nem működik? Floating működik.Nem kellene a tizedes nekem. 16 vagy 32bites egész szám elég lenne
Köszönöm
void EEPROM_writeDouble(int ee, double value) { byte* p = (byte*)(void*)&value; for (int i = 0; i < sizeof(value); i++) EEPROM.write(ee++, *p++); } double EEPROM_readDouble(int ee) { double value = 0; byte* p = (byte*)(void*)&value; for (int i = 0; i < sizeof(value); i++) *p++ = EEPROM.read(ee++); return value; } -
Tomika86
senior tag
Akkor legyen 11V 🙂 másik 7805 van neki.
Még küzdök a kiolvasással, nem értem hogyan lehet kiolvasni ha nem tudom mennyi byte-ot írtam be előzőleg, tehát beírtam a 0val kezdődő címre 5 charactert, mert annyi számjegyből állt. Ezt elmentem.
Következő bekapcsolásnál honnét tudom, hogy a 0-val kezdődő címen 5byte van egymás után?
-
Tomika86
senior tag
Akkor igazából van egy megoldásom.
Az akku feszültségét úgy is mérem, gyújtás kábel lesz csak használva. Ha az akku feszültsége egy bizonyos feszültség alá csökken akkor mentek egyet. 6,5V a minimum feszültsége a 7805-nek, úgyhogy 7V alá csökkenve menthet.
Így akku se kell, 7805 elött ott lesz egy pufferkondenzátor, annyi elég szerintem -
Tomika86
senior tag
Üzemórát és percet szeretnék menteni, de nem 10ms-onként. 5perces intervallum van jelenleg megadva a blokkra, csak még nincs benne a megfelelő függvény.
Olyan lehetőség van esetleg, hogy kikapcsoláskor mentsen? (Ami nálam a Mentes_gomb, az igazából az esemény lenne amire ment, ez csak próba)Jelenleg ez a kettő adat van, de lenne még pár érték amit HMI-ről módosíthatóra szeretnék tenni, ezeket is menteni kellene. De csak akkor lenne mentve ha változtatom az értékét.
ui.: Jó lenne itt is egy kis retentív memória terület mint PLC-k esetében, ami nem felejt
-
Tomika86
senior tag
Ez így?
#include <Wire.h>
#define xAddr 0x50 // külső EEPROM címe
unsigned int eepromAdd = 0; // Adatmentés címe az EEPROM-ban
float adat = 123456; // Adat próbaként
String ertek_1; // Adat átalakítva
int Mentes_gomb = 5; // Mentés gombnyomásra
void setup()
{
pinMode(Mentes_gomb, INPUT);
Serial.begin(9600);
Wire.begin();
}
void loop()
{
// Int konvertálása stringbe és EEPROM-ba írása
if(digitalRead(Mentes_gomb))
{
ertek_1 = String(adat, 0);
int hossz_1 = ertek_1.length();
// Átalakított string írása:
for(byte i = 0; i <= hossz_1; i++) // i ciklusváltozó a string hosszáig lépteti a címet
writeEEPROM(xAddr, eepromAdd+i, ertek_1[i]); // xAddr: Eszköz címe, eepromAdd+i: Írási cím + kezdőcím, ertek_1[i]: sztringnek a karakterei sorban
}
}
// Egy byte írása
void writeEEPROM(int devAddr, unsigned int eeAddr, byte data )
{
Wire.beginTransmission(devAddr);
Wire.write((byte)eeAddr >> 8); // Legnagyobb helyiértékű byte írása, LSB-t jobbra shifteljük, hogy megszabaduljunk tőle
Wire.write((byte)eeAddr & 0xFF); // Legkisebb helyiértékű byte írása, LSB kimaszkolása bitekkel ÉS 0-kkal
Wire.write(data);
Wire.endTransmission();
delay(5); //5ms várakozás
}
-
Tomika86
senior tag
Még én se, de ez valahogy számomra megfogható volt, hogy string, ami i darab characterből áll, amik pont byte-ok és ezeket tudom írni.
strcat nem tudom miért kell.
Annyira nagy gyakorlatom nincs még a C programozásban, 2 hete kezdtem el az arduinot
Igazából int és float számokat kellene megadott címre menteni, nem kell automata címzéssel.Köszönöm!
-
Tomika86
senior tag
válasz
Tomika86 #15141 üzenetére
Ha jól gondolom akkor
- a float értéket átalakítja character tömbre
- összefűzi stringbe
- megnézi a hosszát és ez alapján byte-onként írjaKiolvasásnál
- azt nem értem, hogy amikor kiolvasok akkor miért a "chrFloat" hossza alapján ?
ez alapján tudjuk, hogy mennyit írtunk, ugyanennyit olvasunk vissza, de mi van akkor ha nem tudjuk mennyi byte-ot kell visszaolvasni (tehát mitől meddig tart egy összetartozó érték) -
Tomika86
senior tag
Ezt a példaprogramot kommenteztem be:
#include <Wire.h>
#define xAddr 0x50 //külső EEPROM cím definiálása
byte i;
char buffer[10];
char newStr[10];
unsigned int eepromAdd = 0;
float adat = 123.321;
void setup()
{
Serial.begin(9600);
Wire.begin();
}
void loop()
{
//Float konvertálása stringbe és EEPROM-ba írása
char chrFloat[] = "";; // string létrehozása
char buffer[10]; // character tömb létrehozása
dtostrf(adat, 6, 4, buffer); // 6 szélesség, 4 a precizitás; adat float átalakítása a buffer változóba
strcat( chrFloat, buffer); // buffer character tömb összefűzése stringbe?
// Átalakított string írása:
for(byte i=0; i<=strlen(chrFloat); i++) // i ciklusváltozó a string hosszáig
writeEEPROM(xAddr, eepromAdd+i, chrFloat[i]); // 1 byte írása a
// Adat kiolvasása és átalakítása float-ra:
for(i=0; i<=strlen(chrFloat); i++)
newStr[i] = readEEPROM(xAddr, eepromAdd + i); // 1 byte olvasása
newStr[i] = 0;
Serial.println(atof(newStr),2); // ASCII konvertálása float-ba 2 tizedessel
}
// Egy byte írása
void writeEEPROM(int devAddr, unsigned int eeAddr, byte data )
{
Wire.beginTransmission(devAddr);
Wire.write((byte)eeAddr >> 8); // Legnagyobb helyiértékű byte írása, LSB-t jobbra shifteljük, hogy megszabaduljunk tőle
Wire.write((byte)eeAddr & 0xFF); // Legkisebb helyiértékű byte írása, LSB kimaszkolása bitekkel ÉS 0-kkal
Wire.write(data);
Wire.endTransmission();
delay(5); //5ms várakozás
}
// Egy byte olvasása
byte readEEPROM(int devAddr, unsigned int eeAddr )
{
byte readByte = 0;
Wire.beginTransmission(devAddr);
Wire.write((byte)eeAddr >> 8); // A legnagyobb helyiértékű byte írása
Wire.write((byte)eeAddr & 0xFF); // A legkisebb helyiértékű byte írása
Wire.endTransmission();
Wire.requestFrom(devAddr,1);
if (Wire.available())
readByte = Wire.read();
return readByte;
}
-
Tomika86
senior tag
Sziasztok!
EEPROM írás és olvasásos kérdésem lenne.
Mega2560 esetén van 4096 byte beépített, nem ezt szeretném használni, hanem külső 24LCxx EEPROM-ot I2C buszon.
Kerestem, de nem igazán találtam(vagy nem tudtam hogy az) olyan példaprogramot ahol több változó van elmentve a megadott címre (int változók).Ha egy memória címen volt adat akkor újabb írással teljesen felülíródik, vagy törölni kell elötte?
Köszönöm! -
-
Tomika86
senior tag
A következő gondolatom az 5v előállítására, javítsatok ha valami máshogy kellene:
Akkufeszültség - biztosíték - dióda nyitóirányban - 47uH 3A induktivitás - 4700uF elektrolit kondenzátor - 100nF kerámia kondenzátor - 7808 stab - 100nF kerámia kondenzátor - 7805 stabilizátor - 100nF kerámia kondenzátor - 4700uF elektrolit kondenzátor - 5v kimenetRemélem rajz nélkül is érthető
Köszönöm
-
Tomika86
senior tag
válasz
gyapo11 #15080 üzenetére
1uF elko jó lehet ?
A tápegységét még nem készítettem el ami az 5V-ot állítja elő.
Igazából csak az akksi feszültség amin keresztül beszedhet zavart, illetve a tápegysége.
Az 5,1Vos zener levágja a feszültség tüskéket elvileg, illetve még ott lesz a kondenzátor.
Vagy rosszul gondolom?Köszönöm!
-
Tomika86
senior tag
Analóg bemenetekre szeretnék majd védelmet építeni.
Például:
- Nyomásszenzorok 5vról fognak működni, 0-5v kimenete van. A szenzorok az autó elektronikájától különállóak lesznek.
- Akkumulátorra tennék feszültségosztót(2db ellenállás Mohm nagyságban) , 15v-ot osztaná 5v-ra. 2db 5,1v zener dióda az 5v-bemenet-gnd közé.Általánosítva az arduino analóg bemenetei és a gnd közé 100nf kerámikondenzátor, vagy milyen kondenzátort kell tennem?
Digitális bemenetek:
- olajnyomás kapcsoló: ez gndt kapcsol, itt 10kohm felhúzóellenállás a bemenet és 5v közé elég? Alapból 5v a bemeneten, kapcsoláskor 0v
- 2db Ds18b20 itt ahogy most próbálom elég 1db felhúzó ellenállás a kettő szenzorhoz?
- 2db digitális hall érzékelő, beépített felhúzó ellenállással, itt gondolom nem kell áramkörileg semmi?Köszönöm a segítséget
-
Tomika86
senior tag
Ha már Ali,
Van Nextion 7" kijelző az intelligens P típus is 20-22eft-ért. Erre a 27% Áfa és 5000ft vámeljárás jön, ez 35000ft kb?
Eu raktárast nem találtam...
Mennyire megbízhatóak vajon? Itthon a sima is 60e ft kb.
Kínai a kijelző, ezt is hamisítják, miért ilyen olcsó? -
-
Tomika86
senior tag
Sziasztok
Nextion Basic kijelzőnél van a gauge mint mutató. Ezt szeretném 2db nyomásmérőnél felhasználni.
A nextion mutatónál "9" óránál van a 0fok és megy körbe 360fokot.
A nyomásmérő órán 270foknál van a 0 érték, 180foknál a végérték óramutató járásával megegyezően.Függvényt kell erre írni ami ezt lekezeli?
A 0pontot nem tudom állítani nextionban, hogy ne onnét kezdjen.Köszönöm
-
Tomika86
senior tag
Na majd jövök ha megjöttek az alkatrészek 😀
-
Tomika86
senior tag
Ezt csak olvastam, hogy lassú arduinon.
Kijelzőt még csak szimulálom, Nextion editor debug-al.
Kijelzőhöz nem használok külön könyvtárat, sima serial.print amivel küldöm az adatokat.Azzal, hogy a programrészeket függvényekbe írtam és ezeket különböző paraméterekkel hívom meg nem csináltam rosszat igaz?
Köszi
-
Tomika86
senior tag
Sziasztok!
Arduino mega 2560ra írok egy programot ami 4db analóg értéket, 2db ds18b20 hőmérsékletet illetve sebességértéket és fordulatszám értéket jelenít meg egy 7" Nextion kijelzőn.
Még csak az analóg értékeket és a 2db hőfok kijelzésnél járok, de úgy érzem lassú az egész.
Az értékek lebegőpontosan vannak számolva és dtostrf paranccsal konvertálva stringbe ami elküldve a nextion text mezőjében jelenik meg 1tized pontosan.Olvastam hogy float számolást ne erőltessük arduinonál, de akkor máshogyan hogyan csináljam a tizedest.
Köszönöm a segítséget!
-
Tomika86
senior tag
Na akkor most leírom mit szeretnék pontosan.
Van ez a program: [link]
Ami annyit csinál hogy 4 analóg bemenetet kirajzol. Van exe fájl is.Van ez : [link]
Ez pedig 4 analóg bemenet mutat így: [link]Annyit szeretnék hogy egy alkalmazásom legyen amin egy kisebb részen legyen az első programrész, ahol oszlopszerűen mutatja+értéket ír (átlagolni nem kell, középérték nem kell), ugyanezen alkalmazáson pedig legyen egy rész ahol a 4 bemenet egy ábrán jelenjen meg(hogy lehessen összehasonlítani), meg 4 külön pici ablak ahol egyenként van a 4 bemenet. Érték ide nem kell.
Valahogy így gondoltam: [link]
Motorkerékpár fojtószelep szinkronizálása lenne 4db analóg bemeneten.Köszönöm előre is!
-
Tomika86
senior tag
válasz
vargalex #5668 üzenetére
Bocsi, a válasz nem erről szólt hanem 4ből 1be és HEX fájlokkal.
Délután feltöltöm a csomagokat.
Az egyik program 4 analóg csatornát rajzol oszcilloszkópként. A másik program 4 analóg bemenetet ábrázol értékkel és függőleges oszlopokkal.
Ezt szeretném 1 programba rakni(.exe programba) -
Tomika86
senior tag
válasz
Gergosz2 #5664 üzenetére
Helló!
Nem teljesen így van. Van kettő Arduino .ino fájlom amit össze kellene fűzni.
Illetve van kettő programom C-ben írva, forráskóddal amit Visual Studioban lehet szerkeszteni(az egyik .exe-ben is futtatható már, egy oszcilloszkóp ami 4 analóg bemenetet rajzol), ezt a kettőt is össze kellene rakni 1 programmá.
-
Tomika86
senior tag
Sziasztok!
Van kettő szoftverem, aminek megvan a forráskódja C-ben. Illetve van kettő arduinoba töltendő program is.
Lehet belőlük egyet készíteni? A szoftverére gondolok, hogy egy képernyőn legyen a kettő, az egyikből el is hagyható a nagyja.Köszönöm a segítséget!
Új hozzászólás Aktív témák
Hirdetés
- DELL PowerEdge R630 rack szerver - 2xE5-2650v3 (20 mag / 40 szál, 2.3/3.0GHz), 32GB RAM, 55992Ft+ÁFA
- AKCIÓ! Gigabyte H610M i5 12400F 16GB DDR4 512GB SSD RX 6700XT 12GB Zalman S2 TG Seasonic 650W
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Csere-Beszámítás! Asztali számítógép PC Játékra! I5 12400F / RTX 3070 / 32GB DDR4 / 500GB SSD
- BESZÁMÍTÁS! Apple MacBook Pro 14 M4 16GB RAM 512GB SSD garanciával hibátlan működéssel
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest