- Yettel topik
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Magisk
- Mobil flották
- Egy szenzor, két zoomkamera: újraírta a Huawei a mobilfotózás történetét
- Bemutatkozott a Poco X7 és X7 Pro
- Xiaomi 11 Lite 5G NE (lisa)
- Samsung Galaxy A56 - megbízható középszerűség
- Google Pixel topik
- Samsung Galaxy A55 - új év, régi stratégia
-
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
-
Janos250
őstag
válasz
Mosqu!to #12697 üzenetére
Én a Bangoodról szoktam vásárolni. Ha UK-ból kéri az ember, egy héten belül itt van. Én, ha mindenképpen UNO-t akarnék (nem akarok, mert gyakorlatilag ugyanannyiért sokkal korszerűbb is van, amin általában futnak az UNO-ra írt dolgok), akkor az alábbiakból választanék:
1.
UNO kábellel, 7 dollár
https://www.banggood.com/UNO-R3-ATmega328P-Development-Board-p-963697.html?rmmds=search&cur_warehouse=UK
2.
UNO + 4db A4988 driver blokk + shield, 12 dollár
https://www.banggood.com/Geekcreit-CNC-Shield-UNO-R3-Board-4xA4988-Driver-Kit-With-Heat-Sink-For-Arduino-Engraver-3D-Printer-p-1082323.html?rmmds=search&cur_warehouse=UK
Egy héten belül itt vannak. -
válasz
Mosqu!to #12697 üzenetére
Veszel Atmega328-at, az Arduino meg 5 alkatrész köré.
Ha van egy régi USB-s telefonkábeled, aminek a végén soros teló lógott, akkor megvan a programozó.
A motor shield meg FET vagy tranzisztor.BTW : A #12696. megoldva. A boardnak 5v, és a serial monitorban korrekt line feedet kell beállítani. Az EN lábat +3.3V-ra, és máris kommunikál.
-
Mosqu!to
addikt
Sziasztok!
Szeretnék építeni egy szélszimulátort, amihez szükségem van egy ilyen Uno boardra és egy motorshieldre, azonban itthon csak elég elég horror áron találtam az előbbit (8000 Ft, kínából 1000), utóbbit elvileg a málnánál lehet kapni a kintivel egyező áron.
Van esetleg tippetek, hogy rövid szállítási idővel vagy hazai boltból hol tudok Arduino uno-t venni a kinti árhoz közelebbi összegért?
Köszi,
Mosqu!to -
Hello,
Ilyen BT-04A Bluetooth modullal volt már valakinek dolga? S ha igen, át tudta nevezni?
Nekem sehogy nem megy -
KFORboy
senior tag
Nem akarok túlozni, de ez még nem minden, csak amikben épp rendet raktam.
Őszintén szólva; nem szeretek várni, rohangászni pluszba ha valami kipattan a fejemből és megakarom csinálni
A uC, Arduinozás meg még csak most 2-3 hónapja van terítéken... valószínűleg ez is be fog velem vásároltatni pár dolgot -
KFORboy
senior tag
-
KFORboy
senior tag
Egy 328P 360-400 HUF
A többi elektronikai komponens meg olyan 200HUF
Az LCD ára 500-600 HUF
Tücögtethető Pörgettyűs enkóder (ami igazából lehet 3db dip membrán gomb is ami 0ft) mqx 250 HUF
Az egészet fellehet dobni próbanyákra, max kicsit nagyobb lesz...
És az igazat megvallva nekem ehhez mind meg is van minden (bár igazából nagyon sok komponensem van készleten, ha gondoljátok fotózhatok de félek megölnek majd irigységből)
-
gyapo11
őstag
Gyanús, hogy a nyák, az alkatrészek, csatlakozók egyenként megvéve többől jönnek ki, de azért az építésnek van szépsége, izgalma, hogy vajon elindul-e, jól működik-e. Másrészt a saját összeszerelésű cuccokat jobban megismeri az ember, hiba esetén van esélye a javításnak.
-
KFORboy
senior tag
válasz
JóGéza #12685 üzenetére
Hasonló... csak ez jobb;
[link]Ebben van freki generátor, PWM generátor, fesz. mérő funkció, IR Dekóder illetve Enkóder is, egyéb más számomra ismeretlen jel protokoll funkció.
Igen részletes komponens teszter felismer mindent IGBT, BJT, FET, stb... és ki is ír róla mindent részletesen amit csak ki lehet belőle mérni, illetve a komponens sematikus jelöléséről is rajzol egy képet a kijelzőre ha vizuálisabb típus vagy mint én...
Ezen felül még kalibrálni is lehet, háttérszínt, betűszint állítani...
Illetve pofátlanul pontos.Az ára meg pont azon a ponton van, hogy egyet tuti veszel magadnak, de ha már kellene mégegy mondjuk utazós teszternek, hogy a műhelyben lévőt ne piszkáld (és felejts ott valahol másutt) akkor már húzza az ember a száját és szívesebben forrasztaná össze magának.
-
JóGéza
aktív tag
válasz
KFORboy #12681 üzenetére
Szia!
Ilyesmi teszterről van szó? -
válasz
KFORboy #12683 üzenetére
De lehet, avrdude-dal, illetve legkönnyebben avrdudess-el. ISP header-ön keresztül tudsz hozzájutni, ha van ilyen programozód, ha nincs, egy másik UNO-ból is tudsz építeni könnyen. Az így kinyert hex fájlt aztán ugyanezen módon vissza is tudod írni!
A kinyert hex fájlt aztán lehet disassembler-rel visszafejteni assembly kódra, ez ugyan nem C program, de vissza lehet belőle következtetni a program működését, ebben talán tudok segíteni. -
KFORboy
senior tag
válasz
Gergosz2 #12682 üzenetére
Vagyis akkor hagyjam békén... értem : /
Fura, hogy nem lehet kikapni ezekből a programot.
Úgy képzelném el, mint egy memóriablokkot amit a programozó lábakon, mint egyfajta protokoll, oda-vissza nézni/írni az adatokat.
De ezek szerint nem.
Bár valószínű, hogy a kicsi kínai is nyúlta valahonnan, de nem abajgatnám úgy, hogy nem tudom 100%-ra, hogy visszafordítható minden módosítás. -
KFORboy
senior tag
Halihó
Ha ki szeretném nyerni a kódot egy 328P-ből ahhoz hogyan álljak neki ?
Van egy komponens teszterem, tök okos cucc dip 328p van benne tehát kitudom kapni és bread boardba rakni, szertném kódot megkaparintani, van egy uno-m, smd 328P van rajta.
Jó lenne ha nem vágnám haza a komponens tesztert :"D
-
Janos250
őstag
EasyEDA és a hócipő.
Arra gondoltam, hogy az a baj, hogy ami libraryket csináltam, azt nem nulláról kezdtem, hanem más készet alakítottam, viszont a mm-coll váltás miatt egy picit elcsúsztak egyes furatok. Megcsináltam teljesen újra, mindent collban.
Pont ugyanazok az elemek vannak benne, mint az előbb, nem több.
Erre meg azt mondja:
"NetIncompletes.calculate_net_items: to many items"
Ilyet a Google se talál se egy o-val, se kettővel.
Van egy ilyen hibajelzés is:
"Wiring:read_net_id: String expected"
De hogy hol, mi, arról semmi infó. Átnéztem, de semmi olyasmit nem találtam, ami okozhatná.
Erre legalább Google ad találatot: a support azt javasolja, hogy csinálja meg kézzel a vezetékezést. Na, ezzel ki vagyok segítve. Akkor minek van autoroute, legalább egy részét megcsinálná!Na, de miért tudta korábban, és miért nem most?????
-
Janos250
őstag
-
válasz
KFORboy #12658 üzenetére
#include <avr/wdt.h>
#include <avr/io.h>
#define VCHECK 666
#define DELAY_3HOURS 10800000UL
#define DELAY_10MINS 600000UL
#define DELAY_400MSECS 400UL
void setup(){
digitalWrite(PIN2, LOW);
if(is_vcheck_ok())
{
reset();
}
attachInterrupt(digitalPinToInterrupt(PIN3), reset, HIGH);
digitalWrite(PIN2, HIGH);
delay(DELAY_3HOURS);
if(is_vcheck_ok())
{
digitalWrite(PIN4, HIGH);
delay(DELAY_10MINS);
digitalWrite(PIN2, LOW);
delay(DELAY_400MSECS);
digitalWrite(PIN4, LOW);
}
else{
reset();
}
}
void loop(){
}
bool is_vcheck_ok(){
return VCHECK < analogRead(PIN1);
}
void reset(){
noInterrupts();
wdt_enable(WDTO_30MS);
while(true){
}
} -
Janos250
őstag
válasz
KFORboy #12669 üzenetére
Közben ráakadtam az arduino.cc-n az arduinos multitaskingre, hogyan lehet több loop. Mivel az arduino.cc-n van, nem mások által hozzábütykölt valami, hanem az EREDETI arduino része.
Van a mintában 3 loop:
loop(), loop2(), loop3()
https://www.arduino.cc/en/Tutorial/MultipleBlinks" // IMPORTANT:
// When multiple tasks are running 'delay' passes control to
// other tasks while waiting and guarantees they get executed."Meg lehet persze kerülni másként is. De minek?
-
KFORboy
senior tag
Újra nekiugrottam a keresési körnek, átmentem azokon is amiken korábban, hátha elkerülte figyelmem valami, valamiről megfeledkeztem.
Valószínűleg igen...
Mert a "millis" parancs ad lehetőséget számolgatni a bekapcsolás óta eltelt idővel illetve még lehet játszani a belső real time clock-al is... Periódus beállítás ami megad egy értéket, hogy mennyi időnként countoljon, ezeket meg ugyebár gyűjti a dedikált helyére amíg túl nem csordul (kb 50 nap)
Periódust ugyebár lehet módosítani, hogy pl 4 másodpercenként számoljon, adjon +1-et, countolkon.
Ezeket meg a működési frekiből (pl 8Mhz -es tiny85) meg a bit táblázat tól-ig értékek, megadható számok keretén belül matekozhatod ki.Az eltelt idő értékekre meg parancsokat oszthatsz ki.
Legjobb tudásom szerint arduinoval nincs Multitasking, de lehet ezen módszerrel relatív hasonlót szimulálni.Ugyan így szoktak egyszerű "órát" is kidobni a kijelzőre.
A kért X érték eléréseikor +1 adódik egy integerhez (? asszem így nevezünk egy, a loopban elhelyezett valamit amit aztán definiálunk egyéb valamivel vagy fizikai értékkel vagy hardverrel, pl.:
time = millis();
if (time >= 1000) {
másodperc = time/1000;
if (time >= 60000) {
perc = time / 60000;és így tovább, illetve a definiált valami számításakor az osztandó érték, a szám elé ha bedobok egy % -jelet, akkor kerekít, azaz nem bolondul bele ha 7-es értékenként countol +1-et és 10-esével jön be az érték, akkor +1 -et countol mett 10/7=1 és a maradék 3-at "eldobja"
Adott időpontokra be lehet szúrni ugyanígy egyéb parancsokat is.
Sőt, a real time clock vagy micsoda különleges parancsaival van egy relatív multitasking okosság asszem, erről van videója GreatScottnak, (uC Timers)
a uC dedikáltan erre kitalált lábain lehet ezekkel brillírozni hogy ha nem csak "óraként" használod hanem tovább gondolva periódikusan fűzöl parancsokat hozzá.Van lehetőség olyanra is, hogy hivatkozás a legutóbbi ilyen időhöz kötött parancsra... Pl annak értékére... Ezzel nem csak helyet spórolva a flashből, de még egyszerűsítve is, hogy ha már nem a parancs sorrend hanem az idő az új gerince a rendszernek, akkor ne legyél totál megkötve is ugyanígy és minden parancsot kötelező legyen a pl "millis" által eltelt idő valamilyen értékéhez igazítani, illetve így nem megbecsülhető változókat is tudsz parancsba igazítani, hogy tovább vigye/dolgozzon vele például.
-
-
Janos250
őstag
válasz
KFORboy #12662 üzenetére
Mint az előbb írtam, a te problémádra is a többszálú program lenne a legegyszerűbb, legjobban áttekinthető, és legbiztonságosabb megoldás.
void rutin1(){
Ha pinA aktív, akkor örülök, és teszem a tennivalót
delay(1000); // vagy akár 24 óra, van akinél több, vagy kevesebb
};
void rutin2(){
Ha pinB aktív, akkor meg az ilyenkori teendőket teszem
delay(1000);
};
void rutin3(){
Ha pinC aktív, akkor meg a C teendőket teszem
delay(1000);
};
Ezeket kell egymással párhuzamosan "egyszerre" futtatni. -
Janos250
őstag
válasz
Djstefan1848 #12634 üzenetére
Nem másra ráerőltetni akarom a véleményem, csak egy kis figyelem felhívás céljából elmondom:
Djstefan1848 kérdezi, de KFORboy problémájára is ez a legegyszerűbb megoldás:
Hogyan lehet arduinot programozni úgy, hogy 2, vagy több párhuzamos loop folyamatot futtasson egymástól függetlenül ?
Annak ellenére, hogy azt írod, hogy újonc vagy, nagyon jól látod a problémát. Több loop kellene párhuzamosan. Ez a párhuzamos szálak futtatása egymás mellett. Hogy van-e ez arduinoban? Erre még így nem lehet válaszolni, mert az arduino programozás is annyiféle, ahányféle a kontroller. A régi Atmel kontrollerekkel valószínűleg nehezebben oldható meg, de itt nem ér véget az arduino világ.
Kezdjük egyből az egyik felső szeletén:
Az ESP32 arduinojában van több lehetőség is, hogy hogyan lehet arduinot programozni úgy hogy 2, vagy több párhuzamos
"loop" folyamatot futtasson egymástól függetlenül.
Az egyik lehetőség a C++ párhuzamos szálai (thread). Ha nem várakoztatod őket egymásra, akkor nyugisan elvannak egymás mellett.
Vagy a freeRTOS taskjait használod. Ez rugalmasabb. Ezekben a delay nem igazi delay, hanem átadja a vezérlést más várakozó tasknak.
Az ESP8266-on is van valami, ami ennek a kisöccse, de már nem pontosan emlékszem, egy ideje már nem használom. Egymás mellett több PWM jellegű vezérlést kellett futtatnom, különböző, és folyamatosan változó, de elég hosszú, több szekundumos periódusidőkkel, de demo módon. Van egy lib, ami azt csinálja, hogy egy beállított idő elteltével megcsinál valamit. Előkotortam egy régi programot, ezt használja:
https://github.com/esp8266/Arduino/tree/master/libraries/Ticker
Azonkívül van ez a lehetőség is schedulerre:
https://github.com/anmaped/esp8266-scheduler
Ezt nem próbáltam. Ez elvileg Atmel procikon is biztosít
párhuzamos futtatást, nem tudom, van-e valaki, aki használta már. Persze a Ticker is az arduino schedulerét használja.
Lehet persze azt csinálni, hogy járogatunk körbe-körbe, és mindig megnézzük, hogy kell-e valakinek valamit csinálni.
Mint már többször írtam, én szinte csak ESP32-t használok. Egy UNO ezer Ft, egy ESP32 kétezer. Ennyit igazán megér a kényelem, hiszen ami
UNO-n megy, az ESP32-n is, de fordítva nem, tehát egyáltalán nincs szükségem UNO-ra. -
KFORboy
senior tag
Igen... meg nem :"D
PIN 1 az amolyan Feedback. (tudom, Arduinok többnyire 5-5.5 V maxra specifikáltak, tehát ide majd egy feszültség elosztóval jön le, mert az eszköz üzemi fesz 7.2-8.4V amúgy, illetve az arduino maga, kap egy 7805-öt )
Mindvégig védi az eszközt a túlfesztől, csak akkor adja rá PIN 2 (FET kapcsolás) -t ha oké, és így is marad ha oké.
PIN 3 egy reset gomb
PIN 4 aktivál egy ágat amivel a kimenő feszültséget lejjebb dobja/állítja a tápvonalon ami megy az eszközbe, ezáltal a készülék alacsony töltöttséget érzékelve automatán leáll kb fél perc alatt... de kap rá 10 percet.
Ezután PIN 2 mint főkapcsoló LOW, teljesen áramtalanítja az eszköz, kis delay,
(hogy ne buggoljon össze, mert ha PIN 4 LOW de PIN 2 mint főkapcsoló nem zárult akkor 8.4 megy be a készülékbe, az meg visszakapcsolhat, ez meg ezek után nem biztonságos leállást eredményezhet.)PIN 4 LOW (gondolván, arra, hogy PIN 3 reset gombbal újra lesz indítva, akkor ne buggoljon be, hogy alacsony töltöttséggel induljon, a Vchech meg még engedné is, mert az arra figyel, hogy PIN 1 egyenlő vagy kisebb mint x Volt)
-
-
-
-
KFORboy
senior tag
Nem akarok semmi komolyat.
Egy nagyjábóli 3 óra leszámlálását.
A projekt a következő (lábakat most csak számozom, nem konkrétan valamelyik atmega lábkiosztás szerint van és ilyen félparasztbúl és kódnyelven írom
);
Áram alá kerül az eszköz:
PIN 1 Analogread, ha magasabb mint x Volt akkor megáll a program vagy kikapcsol/újraindul, stb... [Ezt a továbbiakban csak Vcheck -nek írom]
if PIN 1 Vchechk oké 3 óra számláló indul és PIN 2 HIGH
else PIN 2 LOW program megáll vagy kikapcsol/újraindul, stb...If PIN 3 HIGH újraindul a program
3 óra számláló elérte a 3 órát, PIN 4 HIGH Vcheck
if Vcheck oké elindul egy 10 perces számláló
else program megáll vagy kikapcsol/újraindul, stb...if PIN 3 HIGH újraindul a program
10 perces számláló elérte a 10 percet akkor PIN 2 LOW, delay 400 PIN 3 LOW
nincs LOOP
Várja a PIN 3 HIGH-ot hogy újraindulhasson vagy teljes áramtalanítás és újra áram/üzem alá helyezve kezdődik elölről a móka.Így nemtom... mennyire vagyok gázos vagy érthető
-
válasz
KFORboy #12653 üzenetére
Ha nem kell túl nagy pontosság, akkor
for (i=10800;i>0;i--){
//valamit csinálsz, ha kell
delay(1000);
}
//3 óra múlva ideér a kódHa pontosság kell, akkor RTC modul.
Első módszer mindentől függ, a belső kristály pontosságától, a szoba hőmérsékletétől, és persze attól, mit csinálsz még a cikluson belül.
A kettő közt van valahol, ha timert használsz. -
-
KFORboy
senior tag
A delay teljesen megállítja a programot, ilyenkor nincs lehetőségem IF / ELSE és társai okosságokat hozzádobni...
A Delay legjobb tudásom szerint késleltetés szimpla programokra, hogy minden időben "beérjen" inputban, de addig nem csinál semmit a kontroller míg a delay le nem jár.Most vagy én tudok valami rosszul... vagy nagyon rosszul tudok mindent, lévén még a millis meg micros fogalmában se vagyok otthon, illetve még ott vannak a timerek... de nem akarom elhinni, hogy egy egyszerű belső számláló indítása ami adott idő értékeknél végrehajt valamit olyan bonyolult lenne Arduinoban)
-
-
KFORboy
senior tag
Halihó...
Még mindig kezdő vagyok a programozásban és bár amilyen jól indultak a kezdetek... úgy elakadtam egy szerintem tökre alap dolognál és eléggé bosszant.
Milyen kódvariánssal és értékekkel kell játszanom ahhoz, ha időzítést akarok csinálni?Például:
Készülék bekapcsol, program elindul, leszámol 3 órát.
3 óra letelt pin x megy highbaHiába keresek kulcsszavak alapján youtube-on, csak a Delay, Millis, Micros kerülnek csak elő, nekem pont, hogy nem lefelé kellene lépnem a mértékegységekkel hanem fölfelé.
Akár ha van erre tutorial, az is jó lenne, hogy az if meg else okosságokat is hozzá tudjam gondolni.
Pl hogy ha pin X high akkor a counter újraindul.
Counter után következő counter indítása és ha az lejár akkor nincs loop hanem program megállt.Vagy pl első counter letelte után pin X high és induló második counter, de ez előtt/közben ha pin Y high akkor az egész visszakerül az első counter állapotba, azaz pin X LOW és kezdődik megint az egész ugyebár.
Remélem nem fogalmaztam nagyon sután.
Kísérletezni se tudok mert a posta rendesen kiszúrt velem és nagyon nem akar kínából érkezni mostanában semmim, így csak virtuálisan "dolgozom" előre és a kísérletet és társait meg a képzelőerőmre bízhatom : / -
TarekElAli
csendes tag
Sziasztok !
Keresnék 2db esp-01 (ESP8266) -t Vásárosnaményban vagy környékén (Szabolcs -Szatmár-Bereg ) megvételre.
A kínai rendelés most extrém lassú, a bolti eladók meg túlárazottak, így elsősorban gondoltam körbekérdezek hátha ki tud valaki segíteni ! (A pesti albérletemben van 4 db ,de ennyiért nem mennék fel éljen a home office)Üdv,
TJa és hogy ne legyen teljesen off , ki milyen fimrware-t használ kapunyitásra (impulzus kell neki)?
-
válasz
Djstefan1848 #12647 üzenetére
Szerintem jól látszik az ismétlődés a kódban:
servo1pos+=step1*irany1;
if(servo1pos>179)irany1=-1;
if(servo1pos<1)irany1=1;
servo1.write(servo1pos);
Ebből annyit teszel be, amennyit nem szégyellsz.
És persze a kód elején ne felejtsd el definiálni a hozzájuk tartozó változókat (servo3pos, step3 stb).
Nem tudom honnan táplálod a szervókat egyébként, de egy UNO usb-ről és Vin-ről sem bír el kettőnél több szervót (Vin-ről inkább csak egyet). Ha külső tápra kötöd a szervókat, a vezérlő jel mellett a GND-t is össze kell kötni a lappal.A delay-t és az egyes szervókhoz tartozó értékeket úgy számold ki, hogy mindenhol egész számok jöjjenek ki, különben kínos meglepetések érhetnek.
Ha ez nem lehetséges,
int
helyettfloat
változókat használj mindenhol. -
válasz
Djstefan1848 #12644 üzenetére
Mert egyáltalán nem azt csináltad, amit írtam.
int servo1pos=0;
int servo2pos=0;
ínt irany1=1;
int irany2=1;
int step1=1;
int step2=2;
void loop (){
servo1pos+=step1*irany1;
if(servo1pos>179)irany1=-1;
if(servo1pos<1)irany1=1;
servo1.write(servo1pos);
servo2pos+=step2*irany2;
if(servo2pos>179)irany2=-1;
if(servo2pos<1)irany2=1;
servo2.write(servo2pos);
delay(10);
}Javítottam.
-
Djstefan1848
újonc
most leteszteltem és vagy bevárják egymást vagy a magassabb delay számot használja mind 2 nél és egyszerre mennek.
#include <Servo.h>
Servo ser1;
Servo ser2;
int pos = 60;
void setup() {
ser1.attach(1);
ser2.attach(3);
}
void loop() {
for (pos = 60; pos <= 90; pos += 1) {
ser1.write(pos);
delay(30);
ser2.write(pos);
delay(90);
}
for (pos = 90; pos >= 60; pos -= 1){
ser1.write(pos);
delay(30);
ser2.write(pos);
delay(50);
}
} -
Djstefan1848
újonc
-
válasz
Djstefan1848 #12639 üzenetére
Miért várnák be? Max érték elérésekor előjelet váltasz és azonnal indulhatsz az ellenkező irányba.
-
Később megnézem gépről a két kódot, most telefonról vagyok. A newping lib-en belül lesz vmi konfigurációs eltérés.
distance = sonar.ping_cm();
vs.fullDist = (sonar.ping_median() / US_ROUNDTRIP_CM);
Nézd meg a ping_cm függvényt, biztos van benne kompenzáció. A második a nyers adatból számol. -
válasz
Djstefan1848 #12634 üzenetére
Több loop-ot futtatni nincs lehetőséged, viszont a problémát egyszerű megoldani. A servo motornál ugye sebességet nem tudsz megadni, csak fordulási szöget, a sebességet pedig az adja, hogy adott idő alatt mekkora szöget fordul. Mind 3 szervónál kiszámolod, hogy pl 10ms alatt hány fokot kell neki fordulni, és minden ciklusban annyit adsz hozzá/vonsz le a korábbi értékből. Legyen pl a leglassabb motor 1, akkor a másik kettő 1,5 és 2, akkor az első 1,8mp alatt ér egyik végállásból a másikba, a másik 1,35 és 0,9mp alatt.
-
Djstefan1848
újonc
Üdv mindenkinek !
Egy ideje keresek megoldást a problémámra de nem találok vagy nem tudom hogyan keressem .
Hogyan lehet arduinot programozni úgy hogy 2-vagy több párhuzamos loop folyamatot futtasson egymástól függetlenül ?
PL.: van 3 servo motor és mind a 3 más sebességgel rotáljon oda vissza egymástól függetlenül .
Amatőr vagyok a témában ilyen alap programokat tudok rá írni csak azt nem tudom hogy ezt meg lehet-e oldani . Sajna nem találtam ezzel kapcsolatos témát vagy rosszul kerestem rá .
Válaszokat előre is köszönöm ! -
-
Sanki
addikt
Úgy tűnik, amit terveztem sikerült megcsinálni.
Link
Amire még nem tudtam rájönni:
1. void setup részbe beraktam egy rainbow effectet, hogy bekapcsolás után 1x fusson végig. --> Ennek a sebességét hogyan lehetne lassítani? Nagyon gyorsan végigfut.
2. A távolságot jól méri és jól írja ki a portra, viszont a kiírt távolsághoz képest +2 cm-t valamiért hozzátesz, tehát, ha feltanulja a távolságot 18 cm-re (innen kellene pirosan villognia), akkor már 20 cm-től pirosan villog (több méretnél próbáltam, mindig jelen van a 2 cm difi). Ezért beraktam egy korreckiót a képletbe (jelenleg -2). --> Ezt hogyan lehetne javítani?Amit még kipróbáltam, hogy az eredetileg neten talált kódot felraktam, abba is ott van a 2 cm difi, viszont teljesen másik kódot is letöltöttem, abban nincs 2 cm, az pontos, szóval gondolom az alap kódolás hibás valahol.
-
-
Sanki
addikt
Mindenhol kerestem a hibát (delay, debounce, stb..), de erre nem gondoltam volna, aztán elkezdtem kikapcsolgatni és meglett a hiba. Most jónak tűnik.
(#12626) Gergosz2: Igazából a kiiratás később nem szükséges, nem fogom látni, most csak PC-n monitorozásnál néztem az adatokat.
Amúgy ezt is a delay() funkcióval kellene csinálni?(#12627) Janos250: Egy wemos d1 mini már úton van. Mondjuk az nem esp32 ahogy nézem.
-
Janos250
őstag
válasz
Gergosz2 #12626 üzenetére
Például ilyen esetekben (is) előnyös az ESP32. Külön folyamatként lehet elindítani az egyes programrészeket, amik párhuzamosan futnak, és ha delay van az egyikben, akkor nem tényleges delay, hanem átadódik a vezérlés a másik tasknak. Persze, ha külön fizikai magra tesszük az egymással konkurálókat, az még jobb. Tudom, ez most rajtad nem segít, mert nincs ESP32-d, de be akartam mutatni, hogy pl. mi (is) előnye.
-
-
Sanki
addikt
A
Serial.print
befolyásolhat bármit is az arduino/kód futásnának a sebességében?Elkezdtem a korábban ide linkelt 2 garázs parkoló kódját összerakni (egyik volt az alap, másikból pedig hoztam a nyomógombos feltanításos részt).
Az eredeti kód szerint nagyon folyamatos a ledek felvillanása a távolság változásával, viszont ahogy beépítettem a nyomógombos részt belassult az egész, lomha lett a ledek reagálása.
Kis hibakeresés után (letiltottam az újonnan jött funkciókat egyesével), az alábbi rész miatt lassul be, ha ezt letiltom hasonlóan folyamatos lesz a villogás.
Videókkal szemléltetve (Google Drive link - nagy méretűek):
- Eredeti kód, amit másoltam és kicsit módosítottam.
- Eredeti kód + nyomógomb, ami lassú (tartalmazza a lenti updateDistance részt)
- Eredeti kód + nyomógomb, ami hasonló sebességű, mint az eredeti első (nem tartalmazza a lenti updateDistance részt)//----------------------------------------------------------------
// LOOP - updateDistance
//----------------------------------------------------------------
// Pings the sonar, figures out what color zone the program should be in
void updateDistance()
{
// unsigned long now = millis();
// unsigned int fullDist = (sonar.ping_median() / US_ROUNDTRIP_CM);
Serial.print("Actual Distance: ");
Serial.print(fullDist);
Serial.print(" Panic distance: ");
Serial.print(Panic_Distance);
if(fullDist <= MAX_DISTANCE && fullDist > MIN_DISTANCE)
{
Serial.println(" --> Distance OK ");
}
else if (fullDist <= Panic_Distance && fullDist > 0)
{
Serial.println(" --> Distance not OK = within Panic zone ");
}
}
-
Janos250
őstag
Hú, a francba, tényleg.
Bármit nézek, amik a kosaramban vannak, és mikor beraktam még ingyen volt a szállítás, most már mind + 1200 Ft a szállítás, csak priority tracked van Magyarországra, más , ingyenes nincs. Úgy látszik, ők is besokalltak, hogy a track nélküli szállításra honfitársaink sorra azt jelzik vissza, hogy nem érkezett meg, és visszakérik az árát.
Nekem eddig nem tűnt fel, mert amiket mostanában rendeltem (pl. mask) azoknál inkább szándékosan kifizettem a gyors szállítás felárát, csak gyorsabban megjöjjön.
PL ez csak UK-ból ingyenes a szállítás, viszont ott az árban már eleve benne van a szállítás
-
A wemos d1 mini tartalmaz CH340G-t, ezért is javasoltam.
Igaz, hogy az esp32 újabb, több kimenete van, és okosabb, de azért nem mindenben jobb, mint az esp8266: utóbbinak 5V toleránsak a kimenetei, és sokkal több/kiforrottabb library, oktatási anyag, közösségi támogatás van hozzá, mint az esp32-höz. Például a SPIFFS támogatás erősen béta állapotú volt az esp32-höz, mikor legutóbb néztem. -
Janos250
őstag
-
_q
addikt
Sima elem 1.2 V ha AA-t használsz. Arra figyelj, hogy itt sorba kell kötni majd 3 db-ot legalább.
Képek alapján nem látok rajta USB-soros átalakítót, ezért kelleni fog egy FTDI vagy CP210x. Amúgy vehetsz ilyet is: [link] Igaz nagyobb mint a mini, de cserébe egy újabb processzor van rajta, esp8266 helyett esp32, van rajta a soros-usb konverter és még 18650-es cellának és ott a helye, csak használni kell (miután programoztad).
-
Sanki
addikt
Valami ilyesmi kellene regulátornak? [link] --> LM7805 5V?
Az a baj, hogy régi az akksi, tavaly vettem ki a kocsiból, mert a nagy fagyban nem indult és már 6-7 éves (nem tudom pontosan, papír nincs meg). Mondjuk azóta van akksitöltő, lehet érdemes akkor rátenni.
Li-ion celláim meg nincsenek (és emiatt ősztinén szólva nem is akarok venni, mert akkor ahhoz még töltő is kell). -
Egy 12V-os autós akksiról tovább üzemelne, mint amennyi idő alatt az akksi az önkisüléstől magától lemerülne. Csak ahhoz kellene egy 5V voltage regulator, vagy egy stepdown converter, ami rontja a hatásfokot.
Én 1db Li-ion cellára gondoltam, ami 4.2V-3.0V-ig szolgáltat tápot (3V alá nem szabad meríteni), vagy 3db ceruza elemre, ami kb 4.8V-tól ameddig működnek a rá kötött dolgok, vagy 3db ceruza akkumulátor, 4.5-4.2V és lemerülés közt. Utóbbi megoldásokban az a jó, hogy nem kell hozzájuk regulátor, mert az AVR-ek 5.5V-2.5V közt bármiről elmennek, utóbbihoz alacsonyabb órajel szükséges.Janos250: ez utóbbi tulajdonsága miatt szeretem, akkumulátoros dolgokat lehet vele tervezni baromi egyszerűen, ha 1MHz-es órajelre állítom, kis túlzással két lemerült ceruzaelemről is elmegy, vagy egy 3V-os gombelemről, vagyis nemcsak önmagában pici, de semmi nem kell mellé, se kristály, se regulátor, csak direkbe kötöm rá az elemeket és kész. Ráadásul lehet vele usb eszközöket emulálni (most éppen egy midi billentyűzetet építek a fiamnak itthoni gyakorlás céljára digispark-ból).
Ráadásul miután kaptam helyette egy maréknyi attiny12-t, amit megtanultam assembly-ban programozni, már egészen értem a 8bites AVR-ek lelki világát is, egyszerűen imádni való az egyszerűségük. -
Itt azt írják, hogy elmegy 3db ceruzaelemről is egy ilyen led stripe, akár 3 voltról is.
Parkolás után kézi kikapcsolás helyett lehetne mélyalvásba vinni (akkus táplálás esetén), mondjuk percenként egyszer felébreszteni, hogy ott áll-e még az autó, úgysem életszerű 1 percen belül kiállni a kocsival meg vissza. -
Sanki
addikt
-
Sanki
addikt
Az nagyjából hogy nézne ki külső akksival?
Erre gondoltam én is, csak sajnos nincs itthon semmi akkumulátor (max 1 régebbi autós akksi, amit még nem adtam le a telepen vagy pedig 1 powerbank lenne). Főleg ebbe a home office-os munkarendbe nem is sokat megy az autó.
Jelenlegi beállításban ~250 mA-t eszik a ledszalag, de az erősséget lentebb lehet venni. Működési idő is az a fél perc lenne max, ameddig beállok a garázsba. -
Janos250
őstag
"Ha valamelyik esp lenne, akkor a kódok is máshogy néznek ki vagy ugyanaz használható, mint a két fenti vezérlőn?"
Is-is. Azok a könyvtárak, amik a a szokásos digitalRead(), digitalWrite(), pinMode() függvényeket használják, azok simán mennek átírás nélkül.
A WS2812 RGB led meghajtás egy más téma, az már nagyon erősen ki van centizve a szükséges sebesség miatt az adott típusú lapokra.
Mint korábban írtam, elég nagy a káosz a könyvtárak terén, de vannak jól bevált példányok. Én évekkel ezelőtt egyszer a DHT11-et akartam használni, de a különböző könyvtárak között mindig kavarodás volt, ezért inkább írtam egy sajátot, ami a triviális GPIO kezeléssel és időzítéssel olvassa az adatokat, így erről pontosan tudtam, hogyan működik, mit csinál. Persze, az még odébb van, hogy te is saját könyvtárakat csinálj.
Hasonlóan voltam a Adafruit_NeoPixel.h-val is. Inkább csináltam ESP32-re egy sajátot, ami ugyan csak az ESP32-n működik, de annak a lehetőségeit kihasználja, és pontosan tudom, hogy mit csinál, így elég hosszú led szalagot elég gyorsan tudok kezelni.
Az Adafruit_NeoPixel.h - bár rég néztem, de úgy emlékszem - tud többféle processzort kezelni.Aryes:
Régebben, hogy ennyien használjátok, megnéztem ezt az attiny85-t. Tetszik, hogy pici, egyszer még lehet, hogy én is kipróbálom :-)
Bár az okos konnektorokban, miegymásban használt ESP is igen pici, de azt meg nemigen lehet kapni. -
Jól hangzik. Ha én csinálnám, én megpróbálnám elemes/akkus táplálásra tervezni, pl egy attiny85-tel (mostanában ez a kedvencem, pedig rém elavult már
) feszültség konverter és egyéb árampazarló perifériák nélkül. Kérdés, hogy a ledszalagnak mekkora az a minimum tápfeszültség, aminél még működőképes.
-
Sanki
addikt
Ja ez nem is lesz wifin meg semmi, az teljesen más.
1 méterre állítottam be jelenleg, illetve majd magasságba a rendszámtáblára fogom irányítani.
Tápot meg 1 régi telefon töltőről kapja majd, ha leparkoltam akkor 20 sec után lekapcsol a ledszalag, illetve egy kapcsolós hosszabbítóra lesz kötve, hogy felesleges ne kapjon áramot. -
Ehhez viszont nemigen kell wifi, egy attiny85 is el tudja végezni a feladatot.
Arra számíts, hogy az ultrahang szenzorra hiába írja, hogy 5m a hatótávja (wtf?!), max másfél méter távolságra fogod tudni használni, azt is csak úgy, ha az autó valamely függőleges felületére lövöd be.
Hogy lesz megtáplálva? Mit fog csinálni a jelzőfény, amíg benn áll a kocsi a hatósugárban (parkol)? -
Sanki
addikt
Igen, köszi, nagyjából értem. --> "de ha lib-eken keresztül" - ez gondolom az a rész, amikor a kód elején hivatkozik egy másik kódsorra, pl.
#include <Adafruit_NeoPixel.h>
?
Akkor próbaképp lehet rendelek egyet, ahogy nézem ezek is ilyen 3-4 dollár körül mozognak.Jelenleg ezt a projektet csinálgatom, a parancsok egy részét már értem mi mit csinál (ezen a kódon belül), még azt szeretném majd beleszerkeszteni, hogy egy gomb segítségével a
"PANIC_DISTANCE"
és/vagy a"PARKED_DISTANCE"
változtatható - tanítható legyen.
Új hozzászólás Aktív témák
Hirdetés
- Apple Ipad 10.generáció
- Új HP Pavilion x360 14-ek Érintős hajtogatós Laptop Tab 14" -35% i5-1335U 8/512 FHD IPS Iris Xe
- RTX 4080 SUPER,16GB. Ryzen 7 7800X3D, 32 RAM Fury RGB! Garancia!
- Asztali PC , i7 9700K , RX 5700 XT , 32GB DDR4 , 500GB NVME , 1TB HDD
- Dell Inspiron 5406 2-in-1i5-1135G7 16GB DDR4 3200 512GB NVME 14" FHD Érintőkijelző W11Pro
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32 RAM RTX 5060Ti 16GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! Asus H110M-K i7 6700 16GB DDR4 480GB SSD GTX 1660Ti 6GB Rampage SHIVA FSP 550W
- LG 42C4 - 42" OLED evo - 4K 144Hz - 0.1ms - NVIDIA G-Sync - FreeSync - HDMI 2.1 - A9 Gen7 CPU
- BESZÁMÍTÁS! Gigabyte B760M i5 14600KF 64GB DDR4 512GB SSD RTX 3080 10GB Corsair 4000D Airflow 1000W
- 4 év gari - magyar bill. - Lenovo ThinkPad Z13 G1 - AMD Ryzen R7 Pro 6850U, 13.3" 2.8K OGS érintő
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest