-
IT café
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
I2C eszköz ha benne van a programban, de én mégsem használom (giroszkóp, oled kijelző), tehát lecsatlakoztatom mondjuk, akkor a programban, hogy tudom kikapcsolni? Vagy csak a hozzá tartozó programot kell letiltani a loopban?
Köszönöm!
-
nagyúr
válasz Tomika86 #16503 üzenetére
Hát én ezt úgy oldanám meg, hogy a uC bekapcsolásakor rögtön futtatnék egy i2c address scan-t, és utána annak az eredménye alapján kezelném a továbbiakban az eszközöket, hogy mit talált meg és mit nem. Nyilván elég csak azokat a címeket szkennelni, amik várhatóan csatlakoztatva lehetnek.
-
tibi-d
tag
Sziasztok!
Próbált-e valaki Atmega 2560 EEPROM tartalmat kiírni SD kártyára, majd onnan visszamenteni? A GOOGLE-n erre az esetre nem találtam példát. (lehet, nem jó helyen kerestem). -
Janos250
őstag
A múltkori késő esti string és String kínlódásom után úgy döntöttem, hogy nincs értelme a brute force módszernek, inkább gondoljuk át logikusan. És tényleg! Ideírom a tapasztalataim, hátha valaha valakinek hasznos lesz a jövőben.
Kösz mindenkinek, aki segített!Arduino String (nagybetűs), és a C++ string (kisbetűs) kapcsolata.
Az Arduino String nem írható be paraméterként olyan helyre, ahol C++ string az elvárás, és ez fordítva is igaz.
A kettő közötti átmenetet a .c_str() tagfüggvény teszi lehetővé.String ArduinoString_Hello = "Hello";
string Cpp_string_World = "World";
EzekkelString ArduinoString_Hello02 = Cpp_string_World.c_str();
String ArduinoString_Hello03 (Cpp_string_World.c_str());
string Cpp_string_World02 = ArduinoString_Hello.c_str();
string Cpp_string_World03 (ArduinoString_Hello.c_str());
Így új példányok jönnek létre.A szöveget mind a String, mind a string belül egy 0x0 terminált karakter tömbben tárolja, és a .c_str() konstans pointer mutat rá, ezért ha (char*) C típusú sztinget akarunk, akkor "const" miatt (char*) átdefiniálás szükséges.
Például:char* ArduinoString_Hello_c_str = (char*)ArduinoString_Hello.c_str() ;
char* Cpp_string_World_c_str = (char*)Cpp_string_World.c_str() ;
Ebben az esetben nem jön létre új példány, hanem a char* típusú karaktertömb pointere is az eredeti objektumban tárolt karaktertömb kezdetére mutat. Ha az egyikben megváltoztatjuk valamelyik karaktert, a másikban is megváltozik.Az ESP32-höz használt fordító ismeri az iterátor típust is. A C++ string rendelkezik .begin(), .end() iterátorral.
for ( std::string::iterator it=Cpp_string_World.begin(); it!=Cpp_string_World.end(); ++it)
std::cout << *it;
std::cout << '\n';
/*
Woyld
*/std::string::iterator it=Cpp_string_World.begin();
std::cout << "Cpp_string_World.begin() = :" << *it<< "\n"; // W
it=Cpp_string_World.end()-1; // mert a .end() a 0x0 terminátorra mutat
std::cout << "Cpp_string_World.end() = :" << *it<< "\n"; // dMintának egy teljes program:
#define __cplusplus 201103L
#include <iostream>
using namespace std;
void setup() {
Serial.begin(115200);
delay(2000);
Serial.println("Arduino String (nagybetus), es a C++ string (kisbetus) kapcsolata.");
String ArduinoString_Hello = "Hello";
string Cpp_string_World = "World";
String ArduinoString_Hello02 = Cpp_string_World.c_str();
String ArduinoString_Hello03 (Cpp_string_World.c_str());
Serial.printf("ArduinoString_Hello :%s\n",ArduinoString_Hello);
Serial.printf("ArduinoString_Hello02 :%s\n",ArduinoString_Hello02);
Serial.printf("ArduinoString_Hello03 :%s\n",ArduinoString_Hello03);
Serial.printf("ArduinoString_Hello[0]:%c\n",ArduinoString_Hello[0]);
Serial.printf("ArduinoString_Hello.c_str()[0]:%c\n\n",ArduinoString_Hello.c_str()[0]);
/*
ArduinoString_Hello :Hello
ArduinoString_Hello02 :World
ArduinoString_Hello03 :World
ArduinoString_Hello[0]:H
ArduinoString_Hello.c_str()[0]:H
*/
string Cpp_string_World02 = ArduinoString_Hello.c_str();
string Cpp_string_World03(ArduinoString_Hello.c_str());
std::cout << "Cpp_string_World :" << Cpp_string_World<< "\n";
std::cout << "Cpp_string_World02 :" << Cpp_string_World02 << "\n";
std::cout << "Cpp_string_World03 :" << Cpp_string_World03 << "\n";
/*
Cpp_string_World :World
Cpp_string_World02 :Hello
Cpp_string_World03 :Hello
*/
char* ArduinoString_Hello_c_str = (char*)ArduinoString_Hello.c_str() ;
char* Cpp_string_World_c_str = (char*)Cpp_string_World.c_str() ;
ArduinoString_Hello_c_str[2] = 'x';
Cpp_string_World[2]= 'y';
Serial.printf("ArduinoString_Hello is atirodik :%s\n",ArduinoString_Hello);
std::cout << "Cpp_string_World_c_str is atirodik :" << Cpp_string_World << "\n";
/*
ArduinoString_Hello is atirodik :Hexlo
Cpp_string_World_c_str is atirodik :Woyld
*/
// iterator:
std::cout << "Iterator:\n";
for ( std::string::iterator it=Cpp_string_World.begin(); it!=Cpp_string_World.end(); ++it)
std::cout << *it;
std::cout << '\n';
/*
Woyld
*/
std::string::iterator it=Cpp_string_World.begin();
std::cout << "Cpp_string_World.begin() = :" << *it<< "\n"; // W
it=Cpp_string_World.end()-1; // mert a .end() a 0x0 terminátorra mutat
std::cout << "Cpp_string_World.end() = :" << *it<< "\n"; // d
} ;
void loop() {} ;[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Tomika86
senior tag
Sziasztok!
Használom ezt a mozgó átlag függvényt:
uint32_t atlag_szamolas(int nyers_jel) {
int i = 0;
uint32_t osszeg = 0;
nyers_jel_buffer[nyers_jel_i++] = nyers_jel;
if (nyers_jel_i == SZURO_HOSSZA) {
nyers_jel_i = 0;
}
for (i = 0; i < SZURO_HOSSZA; i ++) {
osszeg += nyers_jel_buffer[i];
}
return (osszeg / SZURO_HOSSZA);
}Mitől lehet az, hogy akkumulátor feszültségnél átlagolás nélkül jól mutatja a feszültséget, csak tizedben ugrál 0.1 értéket. Ha berakom a függvényt akkor pedig a 13V helyett 3V körüli lesz a kimenete a függvénynek.
7 analóg értéknél használom ezt a függvényt, a többinél nincs ekkora eltérés.Köszönöm!
-
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
-
nagyúr
Miért kell 15 adatot átlagolni, ha csak 0.1 a kilengés az adatokban? Elég lenne 3 sample.
-
-
nagyúr
válasz Tomika86 #16519 üzenetére
Ez pontosan ugyanazt csinálja, mint a te függvényes-tömbös megoldásod, csak sokkal egyszerűbben.
Ráadásul akár két számítás között is változtathatod a sample-ök számát, nincs hatással az eredményre. Például elkezdedn=1
-el, és minden ciklusban eggyel növeled, amíg el nem éri a max (pl. 15) értéket, így már az elejétől fogva helyes adatot mutat, nem 0-ról indul.[ Szerkesztve ]
-
Dißnäëß
veterán
Sziasztok ismét
Egy 1K-s és egy 10K-s 20-fordulatú precíziós (1W) trimpotot szeretnék helyettesíteni Arduino-val, hogy ő "forgassa" ezeket, értsd jól.
Hogyan tudnám legegyszerűbben megtenni ? Egyesek javasolnak digitális potmétereket is, én meg arra gondoltam, simán LC aluláteresztő szűrném a PWM kimeneteket és így kapnám meg a mikor milyen fesz.értéket, amivel egy tranyót vezérelve meg is volna a dolog sima analogWrite() használatával, szabályozva így azt, mennyit enged át magán a tranzisztor.
Vagy túlbonyizom, esetleg tök hülyeség ?
[ Szerkesztve ]
POKE 16017,44 ..... SYS 2077
-
Dißnäëß
veterán
Illetve ha precíziós állítást szeretnék, gondolom nem mindegy, hogy a kis digitális pot 64 állású, vagy 1024.
POKE 16017,44 ..... SYS 2077
-
Tomika86
senior tag
válasz PeterPH #16514 üzenetére
Helló
Ezt ma kipróbáltam, hogy lehet ezt kiküszöbölni egy függvényhívásnál?Beolvasok egy analóg értéket globális változóba
Meghívom a függvényt, a beolvasott értékkel elvégzi a számolást
Return visszaadja az értéket, majd visszatér a függvényhíváshoz, ahol folytatja a kódot.Megint beolvasok egy analóg értéket
Meghívom ugyanazt a függvényt, más bemeneti értékkel.Megköszönném ha valaki bevezetne mélyebben a Cbe, mert nagyon az alapoknál vagyok.
Köszönöm szépen!
-
And
veterán
válasz Dißnäëß #16522 üzenetére
Nem bonyolítod túl, illetve csak egy kicsit. Például felesleges LC-szűrés, ha a PWM frekvencia elég magas és a vezérelt eszköz egy tranzisztor / mosfet. Bőven elegendő lehet egy sima egy RC-tag is. Az is számít, hogy mekkora felbontás kell, de az eredendően a PWM-nél sem alacsony, illetve a konkrét áramköri környezet is behatárolhatja a megvalósítást. A digitális potméter sem csodaszer, a szimulált ellenállás / csúszóérintkező potenciálja nem lóghat ki az IC tápfesz tartományából. Sokszor használtam már RC-szűrt PWM-et DC vezérlőjel helyett, az adott célra tökéletesen megfelelt.
-
gyapo11
őstag
válasz Dißnäëß #16523 üzenetére
A pwm jel szűrése lesz egy kicsit problémás, illetve kellő nagyságú kondival nem az, de akkor meg lassú lesz a jel változása.
Próbálkozhatsz shift regiszterrel és d/a átalakítóval, ekkor bármilyen bithosszúság (finomság) használható és a kimeneti jel azonnal beáll fixen, ahogy a bináris számot kiírtad.menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
ekkold
Topikgazda
válasz Dißnäëß #16522 üzenetére
Ha a potméterek csak feszültséget szabályoznak, akkor kiválthatod megfelelő felbontású PWM + aluláteresztő szűrő kombinációval. Ha ennél precizebb dolog kell, akkor egy A/D-vel vissza is mérheted a szűrő utáni feszültséget, és pontosíthatod vele a PWM-et (akár egy PI vagy PID szabályozással). Ha nem simán DC feszültséget szabályoznak a potik, hanem egy áramkör részei, akkor bonyolódik a helyzet (pl digitális potival). Persze pontosabb válaszhoz ismerni kellene a feladatot.
Eladó: https://www.hobbielektronika.hu/apro/apro_159350.html
-
Tankblock
aktív tag
-
Dißnäëß
veterán
válasz ekkold #16528 üzenetére
Köszönöm és az Előtted szóló 2 kollégának is !
Csöves erősítő bias-t (munkapontot) tartana a helyén, ami idővel is, meg bemelegedés után is - a kapcsolásból adódóan - hajlamos picikét elmászni, illetve figyelne a push-pull kimeneten az input csövek eltéréséből (gyártási szórás) adódó DC offset-t is, ez egy másik kézi trimpoti lenne, amivel néha ez itt megjelenő offset-et érdemes visszakorrigálni 0-ra.
Gondoltam, ilyeneket rábíznék valami "automatikára", ne nekem kelljen ezt az amúgy "fix bias"-ú megoldást kézzel tekergetnem X naponta. (Elvileg ritkábban, de csináljuk jól, pontosan).
[ Szerkesztve ]
POKE 16017,44 ..... SYS 2077
-
Dißnäëß
veterán
Áhh, 128-step relay attenuator-el megyek, azon a bemeneten, amit egyáltalán csillapítósra tervezek. Szóval van egy távszabályzós motorizált potim, ami annak ellenére, hogy direktben önmaga is tudna csillapítani, igazából csak említett board-ot hajtja meg, az meg elkattog nekem szépen és lőn hifi.
A fogasléc kiváló, még maradt is valahol Technic Lego-m a gyerekkoromból, lomolok hozzá valamit
Arduino kérdés: hány darab kis OLED-es kijelzőkét tudna meghajtani 1 szem Arduino Micro mondjuk, SPI-n, szerinted ? (3-at kellene, I2C-t meg nem választanám, mert ott sokkal lassabb a frissítési idő).
[ Szerkesztve ]
POKE 16017,44 ..... SYS 2077
-
nagyúr
-
vegyszer
addikt
Sziasztok!
Én most a Black Friday kapcsán futottam bele ebbe a kis cukiságba.
M5Stack M5Stamp C3
13GIO láb, és közvetlenül USB-C segedelmével programozható."Újságírás az, amit a hatalom nem akar nyomtatásban látni. Minden más csak propaganda." George Orwell
-
Dißnäëß
veterán
Ahány szabad lábad marad! Ugye a DI, DO, DC közös, viszont minden kijelzőnek kell egy-egy külön CS lábat biztosítani.
DI, DO, DC közös. Ok.
RES ? (Ez is közös, vagy kijelzőként 1 PIN-t befoglal ?)
CS - kijelzőként 1 PIN. OK.Magyarul 3 digital out pin fix, + 3x CS + 3x RES = legrosszabb esetben 9 digital PIN-re volna szükségem ?
Van egy ilyenem, ellőhetném ide akkor. [link]
[ Szerkesztve ]
POKE 16017,44 ..... SYS 2077
-
nagyúr
válasz Dißnäëß #16542 üzenetére
Miért kéne külön reset láb? Elég 1 közös, úgyis általában 1x kell resetelni a kijelzőket, vagy egyszer se! Az áramtalanítás többnyire reseteli a kijelzőt is. Szóval ha a reset lábakat fixen a tápra kötöd, elég 6 láb is.
Sőt: ha netán kevés lenne a szabad láb, a CS-el is lehet trükközni: egy láb elég két kijelzőnek, ha egy tranzisztorral invertálod, így magas állapotnál az egyik, alacsonynál pedig a másik kijelzővel tudsz kommunikálni. Egyszerre úgyis csak egy kijelzőre szokás írni.
Update: közben rájöttem, hogy ez csak 2 kijelzőnél működik, de azért itt hagyom, hátha vki hasznát veszi.
[ Szerkesztve ]
-
nagyúr
válasz Dißnäëß #16545 üzenetére
A 3 feszültségszintet nem pontosan értem, hogy gondoltad, de 2 lábbal és
2 tranyóval1 tranyóval is lehet szerintem NAND kaput létrehozni, hogy a 3. kijelző csak akkor kapjon magas jelet, ha mindkét láb alacsony. Vagy akkor már lehet valódi NAND kaput is használni a feladatra.
És van még pár lábspórolós trükk a tarsolyomban, ha egyszer szükséged lenne rá.nem gond, ha data közös ?
Miért lenne?
[ Szerkesztve ]
-
Janos250
őstag
válasz vegyszer #16540 üzenetére
És biztosan bejön úgy, hogy nem kell a postán a vámmal vacakolni, fizetni, mert a Bangood árában már a VÁM is benne van, futár hozza a levámolt csomagot. Ez nagy előny, hogy meg lehet kerülni a töketlenkedő postát.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
gyapo11
őstag
válasz Janos250 #16548 üzenetére
Vám 150 EUR fölött van ha nem Európából jön a csomag. A kisebb értékű küldeményeken áfa van és ha a posta vámkezeli, akkor még valamennyi. A BG az áfát vásárláskor beszedi, ezt később átutalja a navnak, Európába behozza valahogy és innen mint európai csomag érkezik az országba, ezért semmi további költség nincs, mivel áfa fizetve, EU-ból érkező csomagra pedig nincs vámkezelés.
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
MPM
tag
válasz gyapo11 #16420 üzenetére
Nah lenne még egy kérdésem: alul a relével párhuzamosan bekötött relé azt a célt szolgálja, hogy ha zár a tranzisztor, akkor lehúzza a földre a relé bemenetét?
Gondolom igen, csak kicsit bezavar az értelmezésemnek, hogy az anódra van a negatív (föld) csatlakoztatva.(A nyitott állapot oké, ekkor nem folyik rajta keresztül áram, a tranzisztortól a föld felé.)
Egyébként nem lehetne egy nagyobb ellenállással helyettesíteni ezt a diódát? Úgy gondolom az is ellátná ezt a feladatot, nyitott tranzisztor esetén arra folyna el az áram, zárt állásban pedig kevés feszültség esne rajta a földtől a bemenet felé.
Javítsatok ki, ha sületlenségeket írok!
Új hozzászólás Aktív témák
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- Telefon felvásárlás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- Telefon felvásárlás!! iPhone 14/iPhone 14 Plus/iPhone 14 Pro/iPhone 14 Pro Max
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Alpha Laptopszerviz Kft.
Város: Pécs