Hirdetés
-
LOGOUT.hu
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
-
Hello,
Van 1-2 szervóm, aminek nem tudom a bekötését. (Kb. ilyen.) Megvettem, aztán jól elfelejtettem felírni, melyik vezeték melyik.
Hogyan tudom kideríteni, mit hova? (Gúgli megvolt, csak ugye a kínai vagy olyan kiosztást használ, vagy nem... Ilyesmi érdekelne, hogy pl. mi mérhető a szálak között)
Azt már régebbről tudom, hogy a fordított polaritást nem szeretik[ Szerkesztve ]
Mutogatni való hater díszpinty
-
nagyúr
Piros +V, fekete GND, sárga vezérlőjel. Ha nem ez a három szín vagy ehhez hasoló van, akkor nemigen tudod kimérni szerintem. Kezdetnek adj rá vmi törpe feszültséget (pl ceruzaelem), ha megmozdul, akkor eltaláltad a tápot és a polaritást.
Többféle kínai szervót is vettem már, de fel sem merült még bennem, hogy rossz bekötés is lehet. Ezen szerintem nem szokták elqrni a színkódokat.[ Szerkesztve ]
-
-
-
nagyúr
Mondom: már vagy 4 különböző kínai szervót teszteltem, asszem volt közte ilyen barna-sárga-fekete is, de egyik se ment tönkre rossz bekötés miatt. Egyedül akkor gyanakodnék, ha fehér-zöld-fekete vagy hasoló lenne, mert fehér szokott lenni jel és táp is.
USB-ben is láttam már meredek színeket
Az semmi, asszem itt a topikban is volt már valaki, aki li-po akksit kapott, amin vagy a piros-fekete vezeték volt fordítva, vagy a csatlakozó, már nem emlékszem, de egy esp32 lolin lap bánta a dolgot, és még jó, hogy nem lett robbanás belőle. Szóval nyugi, nincsenek illúzióim. Én ilyen dolgokat multiméter nélkül sosem kötök sehová.
[ Szerkesztve ]
-
Nekem egy más elpusztult fordított bekötés miatt, azért kérdezek itt, hogy hogyan lehet megtudni, mi a helyes
Az akkun felcserélni, az szép.... Én még csak (elég komoly) RC távirányítóba fordítva beültetett akkucsatit -> szerencsére az AA cellás volt, és csak pár 7805 bánta.
Mutogatni való hater díszpinty
-
repvez
addikt
na lassan megérkezik az összes modulom, a kérdésem az lenne, ha jol gondolom, ha a modulokat a VCC, GND , SDL,SDA részekre kell kötni, akkor az összes modul mehet egy helyre és amjd a kodolásnál lesz megkülönböztetve a regiszter által , hogy mikor melyik mmodulra vonatkozik ?
Mert ugye SDA, és SDL lábak csak egy helyen vannak és én szeretnék több modult használni egyszerre,
Ha jol értettem a leirásokat akkor ez az I2C .
Az mindegy, hogy sorosan vagy párhuzamosan kötöm be öket ?
[link]
Egy ilyen panelra akarom összerakni első körbe öket.
Egy AHT10es temp senzort, egy MUP9250est, és egy VL53LO lézeres távolság mérőt, később még egy NEO-8m GPS modul .
Egy NANO alap panelre kötve.Bűrmilyen infot tanácsot szivesen fogadok
-
nagyúr
válasz repvez #14059 üzenetére
az összes modul mehet egy helyre és amjd a kodolásnál lesz megkülönböztetve a regiszter által
Így van, egész pontosan az i²c address az, ami megkülönbözteti a modulokat. Remélhetőleg gyárilag mind különböző címet kapott, mindenesetre minden modult külön próbálj ki. Amire még esetleg szükséged lesz az mindkét vonalra egy-egy 4k (ezt most fejből írom, majd vki kijavít, ha rossz/nézz utána pontosan) felhúzó ellenállás. Nem modulonként, hanem vonalanként 1-1. Ha valamelyik modulon van gyárilag felhúzó, az elég lehet az összes számára. Ha a lap és a modul hosszú vezetékkel lesz összekötve, akkor kisebb értékre lesz szükség.
Az mindegy, hogy sorosan vagy párhuzamosan kötöm be öket ?
Dehogy mindegy, sorosan be sem lehet kötni, hogy gondoltad?
-
repvez
addikt
köszi,
Ezeket a reg cimeket, honnan tudom, meg? bármelyik manuált letöltve ugyan az lesz mindegyiké vagy az összes chipnek van sajátja?
Ha egy adott modulnak csak egyfajta registere van akkor kettő vagy többet hogy lehet ugyan abbol a modulbol használni ?HA nem tudom , hogy van e felhuzo ellenállás a panelokon, akkor enélkül nem is tudom tesztelni öket ?
Per pillanat nincs semilyen ellenállásom se itthon.
ÉS azt hogy érted, hogy mindegyik vonalra és nem modulhoz kell ilyen ?Mitől , függ, hogy honnan számit hosszúnak a vezeték aminél már kisebb ellenállás kell?
jelenleg csak 20cm es vezetéket tettem rá tesztelni, de későnn ez változhat.A párhuzamos soros részt, ugy értettem, hogy ha 4 modult teszek rá akkor mindegyik lábhoz 4 vezetéket kell bekötni vagy beköthetem ugy is, hogy az egyik modul SDL lábárol a másik modul SDL lábára aztán a 3. és 4ére kötöm , majd a 4. től vezetem csak vissza a panelra és igy csak két vezeték menne a panel azonos lábaira:
-
Janos250
őstag
válasz repvez #14061 üzenetére
"Ezeket a reg címeket, honnan tudom, meg?"
https://playground.arduino.cc/Main/I2cScanner/
"ugyan az lesz mindegyiké vagy az összes chipnek van sajátja? "
Általában fajtánként különböznek, de van, hogy egy adott fajtából is van több című. Nekem volt olyan - hirtelenjében nem jut eszembe mi volt - aminél a gyári jel után volt A0, A1,.. amiknek különböztek a címei. Hogy ezeket át lehet-e írni, azt nem tudom, de azt sejtem, hogy nem.
"Ha nem tudom , hogy van e felhúzó ellenállás a panelokon, akkor enélkül nem is tudom tesztelni őket ?"
A mikrokontroller GPIO lábát programozod úgy, hogy kapcsoljon be felhúzó ellenállást.
"azt hogy érted, hogy mindegyik vonalra és nem modulhoz kell ilyen"
A vezeték végig megy , a vezetékre csak egy helyen kell, pl. a kontrollerben, nem kell minden eszközhöz külön.
"vagy beköthetem úgy is"
Igen.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
And
veterán
válasz repvez #14061 üzenetére
A slave-címeket alapvetően a chip határozza meg, vagyis egy adott slave eszköz / modul adatlapján, leírásában lehet találkozni vele. Sok esetben legalább részben módosítható a cím, pl. a chip három lábának alacsony / magas szintre kötésével beállítható - a szokásosan 7-bites - cím három bitje, így abból akár nyolc is felfűzhető ugyanarra a buszra. A többi része fix, illetve van olyan típus is, amelynél az alacsony lábszám ára, hogy totál fix címe van. Létezik egyetlen input lábon analóg feszültségszinttel beállítható című slave is. Szóval modulja és a ráépített chipje válogatja, hogy mennyire szabadon állítható be a cím, ha egyáltalán módosítható.
"HA nem tudom , hogy van e felhuzo ellenállás a panelokon, akkor enélkül nem is tudom tesztelni öket ?"
Nem. Felhúzó ellenállás mindenképp kell, mivel a busz két vezetéke a slave-eken nyitott kollektoros tranzisztorokhoz kapcsolódik. Itt látható a jellemző I2C-busz felépítés: [link].
"Mitől , függ, hogy honnan számit hosszúnak a vezeték aminél már kisebb ellenállás kell?"
Van erre többféle leírás, app-note, néha még a slave-ek adatlapja is ad erre útmutatót. Általános esetben 4,7 kΩ körüli felhúzók megfelelnek, de az érték függ a busz hosszán felül a tápfeszültségtől (amire az I2C-busz fel van húzva, lásd az előbb linkelt ábrát) és a slave-ek típusától, darabszámától. Egyébként az I2C-vonalat nem túl nagy hosszra szokás tervezni, vagy ha igen, a sebességet lehet csökkenteni, illetve léteznek transzparens buszmeghajtók is ilyen célra. Azért egy-két méteren belül jó esetben nem lesz szükséged ilyesmire.
Mod. a #14062-re: a portra kapcsolható, uC-n belüli felhúzó megfelelhet, de mivel az általában túlságosan nagy értékű (sokszor 10 kΩ nagyságrendű), esetenként nem kerülhető meg a külső felhúzó. Ez főleg nagyobb buszsebesség, több slave és relatív nagy busztávolságok esetén igaz.[ Szerkesztve ]
-
nagyúr
válasz repvez #14061 üzenetére
Ezeket a reg cimeket, honnan tudom, meg?
Gyári adatlapból, de ha egy modulhoz van library, abban ez valószínűleg előre be van állítva.bármelyik manuált letöltve ugyan az lesz mindegyiké vagy az összes chipnek van sajátja?
Gyárilag egyforma, igen.Ha egy adott modulnak csak egyfajta registere van akkor kettő vagy többet hogy lehet ugyan abbol a modulbol használni ?
Van olyan i²c eszköz, amelyiknek hardveresen vagy szoftveresen változtatható a címe bizonyos korlátok közt, pl 2-3 címbit külső lábakra kivezetve, ezekből többet is fel lehet használni, amennyit a címtartomány enged. Amelyiket nem lehet változtatni, abból csak egyet tudsz használni egyszerre.HA nem tudom , hogy van e felhuzo ellenállás a panelokon, akkor enélkül nem is tudom tesztelni öket ?
Mérd ki egy multiméterrel a Vcc és az SDA, valamint a Vcc és SDL közti ellenállást. Ha kOhm tartományt mérsz, az a felhúzó ellenállás lesz. Persze ne működés közben, hanem kiszerelve mérd.ÉS azt hogy érted, hogy mindegyik vonalra és nem modulhoz kell ilyen ?
Két db. ellenállás kell, egy a Vcc és az SDA, egy pedig a Vcc és SDL közé.Mitől , függ, hogy honnan számit hosszúnak a vezeték aminél már kisebb ellenállás kell?
jelenleg csak 20cm es vezetéket tettem rá tesztelni, de későnn ez változhat.
Az rövid. A hosszú mondjuk 1,5-2m-nél kezdődik.A párhuzamos soros részt, ugy értettem, hogy ha 4 modult teszek rá akkor mindegyik lábhoz 4 vezetéket kell bekötni vagy beköthetem ugy is, hogy az egyik modul SDL lábárol a másik modul SDL lábára aztán a 3. és 4ére kötöm , majd a 4. től vezetem csak vissza a panelra és igy csak két vezeték menne a panel azonos lábaira:
Dehát attól még mindkettő párhuzamos. Az egyik csillagpontos, a másik daisy-chain (ha jól tévedek). De utóbbinál a lánc hosszúságával nő a zavarérzékenység, és csökken(het) a sebesség.Hű, jó sokáig írtam a hozzászólást.
[ Szerkesztve ]
-
hukhl
csendes tag
Sziasztok!
Lenne egy kezdő kérdésem. Nyomógomb lenyomásainak számát számolom és erre léptetek állapotokat, mint egy állapotgép szerűen. Az egyes állapotokban 4 db LED-et villogtatok. (minden állapotban más-más sorrendben) Először delay-t használtam. Ezzel az volt a gond, hogy, amíg az egyik állapotom nem járt le addig nem tudtam tovább léptetni.
Aztán rátaláltam a millis()-re amivel szépen meglehetne ezt oldani. Mivel sok LED-em van és sok állapotom, így arra gondoltam, hogy ezt behívható funkcióként kellene megcsinálni. És amikor az egyik állapotban meghívom, akkor megadom a funkció bemeneti értékként a kívánt LED számát és a késleltetés idejét. Ezt a funkciót egy állapotban többször meghívva különböző LED-eket különböző ideig lehetne villogtatni. És közben elvileg a nyomógombom állapotát is tudom figyelni.
Idáig jutottam:
//---------------
//Function
//--------------bool LedMillis(long interval, int LEDPin, unsigned long currentMillis, bool ledState){
bool LEDStateResultInternal;
unsigned long previousMillis = 0;if (currentMillis - previousMillis >= interval)
{if(ledState == LOW)
{
ledState = HIGH;ledState = LEDStateResultInternal;
}
else{
ledState = LOW;
ledState = LEDStateResultInternal;
}
previousMillis = currentMillis;
digitalWrite(LEDPin, ledState);
}
return LEDStateResultInternal;
}Az adott kimenet számát, amelyhez a LED tartozik - LEDPin értéken adom be
CurrentMillis-nél az aktuális Millis értéket adom be
ledState-értéknél pedig a returnként visszaadott led állapot csatolom vissza.A previousMillis értékem sajnos mindig 0 marad mivel újra meghívódik a funkció és kinullázódik.
A previousMillis érétket valahogy funkció meghívásonként el lehet tárolni valahogy külön-külön?
Visszatérési értékként lehet több különböző adatot visszaadni?
Bocsánat, ha kicsit katyvasznak tűnik így elsőre.
Még szoknom kell ezt a környezetet.Köszönöm a segítséget!
[ Szerkesztve ]
-
hukhl
csendes tag
Köszönöm aryes és neked is Janos250!
Ez a globális változó ez bejött.Viszont a funkcióból sajnos nem sikerült kinyernem a return értéket. Biztos valami alap nyelvtani hibát vétek ami miatt nem sikerül. Monitorozva a programot, sajnos nem kapom meg kívülre az értéket...
Lent látató az eddigi kód bejelölve ahova át akarnám másolni a visszatérési értéket majd újra betenni a funkcióba. Így megoldani a LED ki és bekapcsolását...Végig gondolva az eddig megírt funkciót, ha többször fogom behívni akkor a "previousMillis" értékeket külön-külön kell nyilvántartani, mivel más időintervallumot fogok megadni az egyes ledekhez és így máskor kapja meg majd az aktális Millis értéket.
//---------
//Constans
//---------
const int LED1 = 12;
const int LED2 = 10;
const int LED3 = 8;
const int LED4 = 6;
const int BUTTON1 = 4;
const int BUTTON2 = 2;
//---------
//Variables
//---------
unsigned long previousMillis = 0;
int Button1State = 0;
int Button2State = 0;
int Button1LastState = 0;
int Button2LastState = 0;
int Button1CountState = 0;
int Button2CountState = 0;
bool LedStateResult = LOW;
//-------------------
// Start Initializing
//-------------------
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(BUTTON1, INPUT);
pinMode(BUTTON2, INPUT);
Serial.begin(9600);
}
//--------------------
//Main CODE start here
//--------------------
void loop() {
Button1State = digitalRead(BUTTON1);
unsigned long currentMillis = millis();
//---------------------------------
//Button State Reading and Counting
//---------------------------------
if (Button1State != Button1LastState) {
if(Button1State == HIGH){
Button1CountState = Button1CountState+1;
Serial.println("BUTTON STATE CHANGED");
}
}
Button1LastState = Button1State;
Serial.print("LED Result Main Loop : ");
Serial.println(LedStateResult);
//-----------------------------------------
//State machine according to Button 1 State
//-----------------------------------------
switch (Button1CountState)
{
case 0:
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
Serial.println("CASE0");
break;
case 1:
LedMillis(2000, LED1, currentMillis, LedStateResult);
LedStateResult = LedMillis;
// Serial.print("Millis Function Reuslt: ");
// Serial.println(LedMillis);
Serial.print("LED Result CASE1 : ");
Serial.println(LedStateResult);
//LedMillis(500, LED2, currentMillis, LedStateResult);
// LedMillis(500, LED3, currentMillis, LedStateResult);
Serial.println("CASE1");
break;
case 2:
Serial.println("CASE2");
break;
case 3:
Serial.println("CASE3");
break;
case 4:
Serial.println("CASE4");
break;
case 5:
Serial.println("CASE5");
break;
case 6:
Serial.println("CASE6");
Button1CountState = 0;
break;
}
}//----------
//Function
//-----------
bool LedMillis(long interval, int LEDPin, unsigned long currentMillis, bool ledState){
bool LEDStateResultInternal;
Serial.print("Previous Millis :");
Serial.println(previousMillis);
Serial.print("Current Millis :");
Serial.println(currentMillis);
if (currentMillis - previousMillis >= interval)
{
if(ledState == LOW)
{
ledState = HIGH;
LEDStateResultInternal = ledState;
Serial.print("LED Result LedState High :");
Serial.println(LEDStateResultInternal);
}
else{
ledState = LOW;
LEDStateResultInternal = ledState;
Serial.print("LED Result LedState Low :");
Serial.println(LEDStateResultInternal);
}
previousMillis = currentMillis;
digitalWrite(LEDPin, ledState);
Serial.print("LED Result Final LedState :");
Serial.println(ledState);
}
return LEDStateResultInternal;
} -
Szia, ez
LedMillis(2000, LED1, currentMillis, LedStateResult);
LedStateResult = LedMillis;nem pont azt csinálja, mint szeretnéd, hanem a függvény címét másolná bele változóba. Neked ez kell:
LedStateResult = LedMillis(2000, LED1, currentMillis, LedStateResult);
Persze nem sok értelme van, mert amúgy is át adod neki azt a paramétert, szóval akár belül is módosíthatod. Üdvözöllek a pointerek bűvös világában
[ Szerkesztve ]
I did nothing, the pavement was his enemy!
-
hukhl
csendes tag
Szia!
Igen ennél a sornál akarnám beírni a "LedMillis" funkció visszatérési értékét a "LedStateResult "-ba, hogy a következő funkció lefuttásnál már ezzel a beolvasott értékkel dolgozzon a funkció. Ekkor elvileg 2000 msec-onként a visszatérési érték negálódik és ezzel a LED kivezérlési értéke is. -
hukhl
csendes tag
Bocsánat a szerkesztésért.
Ahogy fentebb írtam. Egy olyan funkciót szeretnék megírni. Ahol paraméterként egy idő intervallumot és egy pin számot kellene megadni. Amivel a pin-hez tartozó LED-et megadot ideig villogtatom. És van egy állapotgép, amit nyomógombbal léptetek. Az egyes állapotokhoz ezt a funkciót hívnám be. Ahol mindig más és más idő intervallmot adnék majd meg. Tudom elég nyakatekert. -
nagyúr
Értem! Ezt ilyen formában szerintem nem igazán lehet megoldani, illetve feleslegesen túl van komplikálva.
Ahogy én csinálnám: létrehoznék egy LED class-t, aminek 4 metódusa lenne: inicializáló, ahol beállítod a villogás idejét, start, stop, és egy frissítés, amit minden loop ciklusban meg kell hívni, ez ellenőrzi, hogy mennyi idő telt el, kell-e már ki-be kapcsolni a LED-et. Ebből annyi példányt csinálsz, ahány LED van, így az összeset egymástól függetlenül lehet villogtatni. Ha a class túl magas labda, hasonló logikát meg lehet valósítani függvényekkel is, de mindenképp külön inicializáló és külön villogtató(frissítő) függvény kellene.[ Szerkesztve ]
-
Janos250
őstag
Ezért - is - jobb a párhuzamos programozás.
Tulajdonképpen azt csinálja, amit leírtál, csak el van rejtve.
Amikor el kell indítani egy led villogtatását, elindítom egy külön taskként, ami majd megszűnik, amikor lejár az idő.
Nincs gond az átlapolással, miegymással, a taskok nem zavarják egymást, az op. rendszer elintézi, hogy mind kapjon egy időszeletet, de senkit ne zavarjon.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Alu
senior tag
Sziasztok!
STM32 -vel kapcsolatban lenne egy kérdésem és bár nem Arduino környezet, azért bízom benne, hogy nem hajtotok el.
STM32F103C8T6 (BluePill) + St-Link v2 + Keil
UART olvasás jelenleg DMA módban van konfigurálva, melynek előre meg kell határozni azt a byte hosszúságot, ami után interruptot dob és meghívódik az RxCpltCallback függvény. A probléma, hogy a másik eszköz 8 vagy 16 byteosával küldi az üzeneteket és ezeket kellene dekódolnom a mikrovezérlővel. A kérdésem pedig az lenne, hogy ha a dma interruptot 8 bytera állítom, akkor abban az esetben mi történik, ha 16 byteot küld a másik eszköz? A 8. byte beérkezésével jön egy megszakítás, majd kb. rögtön (konkrétan 8 byte idővel később) jönne egy újabb megszakítás?λŁƯ™
-
Alu
senior tag
Direct memory access. Amikor szoftverben felkonfigurálod ezt a módot, akkor megadsz egy tömböt és ő cpu idő nélkül hardveresen beteszi a bejövő adatokat a megadott tömbbe. Ha pedig beérkezett az a mennyiségű byte, amit az elején megadtál, akkor generál egy megszakítást.
λŁƯ™
-
Janos250
őstag
Vannak itt páran, akik foglalkoznak STM32-vel, ha erre járnak, biztosan válaszolnak.
Páran, így hirtelen, ha nem vennék észre, őket keresd:
ecaddsell, Tankblock, fpeter84, tvamos
Bár tvamos már nemigen jár erre, pedig a PH-n még itt van.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos46
tag
Sziasztok!
Találtam egy jó kis oldalt, ami 339 példa programot tartalmaz az aurdino számára. Amiket kipróbáltam, az mind működött is.
https://robojax.com/learn/arduino/Robojax.com forráskód a YouTube videókhoz
Ez az oldal a videók forráskódjának megosztására szolgál a Robojax YouTube-csatornáján.Artillery, lelkes újonc vagyok, tanulni akarok!
-
Janos46
tag
Sziasztok.
Segítséget kérnék és köszönöm ha sikerül. Van az alább mellékelt porgram, ami nem akarja az igazságot. Ha nincs csatlakoztava a TM1632-es, akkor a portmonitoron megjelennek az adatok. Azonban ha csatlakotatom, akkor sem a portmonitoron, sem a kijelzőn nem láthatóak. A hw jó, mert az előzőben említett oldalról letöltött másik kicsit hasonló prgram azonos csatlakozó-kiosztással működik// https://vk-book.ru/ultrazvukovoj-dalnomer-hc-sr04/
// a TM1637 kijelző csatlakoztatása
#include <TM1637.h>
#define CLK 3
#define DIO 2
TM1637 tm1637(CLK,DIO);
// пины для HC-SR04
int echoPin = 12;
int trigPin = 11;
void setup() {
Serial.begin (9600); // a portmonitor kimenete
pinMode(trigPin, OUTPUT); // jel küldése
pinMode(echoPin, INPUT); // jel vétele
// kijelző inicializálása
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);
}
void loop() {
int duration, mm; // változók a távolság tárolásához
// hagyja abba a jel küldését
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// küldjön ultrahangos jelet
digitalWrite(trigPin, HIGH);
// várjon 10 mikroszekundumot
delayMicroseconds(10);
// hagyja abba a jel küldését
digitalWrite(trigPin, LOW);
// méri az echoPin pozitív impulzusának hosszát
duration = pulseIn(echoPin, HIGH);
// számolja ki az akadály távolságát
mm = duration / 5.8;
// adatkimenet a portmonitorhoz
Serial.print(mm);
Serial.println(" mm");
// adatkimenet a kijelzőhöz
tm1637.display( mm );
delay(1000);
}
Artillery, lelkes újonc vagyok, tanulni akarok!
-
-
-
Janos250
őstag
Rólad meg elfeledkeztünk :-(
Nem tudom jutottál-e már valamire?
A problémát én a következőkben látom: IDŐ !!!Ha egy függvényt csinálsz, ami adott ideig villogtat, akkor az addig fogja a programot, nem megy tovább. Ha jól értem, amit akarsz csinálni, akkor ez itt elakad, amíg be nem fejeződik a villogás, nem megy tovább, és ez gond.
1. Vagy több loopot csinálsz, és mindegyikben egy-egy ledet kezelsz ciklusban. (Milyen lapon csinálod?)
Akkor időszeletben fut párhuzamosan az összes függvényed, és kezeli egy-egy függvény egy-egy loopban a kapcsolóidat, ledjeidet.2. Vagy muszáj az egy loopban folyamatosan vizsgálni ciklikusan az összes ledet, hogy melyiknek éppen milyen a státusa és hol tart. Ha kell, beavatkozol.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Janos46 #14084 üzenetére
Kíváncsiságból megnéztem ez a displayt, bár pont ugyanezt szerintem soha nem használtam. (És másikat is évekkel ezelőtt)
A neten van egy csomó könyvtár a kezelésére, nem tudni, melyiket használod.
Talán ezt:
https://github.com/Seeed-Studio/Seeed_Grove_4Digital_Display_g/blob/master/TM1637.h
Ennek viszont egyik display tagfüggvényéhez se passzol - úgy vélem - a te hívásod.
Ez van a .h-ban:
void display(int8_t DispData[]);
void display(uint8_t BitAddr,int8_t DispData);
Ez meg nálad:
tm1637.display( mm );Ez egyikhez sem passzol. Vagy másik könyvtárat használsz?
Ha nem tudjuk pontosan, melyik könyvtárat használod, nehéz lesz ötletet adni!Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Alu
senior tag
Én is gondoltam erre, de tartottam tőle, hogy a 2. megszakítás kritikusan gyorsan következne és beleszólna a tömb másolásba. No meg akkor a feldolgozást is alaposan át kellett volna gondolni. Végül máshogy oldottam meg. A másik eszköz amúgy egy Nextion kijelző és minden eventnél saját magam határoztam meg, hogy mit küldjön az stm -nek. Minden üzenet fix 16 byteos lett, bár megesik, hogy ebből csak 2 byte hasznos, a többi '0x00'... de legalább egységes és könnyebben tudom kezelni stm oldalon. DMA -t is kukáztam és interruptos megoldást alkalmaztam. Jó fél nap volt, mire rájöttem, hogy mi a különbség az interrupt és a dma kezelés között. Ráadásul dma -nál is annyi mindent be tudsz konfigurálni, mint égen a csillag... Eddig nem tűnt fel, de Arduban hatalmas segítség, hogy a szoftver elég sok mindent lekezel a háttérben. Igaz így a kezed is jobban meg van kötve, de valamit valamiért.
#14080 Janos250: Köszi! Privátban éri őket zaklatni?
[ Szerkesztve ]
λŁƯ™
-
hukhl
csendes tag
válasz Janos250 #14089 üzenetére
Szia!
Igen előrébb jutottam a témával kapcsolatban
#1404 - aryes - válaszában ahogy írta. Elkezdtem utána nézni hogy lehetne egy ilyen LED classot csinálni. És belefutottam egy leírásba ahol a szerző az OOP előnyeit pont egy ilyen LED-es class készítése közben magyarázta el.
A LED számát, a bekapcsolás és kikapcsolás idejét is meg lehet adni benne.
Magamtól sajnos még nem tudok ilyet írni, de ezt jól be tudtam illeszteni az eddigi programomba.
Tegnapi nap nagy része pedig egy 2004A típusú kijelző élesztésével ment el. A nap végére azt is sikerült összehoznom. Ma, ha lesz időm akkor akarok írni rá fancy szövegeket. Illetve van néhány szenzorom amit fel akarok még éleszteni és beintegrálni az eddigi projektbe.
Szóval köszönöm az eddigi segítséget! -
Janos46
tag
válasz Janos250 #14090 üzenetére
Köszi a választ (és mindenkinek).
Valóban nekem a csak a TM1637-hez 4 könyvtár van a libraries-be. Mivel csak kisérletezgetek, összejött több mint 130 könyvtár ott. Most már azt fogom tenni, hogy azokat a progikat, amelyek nem futnak, egy külön konyvtárba fogom rakni és csak a kért fájlhoz tartozó konyvtárakat teszem a lib-be. Igazad volt, mert a Grove könyvtárral indult el, a portmonitor már ok, de a kijelzőn abszolút hibás adatok jelennek meg. Tudnád orvosolni?
Nem mondom hogy buta vagyok, bizonyos dolgokba bele tudok javítani, de ez így egészben nekem már kissé magas. Amúgy a (sz)ámítástecnika nem ismeretlen számomra (Commodore 64 óta). Megtetszett a programozás, de így 75 éves fejjel már nem fogok elérni nagy sikereket. Környezetemben senki nincs akivel eszmecserét folytathatnák ebben a témában. A pub-ban nem szándékozozm a pultot támogatni, ezért is kezdtem el ezt az egészet, a bringázás mellett egész jó kiegészítés. Ép testben ép lélek. Már volt rá példa, hogy meg kellett mutatnom a szig-et, nem hitték el a korom. Nnnna..., jól kisiránkoztam magam.[ Szerkesztve ]
Artillery, lelkes újonc vagyok, tanulni akarok!
-
Janos250
őstag
válasz Janos46 #14095 üzenetére
Így a távolból nem sokat tudok mondani erre a konkrét problémára.
Először is: milyen lapot használsz? 5V-os, vagy 3,3 V-os.
Ha szenzorokat akarsz csatlakoztatni, akkor én nagyon javasolom
ennek az eszköznek a megvételét:
https://www.aliexpress.com/item/1005001564915722.html
Ha ezt csatlakoztatod az Arduino lábaira, tudod rögzíteni egy idő tengelyen, hogy melyik láb mikor, mennyi ideig lett alacsony, illetve magas. Ha ezt visszabogarászod, és összehasonlítod az eszköz adatlapjával, akkor látod, hogy ez ment ki, pedig emennek kellett volna. Így már gyakorlatilag meg is van a hiba, hova kell belenyúlni.
Higgyétek el, sokkal eredményesebben lehet dolgozni, ezzel a módszerrel, és nagyjából 2000 Ft az ára.
Szoftvert meg ingyen is el lehet érni hozzá, több félét is. Nem törött, vagy akárhonnan letöltött vírusosat! Könyvtárakkal - ha irodalmi könyvtárat használok - többnyire azt csinálom, hogy a .h és a .cpp fájlt átteszem oda, ahol a .ino is van. Ez némi hátránnyal jár ugyan, de előnnyel is.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
nagyúr
válasz Janos46 #14095 üzenetére
Erre szokták mondani, hogy most panaszkodsz, vagy dicsekszel? 75 évesen ilyen hozzáállás és nyitottság igazán példaértékű.
Én is C64-en kezdtem, megtanultam a gépi kódot is, amit AVR-rel már hasznosítottam is (nyilván nem ugyanaz a nyelv, de a logikája hasonló).
Ha bármi kérdésed van, ide nyugodtan írhatsz, a topik tele van okos és segítőkész tagokkal. Ja, és itt vagyok én is. -
Gergosz2
veterán
Új hozzászólás Aktív témák
Hirdetés
Állásajánlatok
Cég: HC Pointer Kft.
Város: Pécs
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest