- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Atomenergiával dübörögnek tovább az Amazon adatközpontok, SMR-ek is jöhetnek
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
- Az NVIDIA ipari AI-felhőt épít a németeknek, együtt az OpenAI és a Google
- Két új Ryzen közül választhatnak a kézikonzolok
-
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
-
qisqaqas
senior tag
válasz
DrojDtroll #493 üzenetére
Jogosultság rendben van?
-
Hyperion
senior tag
Sziasztok!
Tudtok ajánlani végleges megoldást 20x4-es vagy bármilyen, sok kábelt igénylő eszköz stabil, végleges összekötésére az arduino-val?
Dupont kábelt használtam eddig, de őszintén szólva nem az igazi :/
-
kagzer
aktív tag
válasz
DrojDtroll #493 üzenetére
Az USB-s eszközök a /dev/ttyUSB# jelennek meg.
lsusb-vel a csatlakoztatott USB-RS232 is látszania kell.
Nálam:
Bus 004 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port -
JozsBiker
aktív tag
válasz
DrojDtroll #472 üzenetére
Még esetleg azt is nézd meg a gépeden, hogy az Arduino -s USB porthoz az a COM port szám van-e rendelve amit gondolsz.
-
Pubszon
veterán
válasz
happy555 #490 üzenetére
Köszi a kódot.
A asm volatile (" jmp 0"); parancs a szoftveres reset? -ezt kipróbálom még ma- Mert akkor inkább ezt használom és egy bemenetet nem kell felhasználom meg kábelezni sem kell.
Ha pedig a jelenleginél maradok, akkor egy 1KOhm-os ellenállást beiktatok, de jelenleg megy rendesen. -
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
}
} -
Pubszon
veterán
A túlcsordulás megelőzése érdekében csináltam, hogy ha több mint 30 napja megy és a legközelebbi szabad pillanatába lereseteli önmagát. A belső 32bites számláló majdnem 50 napig képes számlálni, emiatt 19 nap alatt csak lesz egy szabad pillanat.
Ezt így oldottam meg:// Reset 30 nap futas utan
if ((vegallasZarva == LOW) && (digitalRead(lampaPin) == HIGH) && (day > 29))
{
digitalWrite(ResetPin, LOW);
}Tehát hogy ha be van zárva a kapu és a lámpa sincs felkapcsolva, illetve több mint 29 napja fut (azaz legalább 30), akkor a reset pint LOW-ra teszi. A reset és a D12 közvetlen össze van kötve, a setupba pedig a D12 HIGH-ra van állítva.
Mivel majd holnap rakom össze a hardvert (a kapunyitóét), emiatt ezt nem tudtam kipróbálni, hanem most ezzel gyakorlok meg vele együtt a soros kommunikációt is.
int led = 13;//pin 13 as OUTPUT LED pin
int resetPin = 12;
int ledState = digitalRead(led);
unsigned long sec;
// the setup routine runs once when you press reset:
void setup() {
digitalWrite(resetPin, HIGH);
digitalWrite(led, LOW);
delay(200);
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
pinMode(resetPin, OUTPUT);
Serial.begin(115200);//initialize Serial Port
Serial.println("");
Serial.println("Start");//print reset to know the program has been reset and
//the setup function happened
delay(500);
}
// the loop routine runs over and over again forever:
void loop() {
sec = millis() / 1000; // Masodperc
Serial.println("LOOP Start");
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
ledState = digitalRead(led);
Serial.print("LED Statusz: ");
Serial.println(ledState);
sec = millis() / 1000; // Masodperc
Serial.print(sec);
Serial.println(" masodperc telt el indulas ota...");
delay(1000); // wait for a second
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
Serial.print("LED Statusz: ");
ledState = digitalRead(led);
Serial.println(ledState);
sec = millis() / 1000; // Masodperc
Serial.print(sec);
Serial.println(" masodperc telt el indulas ota...");
delay(1000); // wait for a second
if (sec>20)
{
Serial.println("Reset most...");
delay(10);
digitalWrite(resetPin, LOW);
Serial.println("HIBA! Reset nem mukodik...");
}
//this never happens because Arduino resets
} -
gyapo11
őstag
Lejárt a szerkesztési idő, itt a javított, van még benne egy hiba, szóval csak körülbelüli mintának jó:
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()
{
if (tulcsordulas == 0)
{
reszido = millis() / 1000 - start;
}
else
{
reszido = millis() / 1000;
}
if (reszido < 0) //túlcsordult
{
tulcsordulas++;
reszido = millis() / 1000;
}
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;
} -
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.
-
Pubszon
veterán
Ez így jó szerintetek?
A program elején:
unsigned long sec;
unsigned int minute;
unsigned int hour;
byte day;A loopban pedig:
sec = millis()/1000;
minute = sec/60;
hour = minute/60;
day = hour/24;Ezzel könnyen tudok egy 30 naponkénti resetet és egyéb időhöz tartozó dolgot csinálni.
-
Danex
addikt
Hát igazából az lenne a lényeg, hogy úgy 1-2 hónapot kibírjon 18650-es akksiról. És szerintem elég lenne a 2 óránkénti küldés, de ez majd még a jövő zenéje mivel hajnal fél5kor leesett a falra rögzített tabletem és nagy örömömre berepedt a kijelző és még a tapétát is meghúzta...
-
gyapo11
őstag
Esetleg lehetne nem interruptos megoldással, hanem tápkapcsolással, hogy a számláló kapcsolja rá a tápot az arduinora, az elvégzi amit kell és reseteli a számlálót, ettől megszűnik a tápja. Két bekapcsolás között a fogyasztása 0, viszont minden szükséges adatot föl kell írnia valahova, hogy a következő ébredéskor tudja hol hagyta abba.
-
-
Danex
addikt
Én egy bluetooth-os fülessel tudnám elképzelni a hangvezérlést. Megnyomja az ember a hívás gombot a fülesen és akkor elkezd hallgatózni a telefon. Elég Sci-Fi lenne
Én amúgy ha zárat vezérelnék akkor mondjuk a telefon NFC-jét is bekötném a nyitási sorba (az implantátum majd csak később
)
-
happy555
aktív tag
-
Danex
addikt
Amúgy mik az elterjedtebb és olcsóbb megoldások a vezeték nélküli szenzorokhoz?
Tehát teszem azt akarom egy virág földjének a nedvességtartalmát mérni, de nem tervezem, monidjuk egy házon keresztülhúzni a vezetéket akkor mik az alternatívák? Van esetleg valami időzítési lehetőség ami mondjuk 30 percenként felébreszti az arduino-t elküldi az adatot majd visszamegy alvóba?
Arduino mini + RF adó + táp(akksi)?
-
Danex
addikt
Egy nagyon várós dolog.
[link]
-
JozsBiker
aktív tag
válasz
DrojDtroll #472 üzenetére
Ha van rá lehetőséged próbáld meg másik gépről ill. másik madzaggal. Ha abszolút semmi életjelet nem ad próbáld ki esetleg külső tápról is.
Persze sajnos maga az Arduino is meghibásodhatott, pl. ha sztatikusan feltöltődve oda nyúltál ahova nem kellett volna. -
DrojDtroll
veterán
Mi lehet annak az oka, ha a gépem nem látja a lapomat? Hónapokig minden ment szépen, aztán egyszer csak semmi. A gépemben változás nem történt.
Meghalt az arduinom?
-
bacus
őstag
sima papirbolti 160-200 g műnyomó papirt kell venni lézernyomtatóhoz. (ezt szét is vágják egy csomó boltban ha csak A0 méret van. (a fotópapir is jó, ha az lézernyomtatóhoz való, a lényeg a fényes felület)
nem fogdosod össze, kinyomtatod, a nyákot alaposan megtisztitod, akkor jó, ha a viz a felületén nem ugrik össze, hanem szétterül, majd ráforditod a papirt, és ráteszed a vasalót 5 percre a legforróbb álláson (én rá is szoktam ragasztani egy lézerbe is használható öntapadóval, hogy véletlenül se mozdulhasson el (ha van valakinek jobb ajánlottabb ragasztószalag ötlete van az jól jönne), majd még kb 5 percig a vasaló hegyével is rányomva vasalod. akkor jó, ha már átlátod a papiron a rajzot. (tele van a youtube videóval)
ha ez megvan, akkor be a vizbe és hagyd ázni.(5 perc minimum). A nagyja leázik az apraja óvatosan ledörzsölhető (esetleg sósavba lehet meriteni, de még nem próbáltam !), 0,3 mm -es vonalvastagságnál ne használj vékonyabbat, de azért ha muszáj, akkor mehet az is. Száradás után még lehet belejavitani valami maratásálló filctollal. (nekem bevállt a staedtler lumocolor, csak ajánlani tudom)
maratás, majd igény szerint kémiai ónozás. lomex.hu-nál kapható tn150 marató kiváló, hozzá a tn160 ónozó.
Pár műanyag tálra még szükség van..
-
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.
-
Pubszon
veterán
De ez egy végleges projekt, breadboardal és UNO-val csináltam, most pedig a NANO-t ültetem a próbanyákba, de a NANO kivehető lesz.
A breadboard kicsit drága ahhoz meg nincs is olyan kontakt mint a forrasztás.
Saját nyákot lenne jó csinálni, de nincs meg hozzá ami kell sajnos. -
Pubszon
veterán
Megjött egy másik Arduinom, egy Nano, ami lesz a kapunyitó vezérlője és meglepődve láttam, hogy komolyabb mint az Uno a plusz 2 analóg bemenetével.
Közbe elkezdtem csinálni a nyákot is amibe bele fog menni, már az is megvan 70%-ban. -
JozsBiker
aktív tag
Időközben (én is) szanaszét szívattam magam. A tapasztaltabbak biztos mosolyognak, de hátha valaki okul belőle.
Nemrég rendeltem egy HC-06 bluetooth modult, és persze szerettem volna ki is próbálni. Kerestem egy szájbarágós videót ami alapján életre tudom kelteni, ezt találtam:Összeraktam eszerint a kapcsolást, feltettem az appot, összelőttem, és ... sehogy sem akart rendesen működni. Utánakeresgéltem a neten, és először akkor izzadtam le mikor azt írták, hogy a BT modul Rx ágának bizony túl sok az 5 V -os szint amit az UNO panel ad, hanem le kell osztani 3,3 V -ra. Na, gondoltam, el is küldtem az újdonsült BT modulomat. De kiderült hogy kibírta. ( Sőt, azóta már láttam több példában is közvetlenül összekötve, szóval nem tudom mi az igazság. )
No akkor mi lehet a gond, hiszen mindent úgy csináltam ahogy a videóban van, ill. a benne hivatkozott oldalon. Furán villogott a 13 -as pin -en levő led amikor 1 -et küldtem, és a vett adatban is duplán szerepelt a "LED: on". De miért ? Aztán mikor a kiküldött adatot egyszerűen visszafordítottam a vételbe és a soros monitor ablakon megláttam, megvilágosodott. Ezt láttam:42
49
50
124
57
57
124
57
57
124
49
35Vagyis amikor én azt hittem hogy egy 49 -es ASCII kódú '1' megy ki, akkor a fenti számsort kapta a panel. Nosza, nézzük meg mi van ha 0 -t küldök:
42
49
50
124
57
57
124
57
57
124
48
35Látható, hogy benne van a 48, azaz a 0 ASCII kódja, node a videóban szereplő rövidke program ezt a kódsort gyakorlatilag nem kezeli le, szinte csak a véletlen műve hogy működik a led kapcsolgatás.
A korrekt Arduino kódot ittlehet megtalálni. Pöttyet összetettebb azért.
-
JozsBiker
aktív tag
A rajz szerint érdekes módon éppenhogy az USB táp ágában van a védelem ( lásd rajz közepén az USB csati utáni F1 jelű 500 mA -es fuse ). Illetve nem is érdekes módon, mert az az oka, hogy ne terhelhesd túl amire rádugod, mondjuk a számítógépet.
Egyébként ha a 12 V -ról tényleg jól működik a ketyere akkor elméletileg megoldható amit írsz, hiszen az USB 4 eréből a tápot kell csak valahogy elnyisszantani ( lásd rajzon hogy miről beszélek ), az adat adás és vétel, valamint a föld maradjon. De felelősséget nem vállalok :-) -
tiggger
csendes tag
válasz
happy555 #451 üzenetére
Jogos
Igazából,azt tudom,hogy 12 voltról nem kapcsol ki és nem melegszik az IC.Az állapotjelző LED*-ek világitanak illetve villognak....tehát pontosan ugy viselkedik mint USB-ről,amig le nem kapcsol(a villogó sárga led folytonosan világitani kezd),addig pedig a PC felismeri és ha sietek az arduino progiban meg is tudom nyitni....bár ritkán tart ki ennyire sokáig...
Annyi még,hogy minnél több dolgot(tft shield,tft) kapcsolok rá,annál gyorsabban melegszik és kapcsol ki....
12 V-ról mindegy mit csinálok,sem melegedés sem kikapcsolás...
Nincs rajta sérülés,nincs rajta progi.... -
tiggger
csendes tag
válasz
JozsBiker #449 üzenetére
Köszi,tételezzük fel,hogy értem amit irtál,bár ez nekem egy hosszabb folyamat lesz
,mivel ennyire azért nem vagyok otthon a témában
Minden bizonnyal rövidzárlatot csináltam,mert USB-ről túlhajtva nem volt,hisz csak PC-re dugtam...
A 12 voltos bemenetre raktak a gyárban túlfeszvédelmet,de az Usb-s ágra nem,ezért gondolom ott a problem,csak sajna nem tudom hol keresni....Nem is tudom érdemes e vele kinlódni....ha valami bagatel baja van,én meg rendelek egy másikat....hát..szét fog vetni az idegEgyszerűen nem értem,hogyhogy 12v -ról simán megy,usb-ről tojást lehet sütni rajta...Nem lehet valahogy megkerülni az usb-ről való tápellátást?Szóval,hogy programozni lehessen de közben 12v-ról üzemeljen?
-
JozsBiker
aktív tag
Nem tudom a megoldást, de itt
a rajza, alul van egy komparátor és egy FET, ami elvileg úgy működik, hogy a komparátor kimenete kapcsolgatja a FET -et attól függően, hogy jön-e az USB felől feszültség vagy sem. Tulajdonképpen ez határozza meg, hogy az áramkör az USB tápról vagy külsőről működik.
Persze ezzel még nem magyaráztam meg semmit, hiszen - ha jól értem - amikor melegszik csak az USB van rádugva a panelra. A rajz bal felső sarkában vannak a táp IC -k, elvileg üzemszerű hogy az 5 V rájusson a kimenetükre. -
tiggger
csendes tag
Tisztelt hozzáértők.
Egy kérdésem lenne hozzátok.
Van egy sainsmart mega 2560 -as vezérlőm,és valamit sikerült hazavágnom benne
Az a helyzet,hogy 12 voltról simán működik,semmi gond.
Ellenben ha USB-ről kapja a feszt,legyen az PC vagy 5 voltos USB-s táp,akkor percek alatt lekapcsol,mert tűzforróvá válik az 5 V-os feszültség regulátor IC,illetve IC-k,Mert a nagy rohadtul és valamelyest a kicsi is melegszik....Van valakinek valami tippje?Nem lenne probléma,ha már feltoltam volna rá a kivánt programot,de sajna addig nem jutottam el
Ilyenkor az IC lábain 1,3 és 4,3 voltot mérek,nem is értem hogyan jut fesz az IC-be,azt hittem USB-s betápnál az kimarad a körből....
Segitségeteket előre is köszönöm... -
Pubszon
veterán
válasz
happy555 #446 üzenetére
Az aktuátorba van egy kör alaku mágnes, mellette egy reed relé.
És ahogy forog, egyfolytában nyit/zár. Ez gyárilag van benne, mert ha valamit oda zár vagy nagyon erőlködik, akkor a gyári tápegysége lekapcsolja és 3 másodperc után lehet újra elindítani.
A pulseIn parancs nem jó, mert olyan mint a delay, addig nem tudok mást csinálni vele, amíg le nem jár a beállított idő.
Viszont rátaláltam erre, de ez meg csak egyszer fut le, de annyiszor meg le kell, és utána nem nézi folyamatosan tovább.
Meg az utóbbit nem is tudtam igazából használni, csak soros monitoron néztem.
Ha nincs rá megoldás, akkor az van, hogy egy másik arduino panelt erre kell felhasználni.Neked van erre valami ötleted?
-
Pubszon
veterán
A pulseIn paranccsal barátkozok, minden oké is, de az a baj, hogy lebénítja arra az időre a működést amíg várja a pulzust.
Nem lehet úgy megoldani, hogy közbe mást is tudjon csinálni? -
Pubszon
veterán
Köszi srácok, holnap kipróbálom ezt a verziót!
Sokat kerestem de mégsem találtam meg. -
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();
}
} -
Pubszon
veterán
Ezt a kódot honnan tudom megszerezni?
-
Pubszon
veterán
Mai kérdésem.
Feltételnek hogy kell azt beállítani, hogy pl a ledPin, HIGH? -
Pubszon
veterán
válasz
happy555 #432 üzenetére
Így volt először, csak az egyszerűség kedvéért csináltam time-ot belőle.
Viszont továbbmentem és a késleltetés idejét egy változóval helyettesítettem, amit egy potival állítok, így a világítás idejét 1-5 percig tudom állítani, csak az a baj, hogy nem lineáris.Most pedig ráállok az RPM számlálós témára, mert az aktuátorba meg van minden ami ehhez kell.
Ez is jó dolog, mert ha esetleg valami miatt megszorulna a kapu, akkor inkább állítsa le, mintsem leégjen valami.
Ha ehhez van valami tipped, ötleted, szívesen várom. -
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);
}
} -
Pubszon
veterán
Na, de ezt is megcsináltam!
A nem releváns ciklusokat és részeket nem rakom ide bele, csak ami érintett.unsigned long lejarat;
unsigned long time;
void setup()
void loop()
time = millis();
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 = time+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);
}
}Nekem itt kb annyit segítetek mint amennyi egyéb infót a neten is találok.
Lehet fárasztó vagyok nektek, ezt nézzétek el nekem.
Köszi. -
Pubszon
veterán
válasz
JozsBiker #427 üzenetére
Ha jól értem akkor kell egy jelenlegi idő(time) és egy késleltetési idő(lejarat).
És akkor tudom azt csinálni, hogy ha loopon belül megvizsgálom a time értékét (mondjuk 1.000.000ms) és a késleltetést mondjuk (5.000ms) akkor az addig fogja csinálni, amíg a time<lejárat+time lesz avagy 1.005.000 lesz a time.
Ezt értem is, de még azt nem tudom, hogy mit hol nézzek és hogy melyik paranccsal. -
tvamos
nagyúr
válasz
happy555 #426 üzenetére
Ha nincs mas dolga, minek menjen tovabb?
Amugy meg, ahol o tart a programozassal, meg ez is jo szerinem. Majd 1-2 honap mulva johetnek a state machine-ek, es akkor kiraly programokat tud majd irni! (Arduinon nem hasznaltam meg sosem, mert cask gyorsan osszeheftelni valamit mutatoba hasznalom.)
-
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. ) -
tvamos
nagyúr
válasz
happy555 #423 üzenetére
Ha jol emlekszem, ott sem tanitjak a state machine-eket. Es nem is tudok ingyenes tanfolyamot, ahol tanitananak ilyesmit. Pedig hasznos eszkoz, es nem is bonyolult.
(#422) Pubszon
Nezd meg meg a break-et is, a while-hoz.Ha jol emlekszem....
temp=mills()+1000;
while ( !button && (mills()<temp) ) ; -
Pubszon
veterán
Köszi srácok, utána nézek akkor a millis() parancsnak, hogy értelmezzem.
Lassan, de tanulom.(#421) happy555: Kipróbálom. A void setup() elé pedig beírtam, hogy long lejarat = 0;
else if (value == lampaON)
{
{
value = mySwitch.getReceivedValue();
digitalWrite(lampaPin, LOW);
unsigned long lejarat=millis()+15000;
}
while(millis()<lejarat);
digitalWrite(lampaPin, HIGH);
}Mint korábban írtam, van benne felesleges dolog.
Így jó lesz szerinted? 15 másodpercig fog világítani ha jó értelmezem, aztán magától lekapcsol.(#420) tvamos: A TavIR ingyenes tanfolyamát elkezdtem, bár még csak a 3. leckénél tartok.
Még kezdő vagyok, az if, do és a while parancsokat használom leginkább. -
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
-
Pubszon
veterán
Azt hogy tudom megcsinálni, hogy az if ciklus addig fusson míg egy feltétel nem teljesül (ez tiszta) vagy mondjuk 15 másodperc? Tehát az idő a lényeg.
Ehhez ha jól tudom kell egy óra modul? Ha ige, akkor jó egy DS1302 chipes? -
Goldrox
újonc
Sziasztok
Az arduino 328 pro mini táplálható közvetlen 12V ról??? -
Nekiugrok egy új projektnek:
Arduino alapú repülőgép vezérlőpanel MS Flight Sim X és Lockheed Martin Prepar3d szimulátorokhoz.Az alkatrészlista összeállítása megvan, és jórészt a kód is, egyelőre fejben. A héten rendelem be Kínából a szükséges alkarészeket. Ha minden jól sikerül, akkor a tervek között van kereskedelmi terméket csinálni belőle. Persze újratervezett vezérlő elektronikával, akkor a protoboard kilőve.
Ilyenek lesznek az előlapok:
-
happy555
aktív tag
-
Pubszon
veterán
válasz
happy555 #406 üzenetére
Hát igen, még lesz 2 szabadon felhasználható gomb, nem tudom mi lesz velük, de valami biztos.
Amúgy az RCSwitch-el sikerült.
Nélkületek tuti nem jött volna össze.
Ez a projekt lassan kész, de találok ki másikat.
Mondjuk a kapuba nem az UNO-t fogom berakni, hanem úton van 2db NANO.Na de lenne még két részben ide tartozó kérdésem.
1. Az RF receiverre milyen antennát rakjak, mert jelenleg pár méter a hatósugara antenna nélkül.
Gondolom a bal alsó sarokba lehet forrasztani.2. Szilárdtest relével egyenáramot is lehet megszakítani ha azon csak váltóáram van feltüntetve?
Például. -
Pubszon
veterán
Na végül sikerült megcsinálnom, 2 gombot már be is programoztam, van benne pár felesleges parancs, de már csak finomitanom kell rajta.
-
tvamos
nagyúr
Azert, mert nem szabad! Es amit szabad, az sem dragabb, tehat felesleges is!
Új hozzászólás Aktív témák
Hirdetés
- Bundle topik
- Melyik tápegységet vegyem?
- Eredeti játékok OFF topik
- Tőzsde és gazdaság
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- Kerékpárosok, bringások ide!
- OTP Bank topic
- Milyen okostelefont vegyek?
- Geri Bátyó: B550 szűk keresztmetszet, de mi és miért?
- Milyen videókártyát?
- További aktív témák...
- HP Elitebook 840 G3 laptop (15,6FHD/I5-G8/8GB/256SSD/Magyar/Win11)
- AMD Ryzen 5 5500 - GTX 1080Ti 11Gb - MSI B450 Max
- HP Zbook 15 G3 laptop (15,6FHD/I7-G6/16GB/256SSD/AMD2GB/MagyarVilágítós/Win11)
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 13 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! Microsoft XBOX Series X 1TB SSD fekete játékkonzol extra kontrollerrel dokkolóval
- Bomba ár! Lenovo ThinkPad Yoga 260 - i5-G6 I 8GB I 256SSD I 12,5" Touch I W10 I Cam I Gari!
- Telefon felvásárlás!! Samsung Galaxy A12/Samsung Galaxy A22/Samsung Galaxy A32/Samsung Galaxy A52
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- VÉGKIÁRUSÍTÁS - REFURBISHED - Lenovo ThinkPad 40AC Thunderbolt 3 docking station
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest