- Samsung Galaxy S21 Ultra - vákuumcsomagolás
- Készül a Galaxy S24 FE
- Google Pixel 6/7/8 topik
- Eredeti dizájnnal tér vissza idén a Nokia 225 4G
- iPhone topik
- Samsung Galaxy A55 - új év, régi stratégia
- Mobil flották
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Honor Magic5 Pro - kamerák bűvöletében
- Prohardver app (nem hivatalos)
Hirdetés
-
Lenovo Essential Wireless Combo
lo Lehet-e egy billentyűzet karcsú, elegáns és különleges? A Lenovo bebizonyította, hogy igen, de bosszantó is :)
-
Engedélygyűjtésbe kezdett a Poco táblagépe
ma 33 wattos töltéssel és 8 megapixeles kamerákkal várható a Poco Pad.
-
Megjelenési dátumot kapott a Metaphor: ReFantazio
gp A tervek szerint a végső kiadás októberben lesz elérhető PC-re és konzolokra.
-
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
-
Tankblock
aktív tag
válasz Yodafon #13548 üzenetére
Szia
Van benne nRF52840 pont amit ajánlottam :-)
Ez nem egy classikus Nano, ez már az új hullámos 3V3 működőek. Azon a lapon van még egy rakat sensor is, ne csodálkozz hogy mennyi az annyi, nem is sok érte.Alin egy break out $18 - $25+ Shipping, és nincs benne semmilyen sensor....
Meglátjuk lehet hogy engem is érdekelRelease the Beast....
-
tonermagus
aktív tag
válasz Tankblock #13552 üzenetére
Nagyon szépen köszönöm!
A sör tényleg kijár Ha adsz egy címet akkor a belgasörmestertől küldök is
Már csak azért is, mert nem vágom pontosan hogy gondoltad. Nem vagyok profi programozó
De így csináltam:
Deklarációs részbe még a setup elé betettem ezt:NeoGPS::Location_t base (gpsadat,gpsadat1);
// amit Nrf-en kapunkNeoGPS::Location_t rover (lan,lon);
// amit helyileg nyer ki a NEO 8M
A loopba pedig:float range = rover.DistanceKm(base);
Így gondoltad? -
tonermagus
aktív tag
Gyanítom hogy nem, mert így sem jó
-
nagyúr
válasz tonermagus #13554 üzenetére
Azt olvastad, amit én írtam?
-
tonermagus
aktív tag
Be kell hogy valljam hogy elcsesztem
A DistanceKM függvénynek teljesen mindegy, hogy int vagy float-ban kapja az adatot mert aLocation_t
class lekezeli/skálázza. A gond ott volt, hogy én a függvényt csak a program elején hívtam meg, amikor még nem volt adata a két paraméternek. Betettem a loopba és szuperül működik Végre kezeli a Base vevőtöl kapott GPS koordinátákat, és ahhoz képest számolja a távolságot.
Már csak egy hiba van: néha felcseréli a két kapott értéket...
Ez nyilván azért van, mert én így küldöm a két adatot:radio.write(&gpsadat, sizeof(gpsadat));
radio.write(&gpsadat1, sizeof(gpsadat1));
Megpróbáltam azt, hogy a küldő Arduinon deklatárltam egy arrayt:float gpsadat[1];
Ezeknek értéket adtam és már ment is aradio.write(&gpsadat, sizeof(gpsadat));
A vevő oldalon pedig szintén deklaráltamfloat gpsadat[1];
-ot és lefut aradio.write(&gpsadat, sizeof(gpsadat));
viszont csak agpsadat[0]
jön át. Mi lehet a gond? -
Tankblock
aktív tag
válasz tonermagus #13557 üzenetére
Szia
[link] Ez segít. A tömb mérete 2 adj meg, ne 1 et.... A 2 hosszú tömb címei a [0 és 1] lesznek....
Dobd fel GIT re a kódot aztán megnézzük... Sztem kevered, mert 1 lokáció 1 lat és egy longitudinal értékből áll. 2 lokáció különbsége kell neked.
Release the Beast....
-
tonermagus
aktív tag
válasz Tankblock #13558 üzenetére
Juj, tényleg...
Array[1]-el nem az Array[0] és az Array[1]-es elemet hozom létre, hanem csak Array[0]-át
Köszi szépen!
Viszont sokszor még most is felcserélve küldi a koordinátákat. Bár ez megoldható úgy, hogy megnézem melyik a nagyobb szám az lesz a latitude Legalábbis Magyarországon és a környező országokban -
zsolti_20
senior tag
válasz tonermagus #13559 üzenetére
Csak egy tipp, de mi történik ha így csinálod?
radio.write(&gpsadat, sizeof(gpsadat));
delay(50);
radio.write(&gpsadat1, sizeof(gpsadat1));
Ha esetleg nem működne, akkor én 1 változóként küldeném át majd a vevő oldalon bontanám szét.
[ Szerkesztve ]
-
Imy
veterán
Arduinoval szeretnék megoldani egy ellenállás mérést, ami hőt mér, és egy KY-040-el egy hőmérséklet beállítást. Ha ezt a kódot [link] futtatom a doksi végén, akkor hiba nélkül megy az encoder poziciójának számolása. Ha ez után beteszem a hőmérséklet mérést, akkor már nem mey, össze-vissza számol:
#include <Adafruit_MAX31865.h>
// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 thermo = Adafruit_MAX31865(10, 11, 12, 13);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);
// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF 430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL 100.0
//Resistance meter
float Ra = 0.00385;
float R0 = 20.9;
float Rt;
float T;
//HW-040 encoder
int pinA = 3; // Connected to CLK on KY-040
int pinB = 4; // Connected to DT on KY-040
int encoderPosCount = 0;
int pinALast;
int aVal;
boolean bCW;
void setup() {
Serial.begin(115200);
Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
thermo.begin(MAX31865_2WIRE); // set to 2WIRE or 4WIRE as necessary
pinMode (pinA, INPUT);
pinMode (pinB, INPUT);
pinALast = digitalRead(pinA);
}
void loop() {
/////////////ENCODER//////////////////////////////////////////////////////////////////////////////
aVal = digitalRead(pinA);
if (aVal != pinALast) { // Means the knob is rotating
// if the knob is rotating, we need to determine direction
// We do that by reading pin B.
if (digitalRead(pinB) != aVal) { // Means pin A Changed first - We're Rotating Clockwise
encoderPosCount ++;
bCW = true;
} else {// Otherwise B changed first and we're moving CCW
bCW = false;
encoderPosCount--;
}
Serial.print ("Rotated: ");
if (bCW) {
Serial.println ("clockwise");
} else {
Serial.println("counterclockwise");
}
}
pinALast = aVal;
Serial.print("Encoder Position: ");
Serial.println(encoderPosCount);
///////////MAX31865////////////////////////////////////////////////////////////////////////////
uint16_t rtd = thermo.readRTD();
//Serial.print("RTD value: "); Serial.println(rtd);
float ratio = rtd;
ratio /= 32768;
Rt = RREF * ratio;
T = ((Rt - R0) / (R0 * Ra));
//Serial.print("Ratio = "); Serial.println(ratio,8);
Serial.print("Resistance = "); Serial.print(RREF * ratio, 2); Serial.println(" ohm");
//Serial.print("Temperature = "); Serial.println(thermo.temperature(RNOMINAL, RREF));
Serial.print("PakaTemp = "); Serial.print(T, 2); Serial.println(" C");
// Check and print any faults
uint8_t fault = thermo.readFault();
if (fault) {
Serial.print("Fault 0x"); Serial.println(fault, HEX);
if (fault & MAX31865_FAULT_HIGHTHRESH) {
Serial.println("RTD High Threshold");
}
if (fault & MAX31865_FAULT_LOWTHRESH) {
Serial.println("RTD Low Threshold");
}
if (fault & MAX31865_FAULT_REFINLOW) {
Serial.println("REFIN- > 0.85 x Bias");
}
if (fault & MAX31865_FAULT_REFINHIGH) {
Serial.println("REFIN- < 0.85 x Bias - FORCE- open");
}
if (fault & MAX31865_FAULT_RTDINLOW) {
Serial.println("RTDIN- < 0.85 x Bias - FORCE- open");
}
if (fault & MAX31865_FAULT_OVUV) {
Serial.println("Under/Over voltage");
}
thermo.clearFault();
}
Serial.println();
//delay(1000);
}
-
nagyúr
Encodert érdemesebb interrupttal kezelni, a pollozás soha nem lesz elég gyors ahhoz, hogy pontos legyen a számolás. Amíg a programnak semmi más dolga nem volt, mint az encodert figyelni, addig persze működött, de a mérés (főleg a rengeteg Serial.print miatt) már túl hosszú ideig tart, kimaradnak lépések.
Ha nincs kedved átírni a kódot, szedj ki minden kiíratást, talán elég lesz és működni fog.[ Szerkesztve ]
-
gyapo11
őstag
Nekem ez van elmentve példának:
const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}
void loop() {
digitalWrite(ledPin, state);
}
void blink() {
state = !state;
}
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
-
Janos250
őstag
Ilyenkor mindig az jut eszembe, hogy sajnáltok 5.5 dollárt, azaz 1600 Ft-ot egy ESP32-ért, ami nagyságrendileg nagyobb sebességgel fut,
valódi két maggal rendelkezik, és pofonegyszerű rajta a párhuzamos programozás az oprendszere miatt. Inkább szívtok egy 3 dolláros lappal. Persze, a mazochizmus is egyfajta élvezet.
https://www.banggood.com/ESP32-Development-Board-WiFi+bluetooth-Ultra-Low-Power-Consumption-Dual-Cores-ESP-32-ESP-32S-Board-p-1109512.htmlAz amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
-
Janos250
őstag
Ha Pi-t akarna használni, akkor valóban új dolgokat kellene megtanulnia, de az ESP32 pont ugyanúgy programozható, ugyanaz a program fut rajta, mint az UNO-n, nanon, vagy a többieken.
A interruptos példaprogramok is. Pl. azattachInterrupt
is.attachInterrupt(GPIOPin, ISR, Mode)
Ugyanazok a paraméterek, ugyanaz a sorrend. Az, hogy van még benne lehetőség, azt nem feltétlen kell kihasználni. Például, hogy az ISR --t betehetjük a gyors memóriába (IRAM_ATTR
), ezek csak pluszok, ami az UNOban nincs, ezeket nem feltétlen kell használni, mehet rajta az UNO program, sokkal gyorsabban.
Nem hiszem, hogy pl. a párhuzamos programozás akkora nehézség lenne. Igaz, a következő példában cout van, nem Serial.print, de természetesen a Serial.print is ugyanúgy használható.
http://arduinouser.hu/esp32/AszalakEsAzESP32.pdfAz amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
tonermagus
aktív tag
válasz Janos250 #13568 üzenetére
Ha már így szóba jött az ESP32: az én GPS projektemhez most jobban járnék ha ESP32-t használnék Mega helyett? Ugyebár A vevő oldalon RF-en adatot olvasok be, tárolok le, majd GPS adatot nyerek ki, számolom a kettő közötti távolságot, majd kiíratom a távolságot. Ebben az esetben lehet szűk keresztmetszet a Mega?
-
Janos250
őstag
válasz tonermagus #13571 üzenetére
Én úgy gondolom, hogy a Mega is elég, de csak gondolom. Az ESP32 méretre kisebb, továbbfejlesztésre alkalmasabb a több lehetőség miatt.
Közben rájöttem, hogy nem is kell neked az RF nagy távolság, mert csak akkor kell a távolságot pontosabban számolni, ha már közel van. Távolabb elég a síma GPS pár méteres pontossága is. Jól gondolom?Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Tankblock
aktív tag
válasz tonermagus #13571 üzenetére
Szia,
nem hinném, inkább a konceptciót kell jól átgondolni (design) és programozni megtanulni, mert a Mega-ba van elég sok lehetőség HW esen. Ennyi erővel STM32 vonalra is felszálhatnál, vagy Nordic chipjeit is használhatnád directbe, gondolom most is azt használod :-)
Release the Beast....
-
-
tonermagus
aktív tag
válasz Janos250 #13572 üzenetére
Janos250: Sajnos mind a két koordinációra pontosan kell hogy beessen
Tankblock: Nem tudom miről beszélsz, azt se tudom ki- vagy mi az a Nordic, STM32-ről már ne is beszéljünk Jó, ki tudnám googlizni És pont ezt szeretem ebben a "hobbiban" (mert nekem ez csak az) hogy én csak hobbi "programozó" vagyok, sokszor az alapokkal sem vagyok tisztában, az elektronikával is csak fél éve ismerkedem de mégis mindent megvalósítottam eddig, még ha nem is elegáns módon Fél éve még azt se tudtam mi az az áramerősség, mi az a Serial port, azt meg pláne hogy lehet oda adatot kiíratni/beolvasni -
Dißnäëß
veterán
Összehoztam Leonardo-val egy hifi készülékre egy főkapcsoló + nyomógomb + LED standby funkciót. Háténolyanbüszkevagyokmagamraszeretlekarduino
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
Tankblock
aktív tag
válasz tonermagus #13575 üzenetére
Szia értelek,
csak azok nélkül a fránya alapok nélkül - Janos250 után szabadon csak mazoizmus és nem hobby.
A lényeg hogy a problémát bontsd le elemi egységekre majd azokat old meg egyesével példa programokban és után jön az egész összerakása. Ott még érhet meglepetés, mikor integrációkor kiderül, hogy egy timert használ több könyvtár, vagy úgy már nem is gyors :-P
Release the Beast....
-
Imy
veterán
válasz gyapo11 #13566 üzenetére
Akárhogy is próbálkozok, nem találok rendesen működő példát. Van hogy kihagy az encoder számolása, ha van benne más is.
[link] Itt a 18-as hozzászólást próbáltam, de nem igazán működik ez sem.
Az interruptot meg fogalmam sincs, hogyan kell kezelni. Nem értek én annyira az arduinohoz. -
nagyúr
Ez a példa félig működik csak jól, mert ugyan minden változásra reagál, de a számlálást ugyanúgy a loopban végzi. A számlálást be kell tenni az isr-be, akkor jó lesz.
Próbáld ezt:volatile boolean TurnDetected;
volatile boolean up;
volatile long virtualPosition=0;
const int PinCLK=2; // Used for generating interrupts using CLK signal
const int PinDT=3; // Used for reading DT signal
const int PinSW=4; // Used for the push button switch
void isr () { // Interrupt service routine is executed when any CHANGE transition is detected on CLK
volatile boolean CLK = digitalRead(PinCLK);
volatile boolean DT = digitalRead(PinDT);
up=((!CLK && DT)||(CLK && !DT));
if (up)
virtualPosition++;
else
virtualPosition--;
TurnDetected = true;
}
void setup () {
pinMode(PinCLK,INPUT);
pinMode(PinDT,INPUT);
pinMode(PinSW,INPUT);
attachInterrupt (0,isr,CHANGE); // interrupt 0 is always connected to pin 2 on Arduino UNO
Serial.begin (9600);
Serial.println("Start");
}
void loop () {
if (!digitalRead(PinSW)) { // check if pushbutton is pressed
virtualPosition=0; // if YES, then reset counter to ZERO
Serial.print ("Reset = "); // Using the word RESET instead of COUNT here to find out a buggy encoder
Serial.println (virtualPosition);
}
if (TurnDetected) { // do this only if rotation was detected
TurnDetected = false; // do NOT repeat IF loop until new rotation detected
Serial.print ("Count = ");
Serial.println (virtualPosition);
}
}[ Szerkesztve ]
-
gyapo11
őstag
Az interrupt megszakítást jelent, a futó programot elhagyja, és az interrupt kiszolgáló függvényt kezdi el futtatni.
A példámban van egy loop() és van egy blink(). Azt tudjuk, hogy a loop() állandóan fut, ha a végére ér, akkor kezdi elölről. Na most a 2-es pint lehúzzuk testre. Ekkor a loopból kiugrik (megjegyzi, hogy hol tartott), és végrehajtja a blink() függvényt, amit hozzárendeltünk az interrupthoz. Ez a függvény ellentétesre váltja a led állapotát leíró változót, és a vezérlés visszatér oda, ahonnan az interrupt kirántotta, vagyis a loop()-ba. Röviden ennyi a lényeg. Érdemes még figyelni a prellre és az irq letiltására, ha bonyolultabb a függvény és több idő lehet a végrehajtása mint két interrupt közötti idő.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
-
nagyúr
válasz Dißnäëß #13586 üzenetére
"Érdemes még figyelni (...) az irq letiltására"
Akkor már leírom azt is, hogy miért: hosszabb megszakítások elején szokás letiltani az összes megszakítást (a végén pedig újra engedélyezni), hogy ne történhessen meg az, hogy a megszakítás közepén új megszakítás aktiválódjon. Ez jelen esetben pl egy pergés esetén fordulhat elő. Mivel a megszakításkor a processzor a programszámlálót és az állapotregisztert a verembe (stack) menti, szélsőséges esetben az is előfordulhat, hogy túlcsordul a verem, illetve felülírja a ram teljes tartalmát.
-
Dißnäëß
veterán
Az ott balra egy piros LED gyűrűvel ellátott pushbutton. A készülék főkapcsolója a fenekén van. Táp bedug, főkapcsoló bekapcsolásra még a kütyü nagy trafója nem indul, egy külön nyáktrafó viszont áram alá kerül, ami fesszabályzott egyenirányítással ad stabil 5V-ot egy Leonardo-nak. Az meg fade-elgeti a LED-et félhalványan ki-be szép lassan. Amint a gombot megnyomom egyszer, ugyanúgy, mint bármilyen gyári eszköz, indul a mandula. Az Arduino egy 5A/250VAC relével zárja a nagy trafó primer körét, éled az összes szekunder (fűtések + anódfeszek) és indul az erősítő. (A relé tekercs áramfelvétele pont az Arduino limitjén belül van). LED gyűrű meg folyamatosan világítóra vált. Amint megint megnyomom a gombot, relé elenged (normally open), a nagy trafó primer köre megszakad és a készülék nagyja kikapcsol, LED megint fade-elget. Kb ennyi egyelőre. Implementáltam még a kódba a fade mellé a debounce-ot is az example-ök közül, ami a nyomógomb zajt semlegesíti, tehát még véletlen sem, illetve akarva sem tudom megcsinálni azt, hogy egymásután többször gyorsan megnyomva a gombot a relé elkezd mint az állat ki-be kapcsolni. Ez küzdős volt, a fade loop-al jól összehozni, de valahogy kiokoskodtam és tökéletes most.Van egy másik Arduino-m, egy Raspberry Pi Meet Aurdino-m (ami szintillesztésre is kiváló Pi és Arduino feszek között), de ezt magában, Pi nélkül fogom szerintem a következő projektbe betenni és jópár dolgot figyeltetni vele az erősítő működésében. (Az nagy erősítő lesz, nem fejhallgató erősítő, mint ez).
Ha meg elég merész lennék, a wifis ESP32-t befognám és írnék hozzá egy appot, de bilibe lóg a kezem, azt majd később
[ Szerkesztve ]
Lá lá lá lá lááá lááá.. Lá lá lá lá lááá lááá .. Lá lá lá lá lááá lá lááá lá lá lá lááááá láááá
-
nagyúr
Dehogynem jó! Pont azt csinálja a program, amit kell neki. Mivel az encoder gyorsabban foroghat, mint ahogy a lap ki tudja írni az adatokat serial porton, ezért nem lesz minden lépés kiíratva, csak az aktuális pozíció. Teszteld le: jelöld be az encodert egy pozícióban, és tekergesd oda-vissza párszor, majd nézd meg, hogy pontosan követi-e a kiírt adat a valóságot! Ugyanabban a pozícióban ugyanazt a számot kell neki kiírnia.
Ha mégse lett igazam, akkor alighanem pergésmentesíteni kell.[ Szerkesztve ]
-
nagyúr
Hogy a viharba ne lenne megszakítással megoldva?
Hogy érted azt, hogy nem működik?
Ugye átírtad ezt a részt a saját bekötésednek megfelelően?const int PinSW=3; // Rotary Encoder Switch
const int PinDT=4; // DATA signal
const int PinCLK=2És nem értem, hogy miért, de nincsenek inicializálva a pinek bemenetként, ki kell egészíteni a programot:
pinMode(PinSW, INPUT_PULLUP);
pinMode(PinDT, INPUT_PULLUP);
pinMode(PinCLK, INPUT_PULLUP);A saját kód, amivel ki szeretnéd egészíteni a programot, miből áll? Tartalmaz delay-t vagy serial.print-et?
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Házimozi belépő szinten
- Xbox tulajok OFF topicja
- Androidos tablet topic
- Brogyi: CTEK akkumulátor töltő és másolatai
- Milyen routert?
- Samsung Galaxy S21 Ultra - vákuumcsomagolás
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Készül a Galaxy S24 FE
- Google Pixel 6/7/8 topik
- Amazon Fire TV stick/box
- További aktív témák...
- XBOX ONE/PS4/PS5/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!
- XBOX SERIES/PS4/PS5/XBOX ONE/NINTENDO SWITCH konzolt vásárolnék!
- PS5/PS4/XBOX ONE/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!
- Új Dobozos Lenovo Ideapad Flex 5 x360 Érintős Ultrabook Óriás Tab 16" -40% Ryzen 5 5500U 16/512 QHD
- PS4/PS5/XBOX ONE/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!