Hirdetés

2024. április 26., péntek

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-03-11 00:46:52

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.

Összefoglaló kinyitása ▼

Hozzászólások

(#301) Pubszon válasza happy555 (#300) üzenetére


Pubszon
veterán

Értem és ezt akarom elkerülni.
Az arduino 7V-ot fog kapni, az a minimum ami javasolt.
De lesz egy stabil 5V ami a relé modult fogja táplálni.
De a kérdés, hogy az összes GND lehet közös (7V, 5V meg az arduino GND-je)?

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#302) spidersoft


spidersoft
senior tag

Üdv! Próbált már valaki i2c ==> HD44780 LCD modult? Normális, hogy ennyire lassú? A szükséges dolgokat kiíratom (12db rövid string), és van vagy 100ms... ugyanez direktbe, négybitesre kötve mérföldekkel gyorsabb, szóval nem a stringfeldolgozással vagy más programozási melléfogással van baj... Nem lehetne ezen gyorsítani valahogy?

(#303) spidersoft válasza spidersoft (#302) üzenetére


spidersoft
senior tag

update: rámértem... 87 vs. 11 ms. Jó lenne másodpercenként legalább kétszer frissíteni a kijelzőt, de azt se akarom, hogy a "gépidő" majd' ötödét a kijelző vegye el...

(#304) happy555 válasza spidersoft (#303) üzenetére


happy555
aktív tag

Úgy tudom, I2C sebessége állítható.

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#305) spidersoft válasza happy555 (#304) üzenetére


spidersoft
senior tag

Kérdés csak az, hogy a busz megy-e eleve lassabban a kelleténél (max. feleennyinek kéne lennie, ha a "normális" 100kHz-en megy, elvileg az a default, át én meg nem írtam), vagy valami más hiba van... megszakítást jelenleg nem használok, szóval az nem akaszthat bele.

(#306) happy555 válasza spidersoft (#305) üzenetére


happy555
aktív tag

Úgy emlékszem ~1ms/karakter alapjáraton a sebessége I2C-n.

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#307) spidersoft válasza happy555 (#306) üzenetére


spidersoft
senior tag

Inkább másfél, 80 karakter 121-122ms alatt megy át, 1db .setCursor(x,y) is ~1,5ms. Az illesztő IC 100kHz-ig működik (PDF), szóval hiába is venném feljebb a wire sebességét... mindegy, majd meglátom még, hogy mi legyen...

(#308) Pubszon


Pubszon
veterán

Megjöttek a szenzorok, pontosan; fény, eső, hang, ultrahangos távolság és érintés szenzor. :D

[ Szerkesztve ]

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#309) happy555 válasza Pubszon (#308) üzenetére


happy555
aktív tag

Jó szórakozás! :)

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#310) Pubszon válasza happy555 (#309) üzenetére


Pubszon
veterán

Meglesz, köszi, csak az arduino klón a legkorábbi rendelésem és az még nem ért ide. :W
Azzal együtt fog jönni 40 male to female vezeték meg egy breadboard.
Remélem napokon belül itt lesz. :D

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#311) happy555 válasza Pubszon (#310) üzenetére


happy555
aktív tag

Ez egy ilyen műfaj, várod mint gyerekek a mikulást :)

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#312) Pubszon válasza happy555 (#311) üzenetére


Pubszon
veterán

A mostani postás a nyugdíjat hozta, én meg elé mentem, mondom nem e hozott valamit és ez volt nála. :D
Még később lehet jön megint postás, aki csak levelet meg csomagot hoz, mert a postakocsit a nyugdíjas nem várja meg... hátha...
Amúgy tényleg, ma vagy 5-ször kimentem az utcára megnézni a postást. :D

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#313) Danex


Danex
addikt

Agh mennyit szenvedtem most ,hogy dekódolni tudjak egy RF távirányítót... vagy 40 oldal/forum felkeresése, vagy 5-6 library stb >.<

Szóval ebből:

Ez lett:

Már csak egy SD kártya kell és elkészül az Ajax webserver is :U

(#314) happy555 válasza Danex (#313) üzenetére


happy555
aktív tag

Mit látunk az első képen?
Logikai analizátorral dekódoltad?
Tehetsz az rf-re tekert vezetékből antennát.

[ Szerkesztve ]

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#315) Danex válasza happy555 (#314) üzenetére


Danex
addikt

Az első képen van egy kicsi nyák, rajta tranzisztorok és azok vannak rákötve az RF távirányító 1-1 gombjára.

Azaz, web szerveren keresztül kapott egy kérést az arduino ami félsec-re 5V-ot adott a tranzisztornak ami meg a távirányító 1-1 gombjának. :U

Csak az volt ezzel a gond, hogy ahány gomb annyi digitIO pin ment el, (Bár mega-n van sok) de így azért szebb is kábel management szempontból is. :U

Igen néztem, de úgy néz ki menni fog plusz antenna nélkül is (csak néhány méterre van a vezérlő)

[ Szerkesztve ]

(#316) happy555 válasza Danex (#315) üzenetére


happy555
aktív tag

Úgy néz ki mitha infratávirányító lenne...

Jaah értem, először hardveresen oldottad meg :D
Logikai analizátorral dekódoltad??
Vagy sikerült befogni a vevőpárral?

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#317) Danex válasza happy555 (#316) üzenetére


Danex
addikt

Sikerült a vevővel dekódolni az új rendszerrel.

A réginél meg ugye 1-1 gombnyomást "imitáltam".

(#318) happy555 válasza Danex (#317) üzenetére


happy555
aktív tag

Szerencséd volt :)
Ezzel mit irányítasz?

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#319) Danex válasza happy555 (#318) üzenetére


Danex
addikt

RGB Led vezérlőt, kis hangulatvilágítást a szobámban. :)

(#320) happy555 válasza Danex (#319) üzenetére


happy555
aktív tag

Szerveren keresztül?
:)

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#321) Danex válasza happy555 (#320) üzenetére


Danex
addikt

Aha, így a telefonomról tudom kapcsolgatni azt, illetve van egy kis 7"-os tablet is amit a falra tervezek felrakni ,hogy onnan is lehessen.

Tervben van a lépcsőház kapuajtójának a "lakásból való nyitás" funkciójának beépítése is, illetve a TV/Klíma (ezek IR alapúak) vezérlése.
Illetve amihez több pénz kell az egy hangrendszer üzemeltetése, amit úgy szint webszerveről lehetne kapcsolni, hogy melyik helyiségben szóljon a zene (Spotify rádió, ez a tableten menne mindig)

Meg tervben van majd a nyílászárók cseréjekor egy kis részre beépíteni 2db 12V-os PC ventilátort amik akkor kapcsolnának ki/be nyáron amikor a benti hőmérséklet túl magas, a kinti viszont kellemes (hajnali órák stb, viszont a levegő meg áll és nyitott ablaknál se akar bejönni. :W ) és ehhez még reluxa vezérlés servo motorral.

[ Szerkesztve ]

(#322) happy555 válasza Danex (#321) üzenetére


happy555
aktív tag

Azért kérdeztem, mert egy Bluetooth modullal is meg lehet oldani (ha nem akarod házon kívül vezérelni).
Sokkal egyszerűbb, olcsóbb.
Kész androidos progik vannak a kezelésére.

Amúgy a kis 433-as adót szeretem én is, sok mindenem megy vele itthon.

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#323) Danex válasza happy555 (#322) üzenetére


Danex
addikt

Csak a tabletemben nincs bluetooth :DDD

Illetve az MIT Appinventorral még alkalmazást is tudok csinálni hozzá.

De azért kösz a tippet! :R

(#324) happy555 válasza Danex (#323) üzenetére


happy555
aktív tag

Na azzal még nem foglalkoztam, de ha lesz rá időm akkor megnézem.
Egyszerű?

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#325) Danex válasza happy555 (#324) üzenetére


Danex
addikt

Szerintem nem nehéz, sajnos Widget-et nem lehet vele csinálni. Inkább fejben kell tudni összekapcsolni a dolgokat hiszen moduláris a rendszer, nem konkrét programozás.

(#326) Pubszon válasza happy555 (#322) üzenetére


Pubszon
veterán

Ezt a 433MHz-es RF vevőt hol lehet olcsón kapni?
Vagy ebay-en hogy keressek rá?
Nekem kapunyitóhoz kellene, most egy ilyenem van, de elég lenne egy arduinohoz való 5V-os is.
Mondjuk a jelenlegim 315MHz-es, ezt a távvezérlőt be lehetne programozni rá?

[ Szerkesztve ]

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#327) Danex válasza Pubszon (#326) üzenetére


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.

(#328) Pubszon válasza Danex (#327) üzenetére


Pubszon
veterán

Köszi, meg is rendeltem. :R (Mondjuk ebay-ről, mert oda vagyok regelve, de ugyan ez)
Nekem egy 2 gombos távirányítóm van, ugye a nyitás meg zárás funkció.
Remélem napokon belül meg jön az arduino és akkor játszok vele, majd ha meg ez is megjön, akkor visszatérek a beállításokra. :B
Köszi.

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#329) happy555 válasza Pubszon (#326) üzenetére


happy555
aktív tag

Mifelénk (európa) a 433MHz járja, jobb lenne arra átállni.
Amúgy a linkelt relés vevők fix kódosak szoktak lenni, simán reprodukálhatod.

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#330) Pubszon válasza happy555 (#329) üzenetére


Pubszon
veterán

Át fogok akkor állni, ideiglenesen jó lesz, jó a 433MHz-eshez is egyaránt.

Viszont mivel nagyon kezdő vagyok, ezért van egy kérdésem amire nem találok választ.

Ha van egy if ciklus amiben vannak parancsok, de én azt szeretném, hogy bizonyos parancsok csak egyszer fussanak le ha a feltételek megfelelnek, illetve megint csak pár fusson addig amíg a feltétel is megengedi, akkor azt hogy kell csinálni?
Itt a példám:
Azt szeretném, hogy ha a 3 feltétel is megfelel, akkor fusson le az összes parancs egyszer, de csak az utolsó digitalWrite(ACvPin, HIGH); fusson újra és újra amíg a feltételek engedik.
Mert ha jól gondolom, így ha az egyik feltétel megvoltozik, akkor lehet akár 1400ms múlva lép a következő ciklusra.

if (Gomb1 == HIGH && Gomb2 == LOW && Gomb3 == LOW)

{
digitalWrite(jelzoPin, HIGH);
delay(500);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(iranyPin1, HIGH);
delay(200);
digitalWrite(iranyPin2, LOW);
delay(500);
digitalWrite(ACvPin, HIGH);
}

Bocs ha hülyeséget kérdek, pár hete kezdtem utána olvasgatni. :B

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#331) happy555 válasza Pubszon (#330) üzenetére


happy555
aktív tag

Ha a "digitalWrite(ACvPin, HIGH);" fut újra meg újra, annak mi értelme?
Itt mindent csak egyszer állítasz, így minden marad a leírtak szerint, amíg másképp nem rendelkezel.
Írj más feltételekhez új kimeneti szinteket.

[ Szerkesztve ]

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#332) Danex válasza Pubszon (#330) üzenetére


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 :U

[ Szerkesztve ]

(#333) Pubszon válasza happy555 (#331) üzenetére


Pubszon
veterán

Tehát ha a feltételek adottak és lefutnak a parancsok, akkor utána nem futtatja többször csak figyeli a feltételeket amíg valamelyik meg nem változik?
Mert ha így van akkor az a legjobb nekem. :K

Én azt hittem hogy újra és újra lefut és gondoltam hogy ha pont az első delay alatt változik meg az egyik feltétel akkor megvárja míg végigfut és csak utána lép a következő ciklusra, de az már nem lenne jó mert akkor a kapu még több mint egy másodpercet erőlködne.

(#332) Danex: Köszi neked is, szerintem akkor én is többre tudok majd jutni ha itt lesznek a cuccok, addig meg csak fejbe futtatom le. :D
Ez meg még bonyolult. :(

[ Szerkesztve ]

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#334) Danex válasza Pubszon (#333) üzenetére


Danex
addikt

Már látom, hogy kihagytam az "igaz -hamis" másik ágát :W

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. :K (Az a baj, hogy a kimenetek nem tudom mi mit kapcsol, így nehéz :U

[ Szerkesztve ]

(#335) happy555 válasza Pubszon (#330) üzenetére


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?

[ Szerkesztve ]

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#336) Pubszon válasza happy555 (#335) üzenetére


Pubszon
veterán

Igen, azt szeretném, hogy a delay-ek egyszer fussanak le és ha bármi van egyből tudjon reagálni.
Na de inkább beírom ide az egészet, hogy így jó e.
Nagyjából meg van a leírás is hogy mi mi.
A resetPin az RF vevőt áramtalanítja, hogy a relék visszaálljanak alap állapotba. Ez addig lesz így, míg nem jön meg a másik. Mert ez csak self-lock, tehát egy gombnyomás akkor úgy is marad a relé. Az meg nekem nem jó, mert rövid áramszünet után kinyílna a kapu, meg ne legyen behúzva a relé, csak ha kell. :D

/*
Az aramkor:
* Gombok a +5V es a pin 2, 3, 9 es 10 koze.
* 10K ellenallas a pin 2, 3, 9, 10-re a GND-rol kulon-kulon.

* Megjegyzes: A legtobb Arduinon mar van egy integralt LED a pin 13-ra kotve.

A 4 csatornas rele panelen az 1. es 2. rele bemenetet ossze kell kotni a valtokapcsolas miatt.
Rele bekotese:
Rele 1: NC +30V DC motor fele, NO GND motor fele, COM +30V DC a tap felol.
Rele 2: NC GND motor fele, NO +30V DC motor fele, COM GND a tap felol.
Rele 3: NC 230V AC a DC tap fele, COM 230V AC a halozati arambol.
Rele 4: NC +12V DC a 2 csatornas tavvezerlo fele, COM +12V DC a tap felol.

*/

const int buttonPin1 = 2; // Kapu nyitas gomb, a vevo egyik releje
const int buttonPin2 = 3; // Kapu zaras gomb, a vevo masik releje
const int iranyPin1 = 4; // Kapu nyitas-zaras, elso rele valtokapcsolo 1. rele
const int iranyPin2 = 5; // Kapu nyitas-zaras, masodik rele valtokapcsolo 2. rele
const int jelzoPin = 6; // Jelzofeny nyitas/zaras ideje alatt 3. rele
const int resetPin = 7; // Vevo reset hogy a relek NO-ba alljanak 4. rele
const int ACvPin = 8; // Motor 230V lekapcsolasa 5. kulonallo rele
const int vegallasPin1 = 9; // Vegallaskapcsolo-nyitva
const int vegallasPin2 = 10; // Vegallaskapcsolo-zarva /Magnes erzekelo/
const int ledPin = 13; // Allapotjelzo LED, folyamatosan vilagit muvelet kozben


// valtozni fognak:
int nyitoGomb = 0; // Valtozik a gomb allapota alapjan
int zaroGomb = 0; // Valtozik a gomb allapota alapjan
int vegallasNyitva = 0; // Valtozik a vegallaskapcsolo allapota alapjan
int vegallasZarva = 0; // Valtozik a vegallaskapcsolo allapota alapjan

void setup() {
// Ki-bemenetkent:
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(iranyPin1, OUTPUT);
pinMode(iranyPin2, OUTPUT);
pinMode(jelzoPin, OUTPUT);
pinMode(ACvPin, OUTPUT);
pinMode(resetPin, OUTPUT);
pinMode(vegallasPin1, INPUT);
pinMode(vegallasPin2, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ACvPin, LOW);
digitalWrite(iranyPin1, LOW);
digitalWrite(iranyPin2, LOW);
digitalWrite(jelzoPin, HIGH);
delay(2000);
digitalWrite(jelzoPin, LOW);
Serial.begin(9600);
}

void loop()
{
nyitoGomb = digitalRead(buttonPin1);
zaroGomb = digitalRead(buttonPin2);
vegallasNyitva = digitalRead(vegallasPin1);
vegallasZarva = digitalRead(vegallasPin2);
int lowlow = (nyitoGomb == LOW && zaroGomb == LOW) == true;

if (nyitoGomb == HIGH && zaroGomb == LOW && vegallasNyitva == LOW) // Nyitas

{
digitalWrite(jelzoPin, HIGH);
digitalWrite(ledPin, HIGH);
delay(250);
digitalWrite(iranyPin1, HIGH); //+
delay(250);
digitalWrite(iranyPin2, LOW); //-
delay(500);
digitalWrite(ACvPin, HIGH);
}

else if (nyitoGomb == HIGH && zaroGomb == LOW && vegallasNyitva == HIGH) // Nyitva

{
delay(196);
digitalWrite(jelzoPin, LOW);
digitalWrite(ACvPin, LOW);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
while(lowlow == false);
delay(200);
digitalWrite(resetPin, HIGH);
}

else if (nyitoGomb == LOW && zaroGomb == HIGH && vegallasZarva == LOW) // Zaras

{
digitalWrite(jelzoPin, HIGH);
digitalWrite(ledPin, HIGH);
delay(250);
digitalWrite(iranyPin1, LOW); //-
delay(250);
digitalWrite(iranyPin2, HIGH); //+
delay(500);
digitalWrite(ACvPin, HIGH);
}

else if (nyitoGomb == LOW && zaroGomb == HIGH && vegallasNyitva == HIGH) // Zarva

{
delay(374);
digitalWrite(jelzoPin, LOW);
digitalWrite(ACvPin, LOW);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
while(lowlow == false);
delay(200);
digitalWrite(resetPin, HIGH);
}

else if (nyitoGomb == LOW && zaroGomb == LOW) // Mind 2 gomb kikapcsolva a taviranyiton, alap statusz

{
do
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
while(lowlow == true);
}

else

{
digitalWrite(jelzoPin, LOW);
digitalWrite(ACvPin, LOW);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
while(lowlow == false);
delay(200);
digitalWrite(resetPin, HIGH);
}
}

[ Szerkesztve ]

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#337) happy555 válasza Pubszon (#336) üzenetére


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! :K

[ Szerkesztve ]

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#338) Pubszon válasza happy555 (#337) üzenetére


Pubszon
veterán

Jó reggelt!

Az int lowlow = (nyitoGomb == LOW && zaroGomb == LOW) == true;
sor korábban nem volt benne, csak az este írtam bele és a while(lowlow == false); és a while(lowlow == true); sorok helyett is a while(nyitoGomb == HIGH && zaroGomb == LOW) == true; sor volt, mondjuk szerintem ez sem jó, de a program hibát nem dobott rá.

Akkor például az utolsó ciklust te így csinálnád meg?

{
digitalWrite(jelzoPin, LOW);
digitalWrite(ACvPin, LOW);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
while(digitalRead(nyitoGomb)==LOW || digitalRead(zaroGomb)==LOW);
delay(200);
digitalWrite(resetPin, HIGH);
}

[ Szerkesztve ]

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#339) happy555 válasza Pubszon (#338) üzenetére


happy555
aktív tag

Ha az a cél hogy addig villogjon amíg valamelyik bemenet LOW, akkor igen.

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#340) Pubszon válasza happy555 (#339) üzenetére


Pubszon
veterán

A cél az, hogy addig villogjon (persze nem ilyen gyorsan) amíg mind a kettő LOW.
Így jó? while(digitalRead(nyitoGomb)==LOW && digitalRead(zaroGomb)==LOW);

De ha jól értem, akkor ez a || jel azt jelenti, hogy vagy az előtte vagy az utána lévő parancs teljesül akkor lép tovább?

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#341) happy555 válasza Pubszon (#340) üzenetére


happy555
aktív tag

II (or)

Nem, amíg bármelyik teljesül, addig marad a ciklusban!

Puskázz

[ Szerkesztve ]

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#342) Pubszon válasza happy555 (#339) üzenetére


Pubszon
veterán

A cél az, hogy addig villogjon (persze nem ilyen gyorsan) amíg mind a kettő LOW nem lesz.
De így sem jó... while(digitalRead(nyitoGomb)==LOW && digitalRead(zaroGomb)==LOW);
Mert így 4 variáció van
LOW HIGH
HIGH LOW
HIGH HIGH
LOW LOW

Azt kellene rögzíteni, hogy a LOW LOW állás true, minden más pedig false, és akkor azt megadni, hogy addig villogjon míg false, ha pedig true akkor lépjen tovább.

De ha jól értem, akkor ez a || jel azt jelenti, hogy vagy az előtte vagy az utána lévő parancs teljesül akkor lép tovább?

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#343) happy555 válasza Pubszon (#342) üzenetére


happy555
aktív tag

Akkor:
while(digitalRead(nyitoGomb)==HIGH || digitalRead(zaroGomb)==HIGH);

Addig érvényes míg valamelyik HIGH, vagyis ha mindkettő LOW, akkor kilép.... :K

[ Szerkesztve ]

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#344) Pubszon válasza happy555 (#343) üzenetére


Pubszon
veterán

Pont most agyaltam ezen, így tökéletes! :)

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#345) happy555


happy555
aktív tag

while(digitalRead(nyitoGomb) || digitalRead(zaroGomb));
Így is lehet írni, mert ha HIGH akkor igaznak minősül.

while(!digitalRead(nyitoGomb) || !digitalRead(zaroGomb));
Így meg negálva van, vagyis ha LOW akkor minősül igaznak.

(csak érdekesség)

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#346) Pubszon válasza happy555 (#345) üzenetére


Pubszon
veterán

Na, javítgattam, de míg nincs itt az arduino addig nem tudom tesztelni, ezért kérem véleményezd és mond mit a hiba. :)

const int buttonPin1 = 2; // Kapu nyitas gomb, a vevo egyik releje
const int buttonPin2 = 3; // Kapu zaras gomb, a vevo masik releje
const int iranyPin1 = 4; // Kapu nyitas-zaras, elso rele valtokapcsolo 1. rele
const int iranyPin2 = 5; // Kapu nyitas-zaras, masodik rele valtokapcsolo 2. rele
const int jelzoPin = 6; // Jelzofeny nyitas/zaras ideje alatt 3. rele
const int resetPin = 7; // Vevo reset hogy a relek NO-ba alljanak 4. rele
const int ACvPin = 8; // Motor 230V lekapcsolasa 5. kulonallo rele
const int vegallasPin1 = 9; // Vegallaskapcsolo-nyitva
const int vegallasPin2 = 10; // Vegallaskapcsolo-zarva /Magnes erzekelo/
const int ledPin = 13; // Allapotjelzo LED, folyamatosan vilagit muvelet kozben


// valtozni fognak:
int nyitoGomb = 0; // Valtozik a gomb allapota alapjan
int zaroGomb = 0; // Valtozik a gomb allapota alapjan
int vegallasNyitva = 0; // Valtozik a vegallaskapcsolo allapota alapjan
int vegallasZarva = 0; // Valtozik a vegallaskapcsolo allapota alapjan

void setup() {
// Ki-bemenetkent:
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(vegallasPin1, INPUT);
pinMode(vegallasPin2, INPUT);
pinMode(iranyPin1, OUTPUT);
pinMode(iranyPin2, OUTPUT);
pinMode(jelzoPin, OUTPUT);
pinMode(ACvPin, OUTPUT);
pinMode(resetPin, OUTPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(jelzoPin, HIGH);
delay(2000);
digitalWrite(jelzoPin, LOW);
Serial.begin(9600);
}

void loop()
{
nyitoGomb = digitalRead(buttonPin1);
zaroGomb = digitalRead(buttonPin2);
vegallasNyitva = digitalRead(vegallasPin1);
vegallasZarva = digitalRead(vegallasPin2);

if (digitalRead(nyitoGomb) == HIGH && digitalRead(zaroGomb) == LOW && digitalRead(vegallasNyitva) == LOW) // Nyitas

{
digitalWrite(jelzoPin, HIGH);
digitalWrite(ledPin, HIGH);
digitalWrite(iranyPin1, HIGH); //+
digitalWrite(iranyPin2, LOW); //-
delay(500);
digitalWrite(ACvPin, HIGH);
}

else if (digitalRead(nyitoGomb) == HIGH && digitalRead(zaroGomb) == LOW && digitalRead(vegallasNyitva) == HIGH) // Nyitva

{
delay(196);
digitalWrite(jelzoPin, LOW);
digitalWrite(ACvPin, LOW);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
while(digitalRead(nyitoGomb)==HIGH || digitalRead(zaroGomb)==HIGH);
delay(200);
digitalWrite(resetPin, HIGH);
}

else if (digitalRead(nyitoGomb) == LOW && digitalRead(zaroGomb) == HIGH && digitalRead(vegallasNyitva) == LOW) // Zaras

{
digitalWrite(jelzoPin, HIGH);
digitalWrite(ledPin, HIGH);
digitalWrite(iranyPin1, LOW); //+
digitalWrite(iranyPin2, HIGH); //-
delay(500);
digitalWrite(ACvPin, HIGH);
}

else if (digitalRead(nyitoGomb) == LOW && digitalRead(zaroGomb) == HIGH && digitalRead(vegallasNyitva) == HIGH) // Zarva

{
delay(374);
digitalWrite(jelzoPin, LOW);
digitalWrite(ACvPin, LOW);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
while(digitalRead(nyitoGomb)==HIGH || digitalRead(zaroGomb)==HIGH);
delay(200);
digitalWrite(resetPin, HIGH);
}

else if (digitalRead(nyitoGomb) == LOW && digitalRead(zaroGomb) == LOW) // Mind 2 gomb kikapcsolva a taviranyiton, alap statusz

{
digitalWrite(iranyPin1, LOW);
digitalWrite(iranyPin2, LOW);
digitalWrite(ACvPin, LOW);
digitalWrite(jelzoPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
while(digitalRead(nyitoGomb)==LOW && digitalRead(zaroGomb)==LOW);
}

else

{
digitalWrite(jelzoPin, LOW);
digitalWrite(ACvPin, LOW);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
while(digitalRead(nyitoGomb)==HIGH || digitalRead(zaroGomb)==HIGH);
delay(200);
digitalWrite(resetPin, HIGH);
}
}

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#347) happy555 válasza Pubszon (#346) üzenetére


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.

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#348) Pubszon válasza happy555 (#347) üzenetére


Pubszon
veterán

Így van, én se akarom így hagyni végleg, rendeltem is RF vevőt, azzal lehet majd jó megcsinálni.
1 relével fog kevesebb kelleni, mert 2 kell váltókapcsolónak, egy a 230-at meg egy a jelző villogót kapcsolja.
De attól független, ez így nem egészséges. :(

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

(#349) happy555 válasza Pubszon (#348) üzenetére


happy555
aktív tag

A relé modul amit linkeltél az 1x záró 1x bontó érintkezős, vagyis tudsz vele váltani a két irány közt.
Egy másikkal kapcsolnám erre a relére a 220-at, kis késleltetéssel.
Villogó 220-as??
Ha nem, akkor pl. MOSFET, TRANYÓ, ...

Nem vagyok babonás, mert az szerencsétlenséget hoz!

(#350) Pubszon válasza happy555 (#349) üzenetére


Pubszon
veterán

A 4-es relé modulból használnék 2-t irányváltásra, egyet a villogónak ami 12V-ról megy és egyet a 230V lekapcsolására.
Nekem így egyszerű, nem akarom megbonyolítani tranyóval meg ilyesmivel.

Ez nem nagyon tiszta:
A relé modul amit linkeltél az 1x záró 1x bontó érintkezős, vagyis tudsz vele váltani a két irány közt.
Az irányváltáshoz nem kell legalább 2 relé?

ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...

Copyright © 2000-2024 PROHARDVER Informatikai Kft.