- Külföldi SIM-ek itthon
- Azonnali mobilos kérdések órája
- One mobilszolgáltatások
- CMF Phone 2 Pro - a százezer forintos kérdés
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Netfone
- Mobil flották
- Xiaomi 15 - kicsi telefon nagy energiával
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
-
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
-
Undoroid
őstag
Szia!
Igen tudom, hogy többszörös áttétel van benne és nem túl nagy erő átvitelére képes, ezért vigyázni fogok rá!
* * *
Pár napja megérkezett az egyik megrendelt cuccom, de a kipróbálásánál egy kicsit elgondolkoztam, hogy vajon itt mire gondolt a szerző?
A képen egy WS2812-es strip két vége látható...nem túl nagy a gond, csak ez szokatlan egy nagynevű webshoptól!
-
-
Janos250
őstag
Szia!
Köszi, van, ami megy, de egyre rejtélyesebb.Van ugyebár két Arduino fejlesztés az ESP32-re.
Van egyszer, amit az espressif-nél van, valami régebbi IDF alapján, és ezt 1.0.6 verziónak nevezi. Ez, ha a File/Preferences-be ezt írjuk be:
https://dl.espressif.com/dl/package_esp32_index.jsonAztán van a github-on, a 2.0.2 verziónak nevezett, amit folyamatosan fejlesztenek aktív emberek, ez jelenleg a 4.4-es IDF alapján.
https://github.com/espressif/arduino-esp32/releases/download/2.0.2/package_esp32_index.jsonAz espressifesben megy a fájlkezelés úgy, ahogy egyszer korábban leírtam:
https://prohardver.hu/tema/arduino/hsz_16613-16613.html
Viszont nem megy az általad javasolt.A githubosban nem megy a fenti fájlkezelés, de - ha az IDF-ből bemásolom neki, amiért nyavalyog -, akkor megy, amit leírtál.
Ez alapján sikerült kiíratni azokat a dolgokat, amit tulajdonképpen akartam. Tulajdonképpen az s_vfs-et akartam leírni, csak egyszerűen akartam megfogalmazni, mert ez is ugyanolyan
FD_SETSIZE = 64
s_vfs[0] = 3ffb6d70
vfs = 3ffb6e10
path_prefix[] = /dev/uart
path_prefix_len = 9
ctx = 0
offset = 0
s_vfs[1] = 3ffb6e3c
vfs = 3ffb6edc
path_prefix[] = /dev/console
path_prefix_len = 12
ctx = 0
offset = 1Szóval a fene se érti.
Még majd bogarászok vele. -
its_grandpa
tag
Ha boolean visszatérési értékűre módosítod a függvényt, a hívó oldalon kell egy ellenőrzés.
Mivel Tomika86 eredeti fv-e int (nem uint), én valami ilyesmit csinálnék:int ADS7828_olvasas (int Addr_byte, byte Cmd_byte) {
byte data[2];
int adc = -1 ;
Wire.beginTransmission(Addr_byte); // I2C átvitel indítása, az adott címen
Wire.write(Cmd_byte); // Command byte küldése
Wire.endTransmission(); // I2C átvitel megállítása
Wire.requestFrom(Addr_byte, 2); // 2 byte adatra várakozás
if (Wire.available() == 2) { // Ha megérkezett a 2byte
data[0] = Wire.read(); // Első byte tömbbe írása
data[1] = Wire.read(); // Második byte tömbbe írása
delay(2); // Ciklus késleltetés
adc = ((data[0] & 0x0F) * 256) + data[1]; // Adat konvertálás 12bit-re
}
return adc;
}
Persze a hívó oldalon így is kell egy ifADS7828_olvasas
..... -
Úgy tudom volt valamilyen próbálkozás RAM nélküli C compiler létrehozására, de sajnos nem találtam sehol letölthető formában, szerintem félbe hagyták a fejlesztést. Nyilván nem volt értelme túl sok energiát fektetni bele, se változók, se szubrutinok használatára nem lenne lehetőség, 3word-nyi hardware stack van a CPU-ban, 3-nál mélyebb rekurzió fölött gyakorlatilag lábon lövi magát a program.
Lehetne a programmemóriát adat tárolására is használni, de mivel összesen 1kB áll rendelkezésre, ez sem lenne túl előremutató. Az UART modulom assembly-ban írva is jelenleg több mint 800 Byte, miközben magát a programot, ami használni fogja, még el sem kezdtem írni. -
Sanki
addikt
Upsz, akkor ezen példa alapján kiegészítettem: State Change Detection (Edge Detection) for pushbuttons
Most menet közben jó, még a starton kell csiszolni, ha "HIGH" D0-val kapcsol be, akkor ugyanolyan fadedown-nal megy le a 25-ös értékre.
Ha LOW, akkor viszont fix 150-en kapcsol be.#include "FastLED.h"
#define NUM_LEDB1 3
#define NUM_LEDB2 3
#define LED_TYPE WS2812
#define COLOR_ORDER GBR
CRGB leds1[NUM_LEDB1];
CRGB leds2[NUM_LEDB2];
#define LEDB1 D2
#define LEDB2 D8
#define inPin D0
#define BRIGHTNESS25 25
#define BRIGHTNESS150 150
int brightState = 0;
int lastbrightState = 0;
void setup() {
pinMode(inPin, INPUT_PULLUP);
pinMode(LEDB1, OUTPUT);
pinMode(LEDB2, OUTPUT);
FastLED.addLeds<LED_TYPE, LEDB1, COLOR_ORDER>(leds1, NUM_LEDB1).setCorrection(TypicalLEDStrip);
FastLED.addLeds<LED_TYPE, LEDB2, COLOR_ORDER>(leds2, NUM_LEDB2).setCorrection(TypicalLEDStrip);
FastLED.clear();
for (int i = 0; i < NUM_LEDB1; i++ ) {
leds1[i] = CRGB::White; }
for (int i = 0; i < NUM_LEDB2; i++ ) {
leds2[i] = CRGB::White; }
if (digitalRead(inPin) == HIGH) {
FastLED.setBrightness(25);
FastLED.show(); }
else {
FastLED.setBrightness(150);
FastLED.show(); }
}
void loop() {
brightState = digitalRead(inPin);
if (brightState != lastbrightState) {
if (brightState == HIGH) {
fadedown25();
}
else {
fadeup150();
}
}
lastbrightState = brightState;
}
// ------------------------------------
void fadeup150() {
for (int j = BRIGHTNESS25; j < BRIGHTNESS150; j ++) {
FastLED.setBrightness(j);
FastLED.show();
delay(10);
}
}
// ------------------------------------
void fadedown25() {
for (int j = BRIGHTNESS150; j >= BRIGHTNESS25; j --) {
FastLED.setBrightness(j);
FastLED.show();
delay(10);
}
}
-
Sebiferi
tag
-
Janos250
őstag
Közben megtaláltam. Szabályos.
https://www.w3schools.com/tags/att_a_type.asp -
Janos250
őstag
Validátor ezt elfogadja, a text fájlt így már nem is próbáltam, mert azt úgy biztosan nem fogadja el, de nem is biztos, hogy kell.
Lehet, hogy így kellene?
Annyira fű vagyok a WEB programozáshoz.<link rel="stylesheet" type="text/css" href="theme.css">
https://www.w3schools.com/tags/att_href.asp -
-
Janos250
őstag
Eredetileg egy .ino.txt volt, de azt is ugyanúgy kifogásolta, pedig hát egy .txt fájlt csak jó lenne, ha megjelenítene különösebb fakszni nélkül. Nem lehet egyszerű módszerrel megjeleníteni egy txt fájlt?
Ha elé rakok fejlécet, akkor meg a #include-ot kifogásolja.
Nem szeretnék bonyolultabb megoldást, ha végképp nem megy, átteszem .pdf-be, mert az nem zavarja, azt simán kiírja. Én úgy képzelném, hogy csak van valami hasonlóan egyszerű megoldás, csak én nem tudom. -
Undoroid
őstag
-
gyapo11
őstag
Lehet, nekem kevés összahasonlítási alapom van, és az is turbopascal és turboc. Volt olyan eset még a dosos időkben, hogy file-ban kerestem talán valamilyen karaktereket, megírtam turbopascalban és lassú volt. Vegyük hozzá, hogy akkoriban 386-os gépem volt. Kerestem valami filekezelő turboc mintaprogramot, és átírtam, kb. olyan lett mint a pascal méretre, sorok számára nézve, viszont kétszer olyan gyorsan futott.
Purebasicben írtam lottószám sorsolót, ott is minta, hogy kell kiírni valamit, hogy kell a billentyűnyomást érzékelni, és így sikerült.
Arduinot is így programozok, példaprogram, ha nem értek egy utasítást megkeresem, semmi objektum orientáltság, azt is próbálták nekem tanítani de sajnos eredménytelenül.
Leginkább az assembly vált be, abból tanultam z80-at, motorola 6510-et, intel 286, 386-ot, ezekben tudtam írni kisebb programocskákat, amik iszonyú gyorsan futottak az akkori magasabb szintű nyelvekhez pl. basichez, turbopascalhoz képest.
Csak annyit akartam ebből kihozni, hogy ha valaki működő programot szeretne írni, nem feltétlenül kell a legmodernebb magas szintű nyelv megtanulásába éveket fektetni, lehet úgy is, hogy annyit tanulok belőle amennyi éppen az adott feladathoz kell, így is összegyűlik lassan a tudás, csak sokkal élvezetesebb módon. -
Tomika86
senior tag
// Akkumulátor feszültség mérés CH0
adc0 = ADS7828_olvasas (ADS7828_ADDRESS, CH0); //Analóg beolvasott feszültség érték
adc0_atlagolt = atlag_szamolas (adc0);
float feszultseg_temp = map(adc0_atlagolt, 0, 4095, akkumulator_fesz_minimum, akkumulator_fesz_maximum); //Analóg átalakítás feszültségre
akkufesz = feszultseg_temp * 1.0 + 0.6; //y=mx+c feszültség végeredmény
akkufesz = constrain(akkufesz, 0.0, 23.0);adc0 változik a különböző méréseknél
-
Ok, matekból sosem voltam 4-esnél jobb
de régebben sokat szórakoztam mpu-val (csináltam is egy légegeret, bár abban 9axis gyro van, még egy egyensúlyozó robotot is elkezdtem, ami kifejezetten a fenti számítást használja a pozíciója meghatározásához, innen a tapasztalat), és nálam a nyers adatokkal működött, amit írtam.
Vagy nem néztem elég alaposan, vagy rosszul emlékszem, vagy a lib, amivel csináltam, eleve már nem a nyers adatot adta vissza... De nálam 2 tengely összege mindig 1 (9.81) volt.
-
Mivel egymással pont 90°-os szöget zárnak be, és gyorsulás irányának meghatározása nem volt feladat, simán ki lehet hagyni a szögfüggvényeket, és összeadni a tengelyek abszolút értékét. Empirikusan ellenőrizhető az állításom: egyszerűen kézben körbe forgatva a 3 tengely összege mindig 1 (~0.98) körül kell legyen, minden állásban.
-
Janos250
őstag
A függvény így néz ki:
String base64::encode(const uint8_t * data, size_t length)
{
size_t size = base64_encode_expected_len(length) + 1;
char * buffer = (char *) malloc(size);
if(buffer) {
base64_encodestate _state;
base64_init_encodestate(&_state);
int len = base64_encode_block((const char *) &data[0], length, &buffer[0], &_state);
len = base64_encode_blockend((buffer + len), &_state);
String base64 = String(buffer);
free(buffer);
return base64;
}
return String("-FAIL-");
}Mitől lesz ez const? A fene se érti
-
-
-
tonermagus
aktív tag
-
Janos250
őstag
Közben rájöttem, hogy eléggé fából vaskarika, amit szeretnék. Ugyanis még más dolgokat is kellene csinálni. Pl. be kell jegyezni a fájlrendszerbe a device handlert. Amíg nem tudjuk, hogy milyen sorrendben, mikorra is épül fel a fájlrendszer, addig a handler bejegyzése tényleg csak futásidőben biztonságos. Mert ugyebár alapszinten minden fájl. (Ez nem Windows, hogy minden összevissza legyen). Volt még, amivel gondom volt: a bejegyzés úgy történik, hogy egy struktúrát kell létrehozni, amiben benne vannak a handlerek pointerei. Ez C++ alatt nem megy, hogy a struktúra létrehozásakor tegyen be a linkeket, mert C++ alatt csak konstansokat lehet a létrehozáskor berakni, de csináltam a létrehozáshoz külön C fájlt, mert C-ben lehet, így az megoldódott. Állítólag ezt a .cpp-ben is meg lehetne csinálni külön C részként, de ez nekem nem sikerült.
Viszont a bejegyzés mindenképpen futásidőre marad.
Kösz a segítséget. -
Janos250
őstag
Nincs.
Majd még később tökölök vele.
Ha az initben hagyom, a példányosításban kikommentelem, akkor jó, fordítva nem.
Nem is találtam olyan tagfüggvényét a servernek, amivel meg tudnám nézni, hogy milyen a begin állapota. Majd a könyvtári begin-be teszek ideiglenesen kiírásokat, hogy lássam, mi történik. -
Janos250
őstag
-
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. -
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ó. -
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; } -
-
Janos250
őstag
Kösz megnéztem, de ezt egyelőre hanyagolom.
Nincs benne a portable lehetőség, legalábbis nem úgy, mint a korábbiakban.
Valahonnan a tartalékból előszedett egy archivált programom, és egyből el is rontotta.
Bemásoltam egy másik működő programot, de rengeteg hibajelzés. Még a Serial.print-et is hibának jelezte. Nyilván aktiválni kéne a könyvtárakat, de az macera lenne, meg azt se tudni, hogyan kell.
Fordítási hiba:
"Compilation error: Error: 2 UNKNOWN: exit status 1"
Hát, ez egy "sokatmondó" hibajelzés.
Leírást a linkelt videón kívül nem találtam róla. Arra is alig jöttem rá, hogy a kihalványított OK gomb nem vált világosabbra, hanem így halványan kell megnyomni. Szóval egyelőre maradok a réginél. -
Brain75
senior tag
Na ez jó út mert akkor csak egy olyan kapcsoló kell ami benyomva marad .
Elvben tudom, hogy a feltétele a különöző portok olvasásának a kapcsoló állása és a kapcsoló állásnak függvényében vagy a digitális vagy az analóg portot olvassa be.
Na de ennek a megírásához sajnos még amatőr vagyok. -
PBA
aktív tag
Remélem nem ütközik fórumszabályzatba, íme pár link, amiket kinéztem a célra:
Ez még csak egy gyors keresés eredménye, de kiindulópontnak ezek szerintem jók lehetnek. A kis fogyasztás, a minden egyben megvalósítás, valamint az akkukezelés szimpatikus, "csak" egy mikrofonos fülest kell rádugni, és működhetne is a dolog - felhasználási szempontból. Persze addig el is kellne jutni.
-
ekkold
Topikgazda
Több oka is van. Pl. a standard c string függvények (pl. strlen()) is jól működnének, egyszerűbb lenne a konverzió egyes kijelzőkhöz. Kevesebb helyet/memóriát foglalnának az ékezetet is tartalmazó szövegek, nem okozna gondot egyes programok más processzorra való átvitelénél, az eltérő bájt-sorrend kezelés, ilyesmik. Összefoglalva, nekem sok szempontból jobb lenne...
-
Janos250
őstag
"Ezt nem intézi a lib?"
Nem, mert nem használok libet.
Azon a szinten használom, ahol aWiFiServer server(80);
után a
WiFiClient client = server.available();
a client gyakorlatilag soros vonalként használható.
char c = client.read();
utasítással lehet róla olvasni, és
client.println("akarmi");
utasítással meg írni, akárcsak a Serial soros vonal esetén.
Ez így nagyon kényelmes, mert nem kell azon filóznom, hogy a lib mit csinál.Viszont minden kérést nekem kell lekezelnem, és minden küldésről nekem kell gondoskodnom.
Ez így gyakorlatilag egy WiFi/soros bridge. -
Janos250
őstag
Ezzel a következő a gond:
Ha nem írom ezt be, akkor a csuszka elengedésekor a Firefox által elküldött kérés első sora ez:GET /?F=40 HTTP/1.1
ha pl. 40-re toltam a csuszkát.
Ez kényelmesen feldolgozható.
Ha beírom amit javasoltál, akkor 2 kérést küld egymás után a FF :
Az első kérés első sora ugyanaz a jó érték:GET /?F=40 HTTP/1.1
De jön pluszban egy második lekérés is, mégpedig a csuszka állítása előtti URL-el.
Tehát ha például előzőleg azt küldtem el, hogyGET /?f=+10 HTTP/1.1
akkor másodikként ezt is megismétli, ami teljesen rossz, mert adott esetben pl. még pluszban megnöveli 10-el.
Ha beírom:location.replace("/?F="+sliderValueForraloFutes);
sort, akkor jó lesz, csak egyszer küldi, és a jót.
Még azt kell kisakkozni, hogy akkor az előtte lévővar sliderValueForraloFutes = document.getElementById("csuszkaErteke").value;
console.log(sliderValueForraloFutes);
var xhr = new XMLHttpRequest();
xhr.open("GET", "/?F="+sliderValueForraloFutes, true);
xhr.send();
-ből mi hagyható el. Csak kisakkozni tudom, mert az utolsó három sort érteni vélem, gondolom, az kihagyható.
Viszont aconsole.log(sliderValueForraloFutes);
sorról fogalmam sincs, az mire jó, kell-e, vagy sem.
Majd próbálgatom. -
gyapo11
őstag
Új hozzászólás Aktív témák
Hirdetés
- Moderátort keresek a fórumhoz!
- Apple MacBook
- Otthoni hálózat és internet megosztás
- Xbox Series X|S
- Debrecen és környéke adok-veszek-beszélgetek
- Vezetékes FEJhallgatók
- Azonnali alaplapos kérdések órája
- Windows 11
- gban: Ingyen kellene, de tegnapra
- Dual Mode-os IPS monitorral adott magáról életjelet a Gigabyte
- További aktív témák...
- Remek áron Lenovo Flex 5 14 laptop/2in1/Touch/Ryzen i5-1135G7/8GB/512 GB SSD/14"/Gari
- Exclusive ajánlat! Dobozos új LG GRAM /13. gen i7-1360P/32GB RAM/512GB SSD/14"COL/FHD+/IPS/Garancia/
- Pénztárcakímélő áron eladó HP Pavilion laptop/I5-1135G7 8GB 256SSD 13" FHD IPS Gari
- Samsung Galaxy Book 3 /i5-1335u/8GB/512SSD/FHD/Garancia/ 6 napot ment eddig összesen
- Xiaomi Redmi Note 14 Pro Plus 12/512GB Újszerű,Dobozos,Kétkártyás 1év Garanciával!
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
- Asus TUF A15 FA507NU - 15.6"FHD IPS 144Hz - Ryzen 7 7735HS - 8GB - 512GB - RTX 4050 -2.5 év gari
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RTX 4060 8GB GAMER PC termékbeszámítással
- Xiaomi Redmi Note 11 Pro 128GB, 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
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest