-
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
-
gyapo11
őstag
válasz
leventekov #5205 üzenetére
Pedig már háromféle megoldást kaptál:
- A kódod végére a gomb leolvasása, ezt ki kell egészíteni az ifekben a gombnyomást jelző változóval. Ha a gomb hatása fennáll (akár be- akár kikapcsolással), akkor az if nem akciózik.
- állapotgép. Az if nem kapcsolgat, csak egy változót állít, a gombfigyelő kódrészlet is, és a végére egy az állapotgép állapotától függő kapcsolás vagy be vagy ki.
- két üzemmód pár bejegyzéssel előbb. Ha nyomtál gombot, akkor az ifek nem működnek, tehát nem kapcsolják el a kívánt állapottól, ha másodszor is nyomtál gombot, akkor visszaállt a normál időzítéses állapot, és az ifek kapcsolgatnak. -
Pubszon
veterán
válasz
leventekov #5214 üzenetére
tudom valtani az Arduinot auto meg manual modra?
A privát üzenetedre válaszolva, igen, egy 5. gombbal tudsz váltani auto és manuál között.
Mégpedig csinálsz egy boolean változót, mondjuk automode néven.
Ennek az állapotát változtatod a 5. gombbal igaz és hamis közt, a korábban linkelt kóddal, amivel egy nyomógomb kapcsolóként működik. De akár kapcsolót is használhatsz erre.Ha igaz, akkor az autó mód fut le:
if (automode)
és ide jön a kódod amivel megadott időkben kapcsolnak ki beHa hamis, akkor a kézi mód.
if (!automode)
ide pedig a 4 gombbal való kapcsolásÉs egy LED-et használhatsz arra, hogy látsd, mely módban van éppen.
digitalWrite(módjelzőled, automode);
-
válasz
leventekov #5211 üzenetére
Mit szeretnél a gombbal pontosan csinálni?
1. Ha (időzítés miatt) éppen bekapcsolt állapotban van, akkor kikapcsolni, és fordítva?
2. Vagy csak bekapcsolni? Ez esetben a bekapcsoló gombnak prioritása van az időzítés felett? -
Pubszon
veterán
válasz
leventekov #5211 üzenetére
Manual mikor te kapcsolod gombokkal, az automata meg mikor időre kapcsol.
Meg lehet oldani ahogy te gondolod, de hogy nincs előttem, nem tudom kipróbálni, csak fejben nehéz.Attól hogy kapcsolót tettél be nyomó gomb helyett, szerintem nem oldottad meg azt, hogy kézzel és automatán is működik a KI-, BE kapcsolás.
-
Pubszon
veterán
válasz
leventekov #5206 üzenetére
Van egy auto meg manual módod.
A legjobban úgy lehetne megcsinálni, ha raknál be még egy gombot és azzal váltanál e két mód között.
Akár egy LED-et is beköthetnél hogy ha autó módban van akkor világítana. -
Janos250
őstag
válasz
leventekov #5192 üzenetére
if ( toggle(i) ) {
világítson
}
else
{
óra szerinti vezérlés
}???
-
gyapo11
őstag
válasz
leventekov #5192 üzenetére
A loopban vannak az ifek, ezek kapcsolják LOW-ba vagy HIGH-ba a kimenetet. Ezután a nyomógomb hiába állítja ellenkezőre, 0.1 msec múlva megint lefut a loop, és az if megint visszaállítja, tehát a nyomógomb mintha nem is lenne.
Logikailag nem jó. Kellene egy folyamatábra, és utána azt átültetni az arduino nyelvére.
Valami olyasmi kell, ami volt is egy hozzászólásban, hogy a nyomógomb megnyomása egy változót is módosít, és ezt a változót is figyelembe veszi az if. -
tvamos
nagyúr
válasz
leventekov #5192 üzenetére
Ilyen hosszu kodot lehet, hogy jobb lenne, ha mondjuk a pastebinre tennel fol, es itt csak linket osztanal meg.
Amugy lehet, akkor mukodne, ha az oraval nem statikusan kapcsolnad be, meg ki, hanem csak akkor, amikor az allapota valtozik az oranak, akkor valtoztatnad a kimeneti statuszt.
-
Pubszon
veterán
válasz
leventekov #5192 üzenetére
Kód beillesztésekor használd a Programkód gombot, mert így nagyon kusza az egész.
Meg még hagyd ki belőle a kijelzőt meg mindent, előbb csak a gomb meg időzítés működjön. -
Pubszon
veterán
válasz
leventekov #5190 üzenetére
A kód működik, ahogy kell, még a prell ellen is van benne megoldás.
A fenti kódból át kell alakítani így:void loop()
{
for (byte i = 0; i < kapcsolok; i++)
{
button[i] = digitalRead(pushbutton[i]);
if ((button[i] == HIGH) && (toggle[i]))
{
toggle[i] = false;
ledstate[i] = !ledstate[i];
prelltime[i] = millis() + prell;
}
digitalWrite(led[i], ledstate[i]);
if ((button[i] == LOW) && (!toggle[i]) && (millis() > prelltime[i]))
{
toggle[i] = true;
}
}
}Ez elé kell berakni azt, hogy ha az idő elérte a beállított időpontot, akkor a ledstate = false; vagy épp true.
Az i helyére 1, 2, 3 vagy 4-et kell írni ide, mivel ez nem for ciklusban lesz.
És kell még bele egy vátozó, hogy ha eléri az időpontot, akkor csak egyszer fusson le megváltoztatva a ledstate-et, mert ha nem, akkor folyamatosan ez lesz érvénybe, így nem tudod kapcsolni gombbal, mint jelenleg is! -
Pubszon
veterán
válasz
leventekov #5187 üzenetére
Van egy kódom, átírtam 4 kapcsolósra.
Ezzel 4 kimenetet (LED) tudsz kapcsolgatni 4 gombbal.
Már csak ehhez kellene hozzárakni az időkapcsolást.const byte kapcsolok = 4;
const int prell = 1000;
const byte pushbutton[kapcsolok] = {8, 9, 10, 11};
const byte led[kapcsolok] = {2, 3, 4, 5};
boolean toggle[kapcsolok];
boolean button[kapcsolok];
boolean ledstate[kapcsolok];
unsigned long prelltime[kapcsolok];
void setup()
{
for (byte i = 0; i < kapcsolok; i++)
{
pinMode(pushbutton[i], INPUT_PULLUP);
pinMode(led[i], OUTPUT);
digitalWrite(led[i], HIGH);
}
}
void loop()
{
for (byte i = 0; i < kapcsolok; i++)
{
button[i] = digitalRead(pushbutton[i]);
if ((button[i] == HIGH) && (toggle[i]))
{
toggle[i] = false;
ledstate[i] = !ledstate[i];
digitalWrite(led[i], ledstate[i]);
prelltime[i] = millis() + prell;
}
if ((button[i] == LOW) && (!toggle[i]) && (millis() > prelltime[i]))
{
toggle[i] = true;
}
}
} -
Pubszon
veterán
válasz
leventekov #5178 üzenetére
Értem.
Tehát a nyomógombot szeretnéd billenőkapcsolóként használni ha jól értem, igaz?
Tehát minden megnyomáskor megváltozik a lámpa állapota és ha eléri az idő a beállított időpontot akkor kapcsoljon be, egy másik időpontban pedig le?
Erősíts meg, hogy így van. -
Janos250
őstag
válasz
leventekov #5180 üzenetére
Na, ez nem sikerült.
Vagy töltsd fel valahova a képet és a linket írd be ide a "Kattintható kódok és arcocskák" részben a "Link" gombbal, vagy alatta a "Feltöltendő képek", fájlok kiválasztása, feltöltés, stb. -
Janos250
őstag
válasz
leventekov #5181 üzenetére
Kösz! Holnap veszek ragasztót
-
Janos250
őstag
válasz
leventekov #5178 üzenetére
Nekem még mindig nem tiszta:
Mikor akarod kapcsolóval kapcsolni?
Amikor az óra miatt ki van kapcsolva, akkor akarod, hogy kézzel is lehessen be (és majd ki) kapcsolni?
És mit csináljon, ha egyébként is be van kapcsolva, és akkor nyomod meg a gombot? Vagy akkor nem nyomogatod úgyse, tehát mindegy? -
Janos250
őstag
válasz
leventekov #5177 üzenetére
És vajon a fehér?
Azt nem tudja valaki? -
Pubszon
veterán
válasz
leventekov #5159 üzenetére
Szia.
Segítek szívesen, kezdjük elölről. -
gyapo11
őstag
válasz
leventekov #5168 üzenetére
Akor nyilván te nem vagy a magcsináltatni akarók táborában.
Az is teljesen igaz, hogy a netről összeollózott kódhalmokat se szívesen nézi itt senki, legalábbis úgy látom. Sokkal jobb, ha valaki érti, hogy mit csinál. Sokkal előbb lesz válasz a "mi a fene az a digitalwrite" kérdésre, mint arra, hogy "itt van 200 sor program, mi a rossz benne".
Tehát az nem baj, ha valaki keveset tud, az a baj, ha nem is akar. Ha csak az eredményt akarja, és akár pénzért, akár ingyen, csak oldja meg valaki helyette. -
válasz
leventekov #5168 üzenetére
Az volt a gond a hozzászólásoddal, hogy nem volt kérdés benne, amire tudtunk volna válaszolni.
A világ minden fórumán érvényes íratlan szabályok:
1. először olvasok, hátha a topikban már volt szó a problémáról
2. használom a topik keresőjét (1 perc keresés után a 1031-es hsz-ben komplett kódrészlet a gombnyomásra), és guglizok
3. ha eddig nem találtam megoldást, leírom a problémát, amilyen részletesen lehet (pl jelen esetben beilleszted a kódodat, lehetőleg egy pastebin.com vagy hasonló link formájában)
4. leírom, hogy eddig mit tettem a megoldás érdekében
5. és csak ezután kérdezek. -
Tankblock
aktív tag
válasz
leventekov #5168 üzenetére
Hello,
Javaslom elöször a tutorialok böngészését, a HW es megoldások tanulmányozását, mert a mostani módszereddel sok lesz a csalódás. Ha majd érted az alapokat, akkor minden feladat könnyebb lesz. Csak jótanács.
Tervezd meg, nézz utána és válasz a helyzet nek megfelelő megoldást.
-
zka67
őstag
válasz
leventekov #5124 üzenetére
Szia, először is, ez azért fórum, hogy itt tedd fel a kérdéseidet (látom most már megtetted), és ne privátba akard megbeszélni a dolgokat. A fórum azért van, hogy a kérdésedet több ember is lássa, a megoldásokból pedig mindenki tudjon tanulni.
A kérésed az álláshirdetés rovatba való, hiszen te azt kéred, hogy valaki csináljon meg neked egy munkát. Ha egy kicsit is olvasgatod majd ezt a fórumot (látom újonc vagy még), látni fogod, hogy ahhoz hogy segítséget kapj, azért neked is tenned kell valamit, legalább elkezdhetnéd a programodat, és ha elakadsz, akkor jöhet a kérés.
Van programkód gomb, azzal rövidebb kódrészeket beilleszthetsz ide is, de teljes programokat légyszi ne tegyél fel ide, mert úgysem fog senki neked átnézni több száz sort.
Üdv.
Zoli -
zka67
őstag
válasz
leventekov #5100 üzenetére
Szia, van programkód gomb is
A hour*360 + helyett szerintem jobb lesz a 3600-zal próbálkoznod.
Új hozzászólás Aktív témák
Hirdetés
- HP EliteBook x360 830 G8 Core i5 1145G7 2.6GHz/16GB RAM/512GB
- 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
- Update 06.16. Bomba árak 2025-ben is! Üzleti - Consumer laptopok DELL FUJITSU HP LENOVO
- Samsung Galaxy S25 Ultra 1TB, Kártyafüggetlen, 1 Év Garanciával
- Honor Pad X8a 64GB Wifi,1 év Garancia
- BESZÁMÍTÁS! Gigabyte B760M i5 14600KF 64GB DDR4 512GB SSD RTX 3080 10GB Corsair 4000D Airflow 1000W
- DDR5 8/ 16/ 32GB 4800-5600MHz SODIMM laptop RAM, több db- számla, garancia
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged