- Milyen asztali (teljes vagy fél-) gépet vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Bluetooth hangszórók
- Azonnali fotós kérdések órája
- Raspberry Pi
- Szünetmentes tápegységek (UPS)
- Nem indul és mi a baja a gépemnek topik
- AMD Navi Radeon™ RX 9xxx sorozat
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
-
PROHARDVER!
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
-
vegyszer
addikt
Egy kérdés. Azt a pin méretet, amit az arduino tüskesora használ, hogy hívják szép nevén?
Lehet ilyen anya/apa csatlakozót házilag feltenni egy kábelre? Mert gondolom nem egy rakétatudomány, ha tudja az ember a mikéntjét. -
dew28
aktív tag
-
vegyszer
addikt
De a WiFi access point teszten létre Jon új WiFi.
Az általam linkelt kóddal nem. Roszzul lenne benne valami megadva?Próbáltam összenézni a példa és a kódom WiFi-re vonatkozó részét. Teljesen máshogy van deklarálva, megadva. De ha azt átemelem, a fordító hibára fut.
Ennek a kódnak van egy előzménye. Abban soros porton megy ki az infó nem teló, hanem PC számára. De azzal se jutok előrébb.
Na most érzem, hogy el kell mélyedni sok olyanban, amit nem terveztem eredetileg.
-
vegyszer
addikt
Sziasztok!
Úgy néz ki, hogy sikerült felülnöm a szopórollerre.
A modul, amim lett et: NodeMcu LoLin V3, ESP8266MOd, ESP-12E
Gyenge 3 óra alatt sikerült elérni, hogy a PC lássa.
Ismeretlen USB-s eszköz volt. Majd egyszer sikerült találni egy kb 300kb-os driver pakkot hozzá.
Azzal megy. De a fordítás és a feltöltés sokkal lassabb, mint az Uno esetén.
A szélesség miatt az encoder kábeleit "a nyák alatt" elvezetve csatlakoztattam. De érdekes módon az a kód, ami az Uno esetén működött, átállítva eme eszközre semmit nem tett, csak kérdőjelek írt ki a soros port monitoron.
Hajnali fél ötig szendevtem vél, de nem értem...Ahogy, azt se, hogy ha a Blynk példát töltöm rá, villog, ha az accesspointost, csinál WiFi-t. De az általam linkelt kód nem hozza létre a WiFi-t...
Én meg csak azt hittem, hogy megvan a hw, megvan a kód, megvan a telón az app, és csak össze kell dugni. -
vegyszer
addikt
-
válasz
vegyszer #15283 üzenetére
A Vin lesz az 5V, a képen nem látok Vusb-t, de ha nálad úgy van, akkor az lesz.
A lábak szabványos 0.1" távolságra vannak, ami kompatibilis a breadboardokkal, próbanyákokkal is. Esetleg egy ilyenre fel tudod forrasztani direktben is, vagy veszel hozzá tüskesor aljzatot, és abba tenni, hogy javítható legyen. -
vegyszer
addikt
Sziasztok!
Megjött a két enkóderem a projekthez.
Addig dúrtam a netet míg meg nem leltem egy kódot. Lásd lent
Jól értem, hogy ez egy ESP8266WiFi modulra feltöltve egyből a telón futó skysafari app számára formázva küldi tovább az adatokat WiFi-n?
Nekem csak annyi a dolgom, hogy a két enkódert a 4,5 illetve 14, 12 lábra kössem egy 5V illetve GND mellett, és már csak ellenőrizni kell, hogy a forgásirányok jók-e?
Az enkóderek jelét, hogy pl 8000 jel/360° már az appban állítom be. Maga az app valami ilyesmi típusú jelet kap:
+01234<TAB>-00045<CR>De nézegetve a ESP8266 lábait, nem találok 5V-os lábat.
Ellenben van egy VUSB, ez 5V lenne?
Valamint 12, és 14-es lába sincs. Csak D0-8, de GPIO van 16-ig. Ez lenne az?
Na itt kicsit elbizonytalanodtam.És a kód:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <Encoder.h>
Encoder encoder0(5, 4);
Encoder encoder1(14, 12);
int inByte;
long encoder0Pos = 0;
long encoder1Pos = 0;
// Start a TCP Server on port 9876
WiFiServer server(9876);
WiFiClient client;
void setup()
{
// Set unique name of AP
uint8_t mac[WL_MAC_ADDR_LENGTH];
WiFi.softAPmacAddress(mac);
String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
macID.toUpperCase();
String AP_NameString = "ESP8266DSC_" + macID;
char AP_NameChar[AP_NameString.length() + 1];
memset(AP_NameChar, 0, AP_NameString.length() + 1);
for (int i=0; i<AP_NameString.length(); i++)
AP_NameChar[i] = AP_NameString.charAt(i);
// DONE
boolean result = WiFi.softAP(AP_NameChar, "stargazing");
if(result == true)
{
// Start the TCP server
server.begin();
pinMode(D4, OUTPUT);
digitalWrite(D4, LOW);
}
ESP.wdtDisable();
ESP.wdtEnable(WDTO_8S);
delay(100);
}
void loop()
{
if(!client.connected()) { // if client not connected
client = server.available(); // wait for it to connect
} else {
if(client.available()) {
inByte = (uint8_t)client.read(); // read char from client
if (inByte == 81) //ascii for "Q"
{
encoder0Pos = encoder0.read();
encoder1Pos = encoder1.read();
printEncoderValue(encoder0Pos);
client.print("\t");
printEncoderValue(encoder1Pos);
client.print("\r");
}
}
}
ESP.wdtFeed();
delay(50);
}
void printEncoderValue(long val)
{
unsigned long aval;
if (val < 0)
{
client.print("-");
}
else
{
client.print("+");
}
aval = abs(val);
if (aval < 10)
{
client.print("0000");
}
else if (aval < 100)
{
client.print("000");
}
else if (aval < 1000)
{
client.print("00");
}
else if (aval < 10000)
{
client.print("0");
}
client.print(aval);
}Biztosan valami nem kerek, de lehet, hogy csak nálam.
Nyissátok fel kérlek vak (és igen kezdő) szemem
Illetve a ESP8266WiFi lábkiosztási távolságra egyezik az Arduino nanoéval?
Mert akkor fottasztás helyett lehet, hogy egy
Arduino NANO Screw Terminal Expansion Board típusú ízét keresnék. -
Janos250
őstag
Köszi!
Hát, erről le kell mondanom :-(
Egyébként a type-ot se érem el.
Pl. ugyanebben a fájlban van egy
typedef struct {
bool permanent;
vfs_index_t vfs_index;
local_fd_t local_fd;
} fd_table_t;Próbaként ezzel próbáltam deklarálni, de azt írja ki, hogy:
'fd_table_t' does not name a type
Includolni nem lehet, akkor hogyan lehetne megmondani, hogy hol keresse?
Az idf-ben megvan, tudom, mik vannak benne, a doksikban
- nagyjából - az is megvan, mi micsoda, de nem tudom elérni.
Bár nagyjából mindegy is, hogy a type elérhető-e, ha a változókat nem tudom elérni, mert azok mind static-ok, ez már csak a kíváncsiság. -
válasz
Janos250 #15280 üzenetére
A nem direktbe úgy értettem, hogy akkor csak az adott c/cpp fájlban levő függvények érik el, tehát ha neked egy .a fájlod van, amiben van egy "getter" arra a változóra, akkor azon keresztül. Ha nem static, akkor egy globál változó bárhonnan elérhető, ha előtte deklarálod externként a saját c/cpp-dben.
-
-
Janos250
őstag
El tudom-e érni valahogy programból a .a típusú fájlban lévő dolgokat?
Pl:
Biztosan tudom, hogy a libvfs.a -ban benne vannak a
static vfs_entry_t* s_vfs[VFS_MAX_COUNT]
és a
static size_t s_vfs_count
változók, amiket használ is a program.
Ki tudom-e a programból íratni ezeknek az értékeit?
Ja, és ESP32 , Arduino IDE -
Janos250
őstag
válasz
vegyszer #15270 üzenetére
Ha meg 8266 kell, az meg 1600 Ft, szintén postával helybe szállítva két héten belül:
https://www.banggood.com/Geekcreit-Wireless-NodeMcu-Lua-CH340G-V3-Based-ESP8266-WIFI-Internet-of-Things-IOT-Development-Module-p-1420166.html?cur_warehouse=CN -
Janos250
őstag
válasz
vegyszer #15270 üzenetére
Ha nem nagyon sürgős, 2500 Ft postával együtt, és két héten belül (néha gyorsabban) helybe viszi a postás, vagy a futár. És ESP32, nem 8266, ami még a továbbiakban jól jöhet, hogy erősebb!
https://www.banggood.com/Geekcreit-ESP32-WiFi+bluetooth-Development-Board-Ultra-Low-Power-Consumption-Dual-Cores-Pins-Unsoldered-p-1214159.html?cur_warehouse=CN -
vegyszer
addikt
Ez a ESP8266 szerinted jó lesz nekem?
Ahogy nézem a WiFi adott, az elég nekem.
Ilyet, vagy hasonlót melyik pesti/szolnoki boltokban érdemes keresni? -
válasz
Janos250 #15264 üzenetére
Az a gond, hogy a cpp-k külön objektek lesznek, így a header guard erre nem jó, mivel itt a fileKezeles2021maj02LibHibakeresesProba01-ben és a Device2VirtualFileSystem-ben is lesz egy acharCounter ojjektum.
Megoldás: egyik cpp-ben vagy ino-ban definiálod a globál változót, és a többi fájlban extern-nel deklarálod.
-
válasz
vegyszer #15263 üzenetére
Szia! Üdv itt. 👍
Alig találtam meg a kérdést a hosszú szövegben."Egyáltalán jól értem, hogy az a kód, ami egy únón elfut, egy ilyen ESP32 vagy hasonlón is elmegy egy minimális fordítási beállítás után?"
Igen, az UNO-ra megírt kódok jellemzően változtatás nélkül fordíthatóak a többi lapra. A legtöbb általános arduino kód elfut az összes arduino-ba illesztett lapon, ha valami mégsem, az valamilyen alacsony szintű módon megírt, vagy hardver-specifikus kód, pl. megszakítás vagy flash tároló használat.
Ha wifit szeretnél használni, akkor a nano board-ról lebeszélnélek, mert úgyis kell hozzá egy esp, de akkor már a programot is érdemes azon futtatni.
Ha az encoderek jele 5V-os, akkor ESP8266 lesz a te embered, mert ugyan a lap maga 3,3V-os, de az ESP32-vel ellentétben a kimenetei 5V toleránsak, így szintillesztés nélkül rá tudod kötni az encodereket.
-
Janos250
őstag
A guta megüt!
Tud valaki segíteni, mert én nem látom a hibát.Includolva van egy .h fájl, ott van a .cpp is.
A .cpp elején természetesen includolva van a .h, ahogy az a nagy könyvben meg van írva.
A .h elején ott van az
#ifndef
#define
és a végén az
#endif
, de valahogy ezeket nem látja, mert a .cpp-ben újra includolni akarja a .h-t, és emiatt újradefiniálást ír hibának.
Nem vagyok részeg, de nem látom a hibát.
A programok:fileKezeles2021maj02LibHibakeresesProba01.ino
#include "Device2VirtualFileSystem.h" ;
void setup() {
} ;
void loop() {
} ;
/*
Ezt írja hibának:
C:\Users\user\AppData\Local\Temp\arduino_build_664522\sketch\
fileKezeles2021maj02LibHibakeresesProba01.ino.cpp.o:
(.bss.acharCounter+0x0): multiple definition of `acharCounter'
C:\Users\user\AppData\Local\Temp\arduino_build_664522\sketch\
Device2VirtualFileSystem.cpp.o:(.bss.acharCounter+0x0):
first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Hiba a(z) ESP32 Dev Module alaplapra fordításra.
*/
Ezek a fájlok:
A Device2VirtualFileSystem.h fájl tartalma:
#ifndef Device2VFS_h
#define Device2VFS_h
#include <Arduino.h>
uint8_t acharCounter ;
#endif
A Device2VirtualFileSystem.cpp fájl tartalma összesen ennyi:
#include "Device2VirtualFileSystem.h"
Látja valaki, mi a hiba?
Kösz! -
vegyszer
addikt
Szervusztok!
Az az igazság, hogy én veletek ellentétben fordítva ülök a lovon. Nem programozni szerettem volna megtanulni (az 25 évvel ezelőtt elriasztott akkor), hanem találtam egy problémát, amire megoldást is találtam. Csak az ára nem tetszett.
A feladat az, hogy egy vízszintes, és egy függőleges tengely mentén való elfordulást nagy pontossággal mérni lehessen.
Ez egy távcső kiegészítő család. Magát az adatot Bluetooth / WiFi segedelmével egy mobilon futó app kielemzve megmodja, hogy merre kell a távcsövet löködni a kívánt zobjektum megtalálásáhozUrasabb megoldás is létezik, hogyha ezt esetleg léptető motorral teszi, és követi is az égbolt látszólagos elmozdulását. Ezt hívj a csillagászati szakzsargon GoTo-nak, az előbbit push to GoTo-nak.
(ha az első feladat összejön, egy update két motor+ vezérlő után még szóba jöhet)Az egyik számomra legszimpatikusabb megoldás a DobsonDream8
Addig addig b@szta az agyam, hogy a két encoder-t meg is rendeltem. Azért, mert külön adja a muksó a vezérlő dobozt.
Igenám, de ez bő 100$. Nézve a dolog lényegét, egyre jobban kivilágosodott számomra, hogy ezt gyakorlatilag egy Arduino nano, vagy ESP32 vezérlő meg tudja tenni (hisz ő natív bt/WiFi kapcsolatot is támogat).
Egyáltalán jól értem, hogy az a kód, ami egy únón elfut, egy ilyen ESP32 vagy hasonlón is elmegy egy minimális fordítási beállítás után?
Számos hasonló projekt is van, ami 3D-ben nyomtatott alkatrészekkel vitelezi ezt ki.Így első körben egy uno bordot találtam itthon olcsón. A két OMRON E6B2-CWZ6C Rotary Encoder 2000P/R elvileg az országban van már. Nézegettem, hogy ez a 2000 jel/ciklus csatornánként értendő, azaz egy 360° os fordulat 8000 jelre bomlik, ez bőven elég a célra.
A végleges vezérlő még kiválasztás alatt van. Alapvetően nekem a DC táppal megtámogatható nano bordok tetszenek. Majd látom, hogy a végére mi is lesz belőle.Egyenlőre tervezetek
És valószínűleg kérdezni is fogok.Egyenlőre az uno Morse kódolva ki tudja titititátá-zni a nevem. Innen még van hova fejlődni...
-
And
veterán
válasz
Tomika86 #15246 üzenetére
Azt lenne jó látni (pl. egy terminálprogrammal), hogy mennyi adatot küld valósan ilyenkor az MCU. Nem tudom, mennyi attribútumot lehet megadni egy Xfloat-hoz, de jó sok van neki, és ha több ilyet egyenkénti parancsként leküld az arduino, akkor bizony egy valag töltelékadat lesz a kommunikációban. Mondjuk a Text-nek is van elég tulajdonsága, bár nem annyi, mint az Xfloat-nak.
A nyers adatként szükséges 1..2 byte-hoz képest minden más módszer terjengős. -
biker
nagyúr
ezen dolgoztam, de olyat találtam, hogy telepítés, de telepített library törlése nem, így agresszív kismalac bement a file kezelőbe, és kitörölte a felesleges libeket, és most felment
Tényleg nincs könyvtár törlése az arduino ide-ben?előtte csak adogattam hozzá, mert nem jó, másik joy, nem jó másik joy, és fel se tűnt elsőre a duplikálás
-
A hiba le van írva:
Többszörös könyvtárak találhatók ehhez: "Joystick.h"
Használt: C:\Users\abrah\OneDrive\Dokumentumok\Arduino\libraries\AxisJoystick
Nem használt: C:\Users\abrah\OneDrive\Dokumentumok\Arduino\libraries\arduino_359517Az egyik könyvtárat szedd ki, csak a jó maradjon.
-
biker
nagyúr
üdv, kéne egy kis segítség. Próbálok egy butonboxot építeni, van már csak nem jó a panel az enkóderekhez, ehhez kell egy arduino pro micro (leonardo)
Meg is van a file hozzá, de nem tudom feltölteni, mert könyvtárt hiányol.
Problem:
file letöltve, arduino ide megnyitva
keypad + joystick library installed (az összes joy lib ami elérhető a könyvtárak kezelésében próbálva), nem fordul le mert a lenti hibát dobja.Megtaláltam githubon azt a joystick library-t ami kell, hozzáadtam a zip csomagot, sikeres, de továbbra is ugyanazt a hibát dobja
Mit hagytam ki?Arduino: 1.8.13 (Windows 10), Alaplap:"Arduino Leonardo"
ARDUINO_BUTTON_BOXV2:95:1: error: 'Joystick_' does not name a type; did you mean 'Joystick'?
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
^~~~~~~~~
Joystick
C:\Users\abrah\OneDrive\Desktop\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void setup()':
ARDUINO_BUTTON_BOXV2:101:11: error: expected unqualified-id before '.' token
Joystick.begin();
^
C:\Users\abrah\OneDrive\Desktop\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllButtons()':
ARDUINO_BUTTON_BOXV2:122:39: error: expected unqualified-id before '.' token
Joystick.setButton(buttbx.key.kchar, 1);
^
ARDUINO_BUTTON_BOXV2:126:39: error: expected unqualified-id before '.' token
Joystick.setButton(buttbx.key(i).kchar, 0);
^
C:\Users\abrah\OneDrive\Desktop\32-FUNCTION-BUTTON-BOX-master\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllEncoders()':
ARDUINO_BUTTON_BOXV2:157:15: error: expected unqualified-id before '.' token
Joystick.setButton(rotaries(i).ccwchar, 1); delay(50); Joystick.setButton(rotaries(i).ccwchar, 0);
^
ARDUINO_BUTTON_BOXV2:157:70: error: expected unqualified-id before '.' token
Joystick.setButton(rotaries(i).ccwchar, 1); delay(50); Joystick.setButton(rotaries(i).ccwchar, 0);
^
ARDUINO_BUTTON_BOXV2:160:15: error: expected unqualified-id before '.' token
Joystick.setButton(rotaries(i).cwchar, 1); delay(50); Joystick.setButton(rotaries(i).cwchar, 0);
^
ARDUINO_BUTTON_BOXV2:160:69: error: expected unqualified-id before '.' token
Joystick.setButton(rotaries(i).cwchar, 1); delay(50); Joystick.setButton(rotaries(i).cwchar, 0);
^
Többszörös könyvtárak találhatók ehhez: "Joystick.h"
Használt: C:\Users\abrah\OneDrive\Dokumentumok\Arduino\libraries\AxisJoystick
Nem használt: C:\Users\abrah\OneDrive\Dokumentumok\Arduino\libraries\arduino_359517
exit status 1
'Joystick_' does not name a type; did you mean 'Joystick'?
Ennek a jelentésnek több információja lehetne
a "Bővebb kimenet mutatása fordításkor"
opció engedélyezésével a Fájl -> Beállítások-ban. -
-
Lesz helye, csak fura volt, hogy ez ilyen
Nem tudtam, hogy van ilyen változat. A nyöszörgéssel nincs is gond, de valami borzalmas nehezen mozog 5V-ról.
Ja, meg nem erről volt szó az ebay-es hirdetésbenMajd 2db 66rpm-es kis motor+áttétel lesz, ami lehet feleslegessé válik, arról lehet szó.
-
Akkor azok 360 fokos szervók lesznek! Azokat nem fogod tudni normál szervók helyett használni, mert a benne lévő potméter le van vágva a tengelyről. Ezeket normál DC motorok helyett szokták használni, mert helytakarékos, minden egyben van, motor, áttétel, nem kell hozzá külön driver(H-híd), mert benne van a vezérlő panel, meg persze 1db pin elég a vezérléshez. A vezérlése úgy történik, hogy 90° az álló helyzet, illetve a benne lévő potméter helyzetétől függően ez lehet +- bármennyi. A poti állításával lehet utólag kalibrálni, vagy programból lekezelni.
Mivel az sg90 analóg szervó, valószínűleg álló helyzetében is fog nyöszörögni, mert nem lehet annyira pontosan beállítani a potmétert benne, hogy az elektronika teljesen egyensúlyban legyen. Cserébe nagyon egyszerűen lehet szinte fokozatmentesen vezérelni a sebességét mindkét irányba és jó nagy a nyomatéka.
Ha nincs rá szükséged, és szívesen átveszem tőled. -
Ööööööö
ööööööööööööööööööööööö
Ezek körbeforognak
Ilyet még nem láttam
Tehát
- 2A-es USB tápról már úgy elmozog, de akkor is visít, meg kelletlen
- több teljes fordulatot is megtesz az Arduino Servo-s Sweep példaprogival
Az eddigiek azért egy akármilyen 5V-ról simán mentek.Mi a franc...
(Meg köszi a segítség, persze.) -
-
Istv@n
aktív tag
Sziasztok!
Milyen board-ot használhatnék akkor, ha "tudásban" kb. 1 wemos D1 mini szintjére lenne szükség, (wifi, memória), de több digitális I/O portot szeretnék?
-
-
-
Hello,
Valakinek volt már olyan, hogy a szervó nehezen mozog, és hangosan sípol...?
Mi okozhatja ezt... ?Nekem most két Tower 9g SG90 is ezt csinálja.
Köszi minden ötlet -
And
veterán
válasz
Tomika86 #15239 üzenetére
Ezt perpillanat csak te tudhatod. Natív adatmennyiségben a komplett képernyőn megjelenő input információ akár 16..18 byte-on is továbbítható. Hogy a lebegőpontos értékeket miért továbbítod text-ként, azt nem teljesen értem, de szerintem felesleges. Xfloat-ként (vagy akár szimplán ponttal elválasztott, byte-méretű értékpárokként) mondjuk 1..2 byte adattal megúszható lenne egy-egy ilyen mező. Ha a hagyományos módon, egyenkénti értékadással, parancsonként továbbítasz ennyi adatot, akkor a korábbi példa alapján az egyszeri frissítéshez is az említett hasznos adat minimum 8..10-szeresét kell karakterként a HMI-be küldeni, ami nagyságrendileg 150..180 byte. Az adatokat másodpercenként pl. 10x frissítve ez már bő másfél kilobyte, bár valószínűleg a számértékeket tartalmazó mezők frissítéséhez ez a ráta túl sok, a mutatós műszerekhez pedig esetleg kevés (bár itt már képbe jönnek a hardveres képességek, illetve hogy pontosan milyen módon animálod a mutatókat).
Én ezt úgy oldanám meg, hogy a szükséges frissítési gyakoriságok okán kétféle - egyenként fix hosszúságú - adatcsomagot küldenék az MCU felől, a HMI-t pedig protocol reparse-ba állítanám: az egyik típusú, ritkábban küldött csomagban lennének a numerikus mezők értékei pl. 16 byte-on (két bevezető + 7*2 byte), a másik, sűrűbben frissített csomagban pedig a mutatóké, mondjuk 6 vagy 8 byte-on.
Azt mindenképpen ki kell majd tapasztalnod (és nem a debugger-ben, hanem a valós kijelzőn!), hogy milyen frissítésnek van egyáltalán értelme a mutatós műszereknél, mert ez nagyon hardver- és megoldásfüggő. De ha jól csinálod, semmiképp nem a szükséges adatmennyiség vagy az átviteli sebesség fogja korlátozni a megjelenítést, mert másodpercenként erre 2-300 byte elég lehet, a 115.2 kbps-es portsebesség pedig adatkerettel együtt 11 kbyte/s hasznos átvitelt adhat. -
Tomika86
senior tag
Hát ez a bajom. Egy oldalon van 3 mutatós műszer, aminek a mutatói nem szeretném, ha akadoznának. Illetve még van mellette 4 text mező és 3 szám mező. Text mezőkben float szám van megjelenítve.
Ezek érdekelnének, hogy mennyi időt kell hagynom a küldések között, hogy kell ütemezni.
Ha az értékek lassabban frissülnek nem gond, de a 3 mutató ne akadozzon.
-
And
veterán
válasz
Tomika86 #15236 üzenetére
Amúgy nem tudom, milyen mennyiségben és mekkora periódussal küldöd be az adatokat, de ha a hagyományos módban elég sok változót adsz a HMI-nek folyamatosan, nagy bitrátával, és nem hagysz elég időt a belső feldolgozásra, akkor biztosan ki lehet akasztani az 1kB-os puffert (parancs + adat + lezárás).
A reparse mode ezen úgy segít, hogy nem kell komplett parancsokat vagy értékadásokat a hagyományos módon beküldened, elegendő csak magát az értéket. Például: az "n0.val=123" parancs a lezárással együtt 13 byte hosszú, protocol reparse módban pedig egyetlen byte-on elküldhető az érték, amit egy script képes a megfelelő helyre / változóba tenni. De még nagyobb értéktartomány esetén sem lesz 2..4 byte-nál hosszabb az üzenet. Mivel ilyenkor adatokat küldesz, nem parancsokat, a visszirányú forgalom (HMI válaszüzenetek száma) is minimalizálható. -
And
veterán
válasz
Tomika86 #15233 üzenetére
A Nextion felől visszaküldött üzeneteket bizonyos szintig be tudod állítani a bkcmd nevű belső változóval. Ha nullára állítod (default értéke: 2), az invalid variables üzenet elvileg nem jön többé, de a buffer overflow továbbra is megmarad. Ennek oka van, bár korábban szerintem már volt erről szó, hogy a debugger ilyen jellegű, soros átvitellel kapcsolatos szimulációja elég sok kívánnivalót hagy maga után. Vagyis a jelenség nem is feltétlenül valós. Azt is említettem, hogy a protocol reparse mode aktiválásával egy csomó probléma kiküszöbölhető, a rendkívül terjengős eredeti adatmennyiség a töredékére csökkenthető, cserébe neked kell a vételi pufferből kiszedni és a kívánt adatformátumra gyúrni a HMI-be beeső adatokat ( u[index] vételi tömb illetve ucopy függvény segítségével).
-
Tudna valaki segíteni?
Kellene nekem egy
- semiduplex
- 5V -> 3.3V szintillesztéses
- soros kapcsolatot létrehozni.A kapcsolás úgy néz ki, hogy a master oldalon 5V logic van, TX és RX kimenet, a slave irányába 1 vezeték, a slave pedig 3.3V logikát igényel. Ez lenne vázlatosan:
A level shift részére pedig ezt a kapcsolást találtam:
Hogyan kellene ezt a kettőt egy kapcsolásba összekombinálni, a lehető legkevesebb alkatrészszámmal?
Elvileg egyszerű feszültségosztóval is meg lehetne csinálni, de szeretném a lehető legstabilabb megoldást, a lehető legkisebb méretben megvalósítani (pl soklábú IC-k nélkül
).
A TX - RX irányban nem probléma a visszhang.A google nem volt a barátom.
-
Tomika86
senior tag
Van arra valami szabály hogy a nextion kijelzőnek, a folyamatos adatokat, hogyan kell küldeni? A lezáró 3db FF megvan, de mégis jönnek hibaüzenetek a nextion debugnál.
Buffer overflow és invalid variables is -
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!
-
Janos250
őstag
Nem teljesen látom át a problémát, de az UNO-n nem működik az sprintf?
https://www.cplusplus.com/reference/cstdio/sprintf/ -
Janos250
őstag
válasz
its_grandpa #15223 üzenetére
Az alapfilozófiával messzemenően egyetértek.
Már az Algol 60-at is azért kedveltem a Fortran helyett, mert Algolban lehetett
sokkal strukturáltabb programot írni, Fortranban nem. A basic sem nagyon adott arra lehetőséget, a Pascal viszont részben igen. A visualbasic persze nagyon jó strukturált és objektumosított, de ott meg egy Országh nagyszótárnyi dolgot kell megjegyezni, propertyk formájában. A Cobol meg annyira szószátyár volt, hogy csak no. A C nyelvet én gyakorlatilag kihagytam, mert a pointerek miatt gyakran hibáztam benne. Ezért szeretem a C++ -t, mert ott már kényelmesen meg van oldva.Rövid nevek, hosszú nevek: ízlés kérdése. Én jobban szeretem a hangosan beszélő neveket a halkan beszélő helyett. Hogy miért InListPassiveTarget a target helyett? Mert a manualban is így nevezik. Ízlés kérdése. (Pap és papné esete)
Ugyanez igaz a konstansra is: Én úgy gondoltam, hogy jobb az, ha ránézésre látszik, hogy a wait4ready (readyToRead_out) hossza csak 2 byte, míg az ACK 7 byte, a többi meg hosszabb. Az ACK csak ACK maradt, mert azt azért általában tudják az emberek, hogy az mi.
Az ESP32 egyébként is jeleskedik a konstansok átdefiniálásában. A jómúltkor pl egy konstans (aminek a bitjei külön-külön jelentenek valamit) esetében már vagy az ötödik átdefiniálásnál tartottam, amikor kiderült a számértéke: 0 . Ha beírták volna oda a nullát, arról ránézésre tudná az ember, hogy minden bitje bulla, mint ha egy átdefiniált sor végén van.Egyébként nem az Ada programot kódoltam át ESP32-re, hanem írtam egyet, szándékom szerint úgy, hogy minél inkább passzoljon az ESP32-höz. Ez vagy sikerült, vagy nem. Ha megnézed az Ada programját, az azért elég más. Én megnéztem. Igaz, hogy ő is kiírja az elején a verzió számot, de ezt - gondolom - ő is a netem olvasta - ugyanúgy mint én - hogy nem nagyon tudjuk, hogy miért, de ez javítja a stabilitást.
Köszönöm a tanácsaidat, fontolóra veszem őket.
Hogy neked így nem szép a program, azt sajnálom, de lesz, ami így marad. -
And
veterán
válasz
Tomika86 #15222 üzenetére
Ennek a kivitelezése szerintem nem arduino-specifikus. Ha nincs egy 'send', 'ok' vagy hasonló gomb a kijelzőn, ami az értéket elküldené az MCU-nak, akkor szerintem kerülőúton juttathatod be a változót, például:
- rendszeresen, adott időközönként kiolvasod az értékét az MCU-val (get x0.val), vagy
- ugyanezt megteszi a HMI, timer-eseménnyel ciklikusan adatot küld az MCU felé (prints x0.val.0), vagy
- mint az előbb, de a timer event-hez felhasználsz egy temp változót, aminek csak az a feladata, hogy összehasonlítsa az előző értéket az aktuálissal, és ha utóbbi megváltozik, elküldi a beviteli mező értékét (a lényeg, hogy csak egyszer küldje, ne folyamatosan).
Arra ügyelni kell, hogy - mivel a HMI nem ismeri a natív float típust - "Xfloat" mezőből is mindig integer értéket kapsz, ilyen bevitt értéknél a tizedespont helyét és ezzel a kapott szám értelmezését az Xfloat-mező ws0 és ws1 attribútumai adják meg. -
its_grandpa
tag
válasz
Janos250 #15219 üzenetére
Örülök, hogy átment az "üzenet". Arra próbáltam felhívni a figyelmet,hogy eredetileg arduinóra írt c kód esp-re fordítása nem csak annyiból áll, hogy átállítjuk milyen board-ra fordítson az ide.
Ne haragudj de a magic number nem lehet szándékos, a define ingyen van
Kicsit lerövidítve a programod egy sora,hogy elférjen:SPI.transferBytes(Target_response_out, Target_response_in, 21); /magic number /
Inkább így ....
#define Target_response_len 21
.
SPI.transferBytes(Target_response_out, Target_response_in, Target_response_len);Ugye mennyivel szebb a második ?
-
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!
-
Janos250
őstag
A kijelzők kezeléséről jut eszembe:
Már terveztem korábban, hogy írok egy illesztést ESP32-re, hogy a kijelzőre sima fájl "C" művelettel (pl. fprintf) lehessen írni, mert az sokkal kényelmesebb, mindent, konvertálást, formázást, egyebeket elintéz magától, de eddig elmaradt. Tud esetleg valaki kész ilyen illesztést, mert ha valaki már megcsinálta, akkor fölöslegesen nem tökölök vele? Egyébként se használok kijelzőt, nálam a kijelző és a kapcsoló a mobiltelefon képernyője (Mindenkinek van valami dilije
) Korábban egyszer valamire másra nekiveselkedtem, de aztán abbamaradt, pedig definiált, hogy hogyan kell csinálni, hogy beilleszkedjen a fordítóba. Nagyjából ment is, de nem kijelzőre, csak hobbi próbaként.
-
Janos250
őstag
válasz
its_grandpa #15203 üzenetére
Igen, igazad van.
Eredetileg valahogy - a nem megfelelő inicializálás miatt - a státus lekérdezés nem igazán jól működött, ezért került be a sok delay, és úgy maradt. Valóban ki is lehet belőle szedni.
delay: nem igazán tudom, mi a helyzet vele, ettől függetlenül. Van ahol azt írják, hogy vtaskdelay-t használjunk. Az biztosan átadja a vezérlést a többi tasknak az adott időre, de van ahol azt írják, hogy a sima delay-t is ugyanerre fordítja, tehát mindegy. Majd egyszer kipróbálom.
A sok magic number szándékosan van így: az Ada könyvtárban ott van minden részletesen, az nagyon univerzális, de igen hosszú is.
Szándékosan olyat akartam, ami rövid, tömör, és az SPI kezelését is megmutatja. Az SPI-ről is tervezem, hogy írjak pár sort egyszer, mert aki csak az UART-ot használta, annak elég szokatlan a filozófiája, hogy nincs benne "csak read". Helyette úgy működik, hogy ha küldünk egy byte-ot, akkor - akár kell, akár nem - jön be is egy. Tehát úgy olvasunk, hogy kiküldünk egy kódot (sorozatot), hogy mit akarunk olvasni, aztán küldjük sorra a haszontalan kódokat, hogy velük együtt jöjjön a hasznos adat.
Elég fura ez pl. amikor a hőelem hőmérsékletét olvasom, ahol a konverter panelnak semmi adatra nincs szüksége, mégis SPI-vel úgy olvasom, hogy KÜLDÖM a felesleges adatokat, mert ezekkel párhuzamosan jön a hasznos adat. (Ez utóbbit csak azoknak írtam, akik nem szokták az SPI-t használni.) Az esp8266-on korábban nem is használtam könyvtárat, hanem a chip select és a clk lábakat mozgattam programból, és a MISO-nak megfelelőt olvastam, a MOSI-nak meg nem is volt megfelelője, mert fölösleges az adott esetben. Azóta átáltam kényelemből az SPI-re annál is. -
bear_
aktív tag
Már értem, köszi a tanácsot.
@#15215 weiss neked is köszi, hétvégén kipróbálom.
"Miért van a digits1/2/3/4, és miért különböznek, ha mindegyik egy sima 7 segmenses kijelzőt vezérel? "
Mert nem egyesével vezérli a kijelzőket, hanem egyszerre. Itt van hozzá a kapcsolás: [link]
De az is lehet, hogy én gondoltam túl -
Nem tudom bedobni a kódodba, mert nem teljesen értem mit csinál. Miért van a digits1/2/3/4, és miért különböznek, ha mindegyik egy sima 7 segmenses kijelzőt vezérel? Egyébként ennyi volna a használata:
unsigned int value = 1234; // ide az ADC olvasás vagy akármi
decomposition_to_digits(value, false, &num4, &num3, &num2, &num1);Már ha a num4 az ezres érték.
-
Ha nem mondom meg a shift registernek (nem töltöm fel 0-val ami kikapcsolja a kimeneteket), akkor hogy tudom kikapcsolni az adott szegmenseket?
Hát úgy, hogy nem kapcsolod be.
Minden körben egymás után kapcsolgatod a szegmenseket. Amikor egy szegmenst vezérelsz, a másik 3-at lekapcsolod! Tehát amikor a következőt bekapcsolnád, egyszerűen csak nem kapcsolod be.
Ezzel:{{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1}
minden számjegy minden szegmense egyszerre világítana (8888). -
bear_
aktív tag
Mármint mennyi? Ezt nem értem. A pastebinen mindegyik sorban 16db 0 az OFF.
2db sorba kötött shift registerbe tölti be az MCU a biteket, az első 8 bit a 7 szegmenses kijelző egy-egy szegmensét kapcsolja(+ a . ugye), a következő négy nem csinál semmit, a maradék néggyel pedig a szegmenseket lehet egyesével kapcsolgatni.Ha arra gondolsz, hogy miért 0 az active state: nem emlékszem pontosan miért, egy hónapja írtam a shift regiszterek vezérlését, de valóban fordítva működik, kijavítani meg lusta voltam
Szerk: "
Egyáltalán miért van szükség az off kódot kiíratni, egyszerűen csak ugorni kéne azt a szegmenst, ez egyszerű erőforráspazarlás."
Ezt megint nem értem. Ha nem mondom meg a shift registernek (nem töltöm fel 0-val ami kikapcsolja a kimeneteket), akkor hogy tudom kikapcsolni az adott szegmenseket?
-
Ez miért ennyi?
int digits1[11][16] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //OFF
Miért nemint digits1[11][16] = {{1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0}, //OFF
vagyint digits1[11][16] = {{1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0}, //OFF
?
A többi 3-ra is vonatkozik.
Végülis a futás szempontjából nem fontos, csak zavarja az OCD-met.Egyáltalán miért van szükség az off kódot kiíratni, egyszerűen csak ugorni kéne azt a szegmenst, ez egyszerű erőforráspazarlás.
-
bear_
aktív tag
Ha végére rakom az OFF-ot akkor ugyanúgy gond van a kezelésével, azt a kört már lefutottam
Nem vagyok egy C guru, megtennéd légyszi, hogy bedobod a kódomba az általad felírt függvényt? Nem vagyok benne biztos hogyan is működik pontosan, így nagy segítség lenne a megfejtésében.
-
-
Ill. ez a fix hozzárendelés is fura. Jobb volna magát a számot feldolgozni, és abból generálni a digiteket.
Valami ilyesmire gondoltam. Nem teszteltem, csak fejből írtam.
void decomposition_to_digits(const unsigned int num, const bool with_leading_zeros, int *thousand, int *hundred, int *ten, int *one)
{
*one = num % 10;
*ten = (num / 10) % 10;
*hundred = (num / 100) % 100;
*thousand = (num / 1000) % 1000;
if(!with_leading_zeros){
if(0 == *thousand){
*thousand = 10;
if(0 == *hundred){
*hundred = 10;
if(0 == *ten){
*ten = 10;
}
}
}
}
} -
-
bear_
aktív tag
Igen, az világos. A 0 indexű sor a kikapcsolja a kijelzőket ahogy a komment is mutatja mellette. És pont ez a probléma, ha egyel növelem a változót akkor az egyes indexre ugrik, ami ugye 0-t jelenít meg, és emiatt van az, hogy x9 után 00-ír ki a kijelző.
Haif(num1>10){
num1=1;
num2=2;
}feltételt szabok meg, akkor 19 után 10-re ugrik vissza, ami ugye logikus is.
Ha
if(num1>10){
num1=1;
num2++;
}
a feltétel akkor remekül működik a fentebbi problémát leszámítva. tehát x9 után 00-ra ugrik. Az x itt kikapcsolt kijelzőt jelent, csak a másik működik amíg 9 felé nem teker a változó. -
-
bear_
aktív tag
Sziasztok!
Újra van időm mikrokontrollerezni, így szerettem volna tovább babrálni.
Az ADC-t szerettem volna kipróbálni és beolvasott értéket kiírni a kijelzőre, de nem tudom leprogramozni normálisan a kijelző léptetését.
0-9-ig tök jól elszámol az első helyiérték, a második helyiértéket jelző 7 szegmenses kijelző viszont 00-t jelenít meg x9 után 10 helyett.
A probléma okát értem mert a tömböm szerint a kikapcsolt szegmensek után a következő sor a 0 értéket tartalmazza, én viszont a második tömbből a második sort felhasználva szeretném bekapcsolni a második helyiértékű 7 szegmenses kijelzőt. Természetesen próbáltam ezerféleképpen, de vagy nem számol el az egész 19-től tovább, vagy 9 után 00-át jelenít meg.Hogy lehet ezt megoldani? Már a falat kaparom miatta.
Kód: [Pastebin]
-
válasz
its_grandpa #15203 üzenetére
Miért ellenjavallt? Ő esp32-re írta a kódot, ahol kimondottan elvárt a delay-ek használata, tekintve, hogy ott adja át a vezérlés a többi szálnak, pl. wifi.
-
its_grandpa
tag
válasz
Janos250 #15192 üzenetére
Belenéztem a kódba kíváncsiságból. Abba most nem megyek bele mennyire szépen van megírva, én pár dolgot másképp csinálnék, pl. túl sok benne a "magic number".
A gond a delay-el van ami ebben az esetben vélhetően nem okoz gondot, azonban az ESP-n ellenjavalt ilyen hosszú delay-ek használata, számtalan helyen leírták, egy példa a sok közül: https://learn.sparkfun.com/tutorials/esp8266-thing-hookup-guide/using-the-arduino-addon
Nem kötözködésből írtam, a jobbító szándék vezérelt, peace. -
Új hozzászólás Aktív témák
Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- Le Mans Ultimate
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Eredeti játékok OFF topik
- exHWSW - Értünk mindenhez IS
- CMF Phone 2 Pro - a százezer forintos kérdés
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- Autós topik
- További aktív témák...
- Apple iPhone 13Pro 128GB Kártyafüggetlen 1Év Garanciával
- Garmin Fenix 8 Amoled 51mm Sapphire Carbon Gray DLC - Használt, karcmentes
- Nitro ANV15-51 15.6" FHD IPS i5-13420H RTX 4050 16GB 512GB NVMe magyar vbill ujjlolv gar
- Apple iPhone SE 2020 64GB Kártyafüggetlen 1Év Garanciával
- iPad Pro 11 gen 2 + magic keyboard magyar makulátlan új állapot
- Xiaomi Redmi Note 13 256GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! Apple iMac Pro (2017) 5K - Xeon W-2140B 64GB DDR4 RAM 1TB SSD Radeon PRO Vega 56 8GB
- Bomba ár! HP ZBook Studio G5 - i9-9980H I 32GB I 1TSSD I Nvidia I 15,6" FHD I Cam I W11 I Gar
- Csere-Beszámítás! Asus Rog Strix RTX 3070Ti 8GB GDDR6X Videokártya!
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7700X 32/64GB RAM RTX 4070Ti Super GAMER PC termékbeszámítással
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest