-
PROHARDVER!
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
-
Hyperion
senior tag
Gyak ez kell neked, csak természetesen az arduino nano lesz a pro mini helyén(úgy rémlik ugyan az a lábkiosztás)
Uno---------------Pro Mini
5v-----------------------VCC
GND------------------------GND
Digital Pin 11(MOSI)----pin 11 (MOSI)
Digital Pin 12(MISO)----pin 12 (MISO)
Digital Pin 13(SCK)-----pin 13 (SCK)
Digital Pin 10----------RSTItt is van egy egyértelmű leírás:
[link] -
qisqaqas
senior tag
Ezt inkább itt kérdezd meg.
Ha jól tájékozódtam akkor a servo+potméter kivételével nincs rá olcsó és megbízható megoldás. Van egy ilyen projektem is, de inkább átviszem az egészet 12 VDC-re. Olcsóbb
De mégis mit szeretnél a triakkal? Nem biztos hogy arra alkalmas amit én hiszek hogy szeretnél.
(#528) nyunyu :
Ami még eszembe jutott, hogy használhatnál Bluetooth-t. Ebayról pár dodóért vehetsz 2.x vagy kicsit drágábban BLE (BT 4.x) adaptereket, direkt kontrollerekhez. Kommunikáció a kettő között soros, aztán a BT pedig intézi a többit.
-
happy555
aktív tag
Bár az alábbi kódban használt számlálóval (y) értelmét is veszti a millis() túlcsordulása, azért tettem bele egy szoftveres reset kódot.
Arduino lábait NE kösd össze közvetlenül !
#define uzemido 10
boolean x;
byte y=0;void setup() {
Serial.begin(9600);
Serial.println("Hello world!");
}void loop() {
if(((millis()/1000)&1) == x){//másodpercenként lesz igaz
x=!x;
y++;//számláló léptetése
Serial.println(y);
}
if(y>=uzemido){
Serial.println("RESTART...");
delay(20);//hogy legyen ideje kiírni a sorosportra
asm volatile (" jmp 0"); //szoftveres reset kódja
}
} -
gyapo11
őstag
A millissel lehet bármekkora időzítést csinálni, csak le kell kezelni a túlcsordulást.
Pl. fél évente hajtja végre az "akciót":void setup() {
}
int tulcsordulas = 0;
unsigned long cel = 15724800; //fél év másodpercben 182*24*60*60
unsigned long start = millis() / 1000;
unsigned long eltelt = 0;
unsigned long reszido = 0;void loop()
{
reszido = millis() / 1000 - start;
if (reszido < 0) //túlcsordult
{
tulcsordulas++;
}
else
{
eltelt = reszido;
}if (tulcsordulas == 1)
{
eltelt += 4294967 - start;
}
if (tulcsordulas > 1)
{
eltelt += 4294967 - start + (tulcsordulas - 1) * 4294967;
}if (eltelt > cel)
{
//akció;
start = millis() / 1000;
tulcsordulas = 0;
eltelt = 0;
reszido = 0;
}
eltelt = 0;
}Nem próbáltam, a fordító nem jelzett hibát.
-
kagzer
aktív tag
Szia
A fotópapírra nem égeti rá túl jól ezért egész szépen le tud jönni a toner.
Kinyomtatod, rávasalod óvatosan majd leáztatod és lehet maratni.
Arra kell ügyelni, hogy a túl vékony vonalakat vagy nem nyomtatja rendesen vagy akár lemarja és a papír a hőtől kicsit megnyúlik. Ezt úgy lehet jól kezelni, hogy a lap négy sarkába kereszteket rajzolsz és nyomtatás után megméred majd korrigálod a mérettorzítást.
Elég sokat csináltunk már és jól működik.A neten vannak képek is, csak nem akartalak bunkó módon lerázni.
-
kagzer
aktív tag
Biztos van ennél profibb megoldás, de ez is működik:
int pin = 9;
int led = 13;
int m_state = 0;
int ledState = 0;int state()
{
return m_state;
}bool setState(const int value)
{
if(m_state == value) return false;
m_state = value;
return true;
}void toggleLed()
{
ledState = ~ledState;
digitalWrite(led, ledState);
}void setup()
{
pinMode(pin, INPUT);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}void loop()
{
if(setState(digitalRead(pin)) && state()) {
toggleLed();
}
} -
happy555
aktív tag
Nahh, jól van !
egy longot (time) megspórolhatsz:
unsigned long lejarat;
void setup()
void loop()
if ((value != RFnyitas) && (value != RFzaras) && (nyitoGomb == LOW) && (zaroGomb == LOW)) // Tetlen allapot
{
value = mySwitch.getReceivedValue();
digitalWrite(iranyPin1, HIGH);
digitalWrite(iranyPin2, HIGH);
digitalWrite(jelzoPin, HIGH);
if (value == lampaON)
{
lejarat = millis()+2500;
digitalWrite(lampaPin, LOW);
}
if ((value == lampaOFF) || (time>lejarat))
{
digitalWrite(lampaPin, HIGH);
}
if(((millis()/500) & 1) == T) //tizedmásodperces ütemezés
{
T=!T;
digitalWrite(ledPin, T);
}
} -
JozsBiker
aktív tag
A dolog lényege, hogy a ketyere léptet egy számlálót ezredmásodpercenként onnan hogy feszültség alá helyezed, egész addig míg ki nem kapcsolod ( jó, nyilván ha a számláló megtelt akkor nullába fordul és onnan folytatja, de az jó sok idő, kb. 50 naponként következik be ). Az időmérés úgy zajlik, hogy amikor el akarod indítani a mérést kiolvasod ennek a számlálónak a pillanatnyi értékét egy változóba a millis() függvénnyel. Ezzel tulajdonképpen "elmented az aktuális időt". Ezután pedig csak annyi a dolog, hogy figyeld, hogy a millis() -el kiolvasott érték és az általad a változóba elmentett érték ( tehát tulajdonképpen az aktuális idő és a lementett időpont ) különbsége elérte-e már az általad kívánt értéket, azaz a Te esetedben az 15000 ms -ot.
Nem kell várakozó ciklusban figyelni, elég ha a loop -on belül van egy lekérdezés és ha még nem teljesül a feltétel mehetsz tovább, a loop maga úgyis ciklikusan végrehajtódik. ( A belinkelt példát tényleg érdemes végigbogarászni, még ha az angol magyarázó szöveg nem is világos, a programot lehet értelmezni. ) -
happy555
aktív tag
Lehet sokféleképp, a Ds1302 abszolút nem indokolt.
Ha meg akarod akasztani ezidőre a program futását akkor a while az embered amin belül figyeled hogy elérte-e a meghatározott millis() értéket, és mellé teszed || (OR) a másik feltételed.if(.....){
unsigned long lejarat=millis()+15000;
while(millis()<lejarat || egyéb){
.........;
}
} -
tvamos
nagyúr
Az nagyon jo cucc, nyugodtan megveheted!
Ha nem feltetlen akarsz penzt kolteni, bar tudom, van az ugy, akkor a millis() a te baratod! A peldaban ott van, hogyan hasznald.
A masik kerdest nem ertem. State machine-ekkel csinalod a programod? Mert akkor nem lehet kerdes... De jobb a switch-case...
Amugy ciklust while-al!
Minden keppen jo, ha megnezegeted a doksit. Legalabb gyakorlod az Angolt is! (Nem egy bonyolult szoveg.) Amugy a wiki-n legorgetsz alulra, es ott van ket (ingyenes!!!) tanfolyam, ha vegigcsinalod, profi leszel! (En, igy 18 ev szoszoles utan vegigolvasgattam, hogy tudjak velemenyt alkotni, es nagyon jo a TavIR!)
Ugyen nem valami ilyesmit csinalsz: [link]!!!
-
Danex
addikt
-
happy555
aktív tag
-
tvamos
nagyúr
Azert, mert nem szabad! Es amit szabad, az sem dragabb, tehat felesleges is!
-
happy555
aktív tag
-
happy555
aktív tag
Lehet csiszolgatni (fogod is
) bőven.
Már csak azért is, mert megfelel erre a feladatra, de mást így nem tud végezni, mivel megakasztod a programot egy led villogtatás loop-al.
Pedig míg nincs más dolga, kezelhetne esti fényt, mérhetne és küldhetne hőmérsékletet, kezelhetne csengőt, fénysorompót, stb......
Jahh és lehetne benne "kiskapu funkció" is, amikor nem nyit ki teljesen, csak hogy gyalog be lehessen menni. -
happy555
aktív tag
Majd kiderül, mindig szokott beesni 1-2
Talán inkább annyi, hogy egy kicsit egyszerűsíteni kellene a rendszert, hogy ne egy távírányítós modul reléje kapcsolgassa az arduino bemeneteit, és azt ne kelljen resetelni tápelvétellel.
Tisztább lenne illlesztened egy rf vevőt (meg akár adót is), és akkor nem kellene annyi relét kattogtatni.
6 helyett csak 2 relé kéne. 1 az irány kiválasztásához, és 1 a delej kapcsolásához. -
happy555
aktív tag
Lesz baj ezzel így , több is :/
int lowlow = (nyitoGomb == LOW && zaroGomb == LOW) == true;
Ha egy változó csak igaz vagy hamis funkcióval kell hogy bírjon akkor elég ha boolean.
Program elején deklarálnám, és loopban csak állítanám az értékét.
DE! Ha do - while ciklust használsz akkor a feltétel tárgyát cikluson belül állandóan vizsgáltatnod kell, különben sose fog kiugrani belőle, így elakad a program.Inkább kihagynám a lowlow-t és while(digitalRead(nyitoGomb)==HIGH || digitalRead(zaroGomb)==HIGH);
Jó éjt!
-
happy555
aktív tag
Ha végálláskapcsoló valamelyik, amit figyelni akarsz, arra van több megoldás is, hogy kikapcsold a motort.
Ha jól értem amit szeretnél,pl.:
while (Gomb1 == HIGH && Gomb2 == LOW && Gomb3 == LOW)
{
if(digitalRead(ACvPin)==LOW){
digitalWrite(jelzoPin, HIGH);
delay(500);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(iranyPin1, HIGH);
delay(200);
digitalWrite(iranyPin2, LOW);
delay(500);
}
digitalWrite(ACvPin, HIGH);
}Ha a feltételek adottak, akkor lefut az egész. Viszont amint az ACvPin HIGH lesz ki fogja hagyni az if ciklus alatti utasításokat.
Aztán ha változik a feltétel, azonnal kiugrik a while ciklusból.
Így a delay-ek csak egyszer futnak le, és utána azonnal ki tud lépni.
Így gondoltad? -
Danex
addikt
Már látom, hogy kihagytam az "igaz -hamis" másik ágát
Tehát vizsgálja a feltételed, majd ha az igaz, akkor utána megnézi, hogy az előző "loop körben" már teljesült-e ez a feltétel vagy sem. (Ha nem az azt jelenti, hogy most nyomódott le a gomb tehát most kell lefuttatni az egyszer futtatandó parancsokat ("mostvaltozottmeg")
Ezután megváltoztatja a XYZ_mode IGAZ-ra (ide igazából az utolsó tartalma mehetne)
if (XYZ_mode)
{
digitalWrite(ACvPin, HIGH);
}Majd a következő if meg lefuttatja a "mostvaltozottmeg" parancscsoportot. (Ide még szerintem be kéne rakni egy "mostvaltozottmeg = FALSE; -t is.)
De látok hibákat a kódban
, de talán a logikai része működőképes és azon elindulhatsz.
(Az a baj, hogy a kimenetek nem tudom mi mit kapcsol, így nehéz
-
Danex
addikt
Annyira én se vagyok benne (próbálgatásokkal tudok csak működő programot csinálni), szerintem úgy lehetne megoldani, ha az eseményekhez külön változós készítesz.
Mármint a loop-ba beraknám a
if (Gomb1 == HIGH && Gomb2 == LOW && Gomb3 == LOW)
{
if (XYZ_mode == FALSE)
{
mostvaltozottmeg = TRUE;
}
else
{
mostvaltozottmeg = FALSE;
}
XYZ_mode = TRUE;
}
else
{
XYZ_mode = FALSE;
}
if ( mostvaltozottmeg)
{
digitalWrite(jelzoPin, HIGH);
delay(500);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(iranyPin1, HIGH);
delay(200);
digitalWrite(iranyPin2, LOW);
delay(500);
}
if (XYZ_mode)
{
digitalWrite(ACvPin, HIGH);
}Tehát ha mindhárom gomb le valamilyen állásban van akkor az ACvPin-en kívüliek egyszer fussanak, viszont az ACvPin meg a gombok lenyomása alatt végig.
Ha minden igaz a fenti kód ezt csinálná, de már éjjel 1 óra van és mint mondtam, próbálgatással tudok még csak programozgatni
-
Danex
addikt
Én banggood-ról rendeltem, csak ugye a 433MHz-est.
De itt a 315MHz-es verzió
Én Jan 06-kor rendeltem, ma érkezett vidékre.
-
happy555
aktív tag
Szóval:
Mint már írtam:Ha stabil 5V-ot adsz a Vcc-re, és ugyanazt az 5V-ot viszed a relékhez attól nem "megy át áramerősség" az arduinon!
Viszont ha pl 9V adsz a boardodra és a vcc-t viszed tovább, akkor lehet megsütöd azt a pirinyó feszstabját!Másképp:
Ha az arduinon lévő (DC bemenet) feszstabbal előállított 5V-al táplálod meg a reléket akkor lehet füst.Remélem érted, ha nem, akkor tényleg hagyjuk....
-
happy555
aktív tag
Szóval, ha az adapter bemeneten táplálod az arduinot akkor legalább 7V-ot kell adnod, mert onnan a feszstabjára kerül, amin ugyebár esni fog a feszültség....
A relén pedig az a jumper nem tesz mást, mint egy kapcsoló.
Ha zárod akkor behúz a relé, ha nem, akkor csak a visszajelző led gyullad ki.
Arduino "5V" és relé "VCC" összeköt, és mehet a tápodra! De az tényleg 5V legyen!! -
happy555
aktív tag
Kicsit tisztázzuk ki a dogokat!
Pontosan hova adsz, és hány voltot az arduinora?
Vin vagy Vcc?
Ha stabil 5V-ot adsz a Vcc-re, és ugyanazt az 5V-ot viszed a relékhez attól nem "megy át áramerősség" az arduinon!
Viszont ha pl 9V adsz a boardodra és a vcc-t viszed tovább, akkor lehet megsütöd azt a pirinyó feszstabját! -
Új hozzászólás Aktív témák
Hirdetés
- BestBuy topik
- LEGO klub
- Melyik tápegységet vegyem?
- Milyen egeret válasszak?
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- Autós topik
- Tudományos Pandémia Klub
- Milyen monitort vegyek?
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Samsung Galaxy A54 - türelemjáték
- További aktív témák...
- UF Lenovo Yoga 9i x360 Érintős Hajtogatós Laptop Tab 14" -60% i7-1360P 16/1TB Iris Xe 2,8K OLED 90Hz
- Lenovo Yoga 9i x360 Érintős Hajtogatós Laptop Tab 14" -60% i7-1260P 16/512 Iris Xe 2,8K OLED 90Hz
- Új DELL Inspiron 16 Fémházas Multimédiás Laptop 16" -40% Ryzen 7 8840U 8mag 16/1TB FHD+ IPS
- Új DELL Inspiron 16 Fémházas Multimédiás Laptop 16" -40% Ryzen 7 8840U 8mag 16/1TB FHD+ IPS
- Sony FE 28-70 mm F3.5-5.6 OSS
- TP-Link Archer C1200 Router eladó (1200 Mb/s Wi-Fi)
- BESZÁMÍTÁS! Asus TUF B450M R5 5600X 32GB DDR4 512GB SSD RTX 3060 XC 12GB Rampage SHIVA Chieftec 600W
- Bomba ár! HP EliteBook 850 G2 - i5-5GEN I 8GB I 256GB SSD I 15,6" FULL HD I Cam I W10 I Gari!
- BESZÁMÍTÁS! Microsoft XBOX One S 1TB lemezes játékkonzol garanciával hibátlan működéssel
- DELL PowerEdge R730xd 16LFF+2SFF rack szerver - 2xE5-2680v3,64GB RAM,4x1GbE,H730 RAID v ZFS
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest