- eBay segítség kezdőknek
- sziku69: Fűzzük össze a szavakat :)
- moha bácsi: VIII. Viharsarki Hobbi Elektronika Találkozó Békéscsaba 2025.06.14. szombat
- sziku69: Szólánc.
- Elektromos rásegítésű kerékpárok
- Parci: Milyen mosógépet vegyek?
- Luck Dragon: Asszociációs játék. :)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- gban: Ingyen kellene, de tegnapra
- bambano: Bambanő háza tája
-
LOGOUT
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
-
g0dl
addikt
A dccduino uno klónhoz drivert merre lehet találni?
-
happy555
aktív tag
-
Pubszon
veterán
Meg van a 4 gomb 6 számjegyű kódja.
Egyelőre 2 gombot akarok használni, ami lényegében ugyan azt a funkciót töltené be, mint 2 pillanatkapcsoló.
Az egyik kód lenne a nyitoGomb a másik pedig a zaroGomb.Hogy tudom megoldani?
-
Pubszon
veterán
válasz
happy555 #394 üzenetére
Igen, ennek minden gombját szépen mutatta a serial monitor.
Sőt, még ennek a központi zár távirányítónak a jelét is fogta, de lehet ez ugrókódos. -
Pubszon
veterán
Igen, de ahhoz van 2db 315MHz-es távirányítóm is, az jó lesz máshova, viszont van az arduinohoz 433MHz-es receiver 2db meg 2 transmitter is. Ahhoz lenne ez a távirányító.
Remélem jó lesz hozzá, mivel ez 4 gombos, így egyéb funkciókat is tudok beprogramozni a nyitás/záráson kívül (elektromos kapunyitó). -
Pubszon
veterán
Jah, azt hittem valami komoly ok miatt, de kidobni nem fogom.
Rendeltem egy ilyet, remélem jó lesz.
Szerinted? -
Pubszon
veterán
válasz
happy555 #383 üzenetére
Akkor átállok 433-ra, ahhoz 4 gombos távirányító is van 5-600Ft-ért, amivel ahogy korábban mondtad egyéb funkciók is megoldhatóak.
Gyakorolni meg van mivel addig helyette.Direkt vártam pár percet szerkesztési időben, hogy hátha látjátok, de akkor nem mondtam újat.
Az én kocsim távja jelét nem fogja, de a faterét igen, ami utólag lett beszerelve.
Nem tudom hogy ugró kódos e.(#385) tvamos: Nem fogom, de miért nem ajánlott?
-
Danex
addikt
válasz
happy555 #369 üzenetére
RemoteSwitch lenne az
#include <RemoteReceiver.h>
void setup() {
Serial.begin(115200);
RemoteReceiver::init(0, 3, showCode);
}
void loop() {
}
void showCode(unsigned long receivedCode, unsigned int period) {
Serial.print("Code: ");
Serial.print(receivedCode);
Serial.print(", period duration: ");
Serial.print(period);
Serial.println("us.");
}A kódja is egyszerű, nekem az RCSwitch nem tudta érzékelni a jeleket, illetve volt, hogy néha egy véletlenszerű kódot lökött a Monitorra, de nem jártam vele sikerrel.
(#370) Pubszon
Most látom, hogy nem sikerült neked se, a library tartalmazza az alap programot ott leírás is található, hogy hova kell kötni az érzékelőt. -
Pubszon
veterán
válasz
happy555 #363 üzenetére
Most én is módosítottam, nyitás vagy záráskor bármely gombot ha megnyomom akkor megáll, vár 1000ms-ot és csak utána lehet adni neki a következő parancsot.
A végálláskapcsolókat is módosítottam, folyamatosan HIGH állapotba vannak, mikor benyomódnak akkor lépnek LOW-ba. Ezt a biztonságért, hogy ha szakadás van, inkább ne induljon el, minthogy valami leégjen.Viszont megjött az RF vevő amit a fórumtárs küldött, ráadásul 2 vevő és 2 transzmitter!
Ezennel is köszönöm, amint tudom meghálálom.Na de egyelőre csak a vevőt használnám, ahhoz hol találom meg a megfelelő könyvtárat és leírást?
2 gombos távirányítót használnék. -
Pubszon
veterán
válasz
happy555 #361 üzenetére
Rosszul fejeztem ki magam, de így biztosan fogod érteni.
Viszont jól átalakítottam a kódot és most pillanatkapcsolóval menne, amivel még egyszerűbb az egész.
Most úgy van, hogy pl nyitás közben ha megnyomom a zárás gombot, akkor csak megáll, ha pedig megint megnyomom, akkor meg bezár, és ez fordítva is igaz. Ez jelenleg csak pillanatkapcsolóval működik, de ez a resetelős megoldás amúgy sem jó.kagzer fórumtárs küldött tegnap egy RF vevőt, remélem holnap megkapom és akkor lesz az igazi!
-
Pubszon
veterán
válasz
happy555 #359 üzenetére
Ez is jó, bele is tettem a programba, ami most tökéletesen működik.
Viszont azt már most látom, hogy nem lesz könnyű megcsinálni az RF vevővel ha meg jön.
Most azzal kísérletezgetek, hogy hogy kell egy pillanatkapcsolóból billenőkapcsolót csinálni.
Itt van hozzá egy kód, ami működik is ahogy kell, de már ez is elég bonyolult, főleg hogy még rakjam is bele a kapunyitó programba, meg még az RF vevőt is bele kell.Jó lenne, ha ezek meglennének könyvtárként.
-
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. -
g0dl
addikt
Ezzel a modellező eszközzel kapcsolatban van valakinek tapasztalata? Mennyire korlátozott az ingyenes változat.
-
Pubszon
veterán
Na és össze van állítva próbára, működik ahogy elgondoltam!
Itt a kód, tippeket várok.
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);
}
void loop()
{
nyitoGomb = digitalRead(buttonPin1);
zaroGomb = digitalRead(buttonPin2);
vegallasNyitva = digitalRead(vegallasPin1);
vegallasZarva = digitalRead(vegallasPin2);
digitalRead(buttonPin1);
digitalRead(buttonPin2);
digitalRead(vegallasPin1);
digitalRead(vegallasPin2);
if ((nyitoGomb == HIGH) && (zaroGomb == LOW) && (vegallasNyitva == LOW)) // Nyitas
{
digitalWrite(jelzoPin, LOW);
digitalWrite(ledPin, HIGH);
digitalWrite(iranyPin1, HIGH); //+
digitalWrite(iranyPin2, LOW); //-
delay(300);
digitalWrite(ACvPin, LOW);
}
else if ((nyitoGomb == HIGH) && (zaroGomb == LOW) && (vegallasNyitva == HIGH)) // Nyitva
{
delay(11); //Ha kinyilik, mennyit toljon meg, hogy feszes legyen
digitalWrite(jelzoPin, HIGH);
digitalWrite(ACvPin, HIGH);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
digitalRead(nyitoGomb);
digitalRead(zaroGomb);
break;
}
while((nyitoGomb==HIGH) || (zaroGomb==HIGH));
delay(400);
digitalWrite(resetPin, LOW);
}
else if ((nyitoGomb == LOW) && (zaroGomb == HIGH) && (vegallasZarva == LOW)) // Zaras
{
digitalWrite(jelzoPin, LOW);
digitalWrite(ledPin, HIGH);
digitalWrite(iranyPin1, LOW); //+
digitalWrite(iranyPin2, HIGH); //-
delay(300);
digitalWrite(ACvPin, LOW);
}
else if ((nyitoGomb == LOW) && (zaroGomb == HIGH) && (vegallasZarva == HIGH)) // Zarva
{
delay(11); //Ha bezarul, mennyit toljon meg, hogy feszes legyen
digitalWrite(jelzoPin, HIGH);
digitalWrite(ACvPin, HIGH);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
digitalRead(nyitoGomb);
digitalRead(zaroGomb);
break;
}
while((nyitoGomb==HIGH) || (zaroGomb==HIGH));
delay(400);
digitalWrite(resetPin, LOW);
}
else if ((nyitoGomb == LOW) && (zaroGomb == LOW)) // Mind 2 gomb kikapcsolva a taviranyiton, alap statusz
{
digitalWrite(iranyPin1, HIGH);
digitalWrite(iranyPin2, HIGH);
digitalWrite(ACvPin, HIGH);
digitalWrite(jelzoPin, HIGH);
digitalWrite(resetPin, HIGH);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
digitalRead(nyitoGomb);
digitalRead(zaroGomb);
break;
}
while((nyitoGomb==LOW) && (zaroGomb==LOW));
}
else
{
digitalWrite(iranyPin1, HIGH);
digitalWrite(iranyPin2, HIGH);
digitalWrite(jelzoPin, HIGH);
digitalWrite(ACvPin, HIGH);
digitalWrite(resetPin, LOW);
do
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
digitalRead(nyitoGomb);
digitalRead(zaroGomb);
break;
}
while((nyitoGomb==LOW) && (zaroGomb==LOW));
delay(200);
digitalWrite(resetPin, HIGH);
}
} -
Pubszon
veterán
válasz
happy555 #349 üzenetére
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é? -
-
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. -
Pubszon
veterán
válasz
happy555 #345 üzenetére
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);
}
} -
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)
-
Pubszon
veterán
válasz
happy555 #339 üzenetére
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 LOWAzt 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?
-
Pubszon
veterán
válasz
happy555 #339 üzenetére
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?
-
Pubszon
veterán
válasz
happy555 #337 üzenetére
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);
} -
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!
-
Pubszon
veterán
válasz
happy555 #335 üzenetére
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./*
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);
}
} -
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
-
Pubszon
veterán
válasz
happy555 #331 üzenetére
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.É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.
Ez meg még bonyolult. -
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
-
Pubszon
veterán
válasz
happy555 #329 üzenetére
Á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.
-
Pubszon
veterán
Köszi, meg is rendeltem.
(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.
Köszi. -
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.
-
Pubszon
veterán
válasz
happy555 #322 üzenetére
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á? -
-
Danex
addikt
válasz
happy555 #320 üzenetére
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.
) és ehhez még reluxa vezérlés servo motorral.
-
Danex
addikt
válasz
happy555 #314 üzenetére
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.
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.
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ő)
-
Pubszon
veterán
válasz
happy555 #311 üzenetére
A mostani postás a nyugdíjat hozta, én meg elé mentem, mondom nem e hozott valamit és ez volt nála.
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. -
happy555
aktív tag
válasz
spidersoft #305 üzenetére
Úgy emlékszem ~1ms/karakter alapjáraton a sebessége I2C-n.
-
spidersoft
senior tag
-
happy555
aktív tag
válasz
spidersoft #303 üzenetére
Úgy tudom, I2C sebessége állítható.
-
spidersoft
senior tag
válasz
spidersoft #302 üzenetére
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...
-
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?
Új hozzászólás Aktív témák
Hirdetés
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest