- Hamarosan megkezdődik a nubia 2,8K-s táblagépének szállítása
- Barátokká váltak az eddig rivális AI-óriások
- ASUS blog: Ideális olcsó utazós gép lett az új Vivobook S14
- Az Aura Displays hordozható monitorhármasa jól felturbózhatja a produktivitást
- Dual Mode-os IPS monitorral adott magáról életjelet a Gigabyte
- Apple MacBook
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- ASUS blog: Ideális olcsó utazós gép lett az új Vivobook S14
- Milyen széket vegyek?
- Egérpad topik
- Teljesen az AI-ra fókuszál az új AMD Instinct sorozat
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Fejhallgató erősítő és DAC topik
- AMD GPU-k jövője - amit tudni vélünk
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
-
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
-
Gergosz2
veterán
ez nekem is szemet szúrt. Nem vagyok akvárium szakértő, sosem volt és szerintem nem is lesz nekem egy se, de gyanítom, hogy nem így szokták ezeket hűteni. Gondolom itt is keringető szivattyúkat használnak (ebayen pár dolláros tartományban ezerszámra van) , de mondom még egyszer, nem vagyok ebben járatos.
-
Gergosz2
veterán
válasz
gyapo11 #1291 üzenetére
na azért.
pulse width modulation, gépes terülten ISZM.(Páran gondolom találkoztak így is vele ) Nem feltétlenül állandó a freki, sőt nem egyszer kell változó frekvenciájút használni, vagy éppen korrigálni rajta, mert egyszerűen megmurdel egy két elem.
De én nem nagyon szórakoznék ennél a megvalósításnál, vennék valami TO220 tokozású FET-et vagy BJT-t azzal nem nyúl mellé, utána meg simán analogWrite()-tal mehet is PWM.
-
Gergosz2
veterán
Én 1602-ből I2C csatolós verziót használok. Nem árt ha spórol pár lábat az ember.
Én csináltam hasonlót , egy DHT11 -re épülő szellőztetőt.
A ventilátornak 26 fokon bekapcsólni és lekapcsólni.
Ezt szerintem inkább felejts el. Ezzel eléggé mellé lehet lőni mivel simán előfordulhat az, hogy össze vissza kapcsolgat be a ventit másodpercenként mert épp 26 fokon táncol a hőmérőd. Persze atom stabil 26 fokot is belehet lőni de azzal sokkal többet kell dolgozni. Én egy hiszterézises szabályozót javaslok úgy, hogy pl 26 foknál kapcsoljon be a ventid , vigye le 24 fokra-ra utána meg kapcsoljon ki.
(#1290) gyapo11
megadott feszültségtartományon belül tartja az áramerősséget, ez az áramgenerátor feladata,
-
gyapo11
őstag
válasz
softguner #1287 üzenetére
a PWM frekvencia csökkentésével állítod a fényerősséget
Ezt hogy érted? A pwm pulse wide modulation, tehát csak a szélességét modulálja, a frekvencia állandó. Ha a frekvenciát csökkented, de a pulzus szélessége és ezzel a kitöltési tényező marad, akkor nem változik a fényerő.
-
gyapo11
őstag
válasz
lajbi30 #1288 üzenetére
Áramgenerátornál nem a feszültséget kell szabályozni, mert egy megadott feszültségtartományon belül tartja az áramerősséget, ez az áramgenerátor feladata, és a fényerő nem változik. Inkább pwm-mel kell kapcsolgatni, és a kitöltési tényezőtől függően változik a fényerősség. Aztán hogy az áramgenerátor bírja-e azt a frekvenciát, amivel a pwm kapcsolgat, az más kérdés.
-
gyapo11
őstag
válasz
lajbi30 #1286 üzenetére
Akkor a gombok prellmentesítésére kell figyelni, nemrégen volt szó róla éppen, hogy ismételnek a gombok és software-ben is ügyeskedni kell. Lcd-t még nem használtam. Ledek, fénycsövek időben ki-bekapcsolása, dimmelése nem látszik nehéznek. Szerintem meg tudnánk írni közösen itt a fórumon, de idő kell hozzá az biztos.
-
lajbi30
csendes tag
válasz
softguner #1287 üzenetére
Akváriumhoz a leggagyibb a led szalag. 1w-os power ledekről van szó áramgenerátorral. Elvileg a feszültséget
kell csak szabályozni ahoz,hogy a fényerőt csökkentsük vagy növeljük. De ezt autómatikusan kéne,hogy csinálja. RTC-m is van. A távirányitás felesleges,ha automatán csinál mindent. A ventilátornak 26 fokon bekapcsólni és lekapcsólni. -
softguner
csendes tag
válasz
lajbi30 #1286 üzenetére
Csináltam már másnak ezt azt, de soha sem pénzért. Amit csinálok azért csinálom, mert van rá fölösleges időm, ezért írtam azt hogy ha van pontos leírásod, hogy mit szeretnél, akkor ha 1 hétvégébe belefér akkor szívesen megcsinálom, mert most van 1 szabad hétvégém. Akváriumhoz egyébként a legolcsóbb a vízálló ledszalag. 1 FET tranyóval a PWM frekvencia csökkentésével állítod a fényerősséget és pont. Egyébként meg a Ventillátort is csak pwm-el állítod és kész. A gombozással meg nekem 1 problémám van, hogy túl kényelmes vagyok, minek felállni ha van távirányító? Plusz ide kellene még egy RTC is a valós időhöz. Amit viszont nem szeretek az a dobozolás, nekem több idő dobozba rakni valamit, mint kitalálni és letesztelni rá a programot.
Egyik barátom szülinapjára csináltam, egy olyan rádiós mp3 lejátszót aminek a kijelzője egy Nokia5110-es volt, és sokkal drágábbra jött ki, mint ha vettem volna egyet, és lehet hogy egyedi, de drágább volt, ezen azért el kell gondolkozni.
Most láttam a képen, hogy ott van az RTC is. Ehhez megvan mindened, bár én a reléket nem erőltetném, meg a fénycsöveket sem.
-
gyapo11
őstag
válasz
lajbi30 #1283 üzenetére
Az akváriumot már írtad korábban.
Szóval van egy hőmérséklet szenzor, ennek adatai alapján kell egy ventilátort kapcsolgatni.
Ledeket pwm-mel szabályozva a fényerőt, fényszenzor is kell az automatikus szabályzáshoz.
A T5 nem tudom mi.
Lcd-ről vezérelve az érintős lcd-t jelent, és onnan kell leolvasni a parancsokat, beállítandó értékeket? Vagy lcn-n menü, és nyomógombokkal navigálni? -
lajbi30
csendes tag
válasz
gyapo11 #1280 üzenetére
Én sem dolgozok ingyen. Más ha csak el kell magyarázni egy 1-2 apróságot. Azért én sem kérek pénzt. De nekem kell megcsinálni mindent,akkor azért pénzt kérek. Ezért nem várom el ingyen én sem. Van 1-2 dolog amit 3nap után sikerült megcsinálnom,de nem tudom összekombinálni azt pár valamit amire nekem szükségem lenne.
-
gyapo11
őstag
válasz
lajbi30 #1278 üzenetére
Nincs azzal semmi baj, ha neked megéri az árát. Inkább arra próbáltam utalni, hogy itt nem biztos hogy vannak vállalkozási alapon működő arduino programozók. Inkább amatőrök, akik kedvtelésből valamilyen szinten megismerték a kütyüt. És ha a pénz bejön a képletbe, az már más, mint pl. a tükörfóliás óra, ahol sokan bedobnak ötleteket, javaslatokat, van ami bejön, van ami nem. Megszoktuk, hogy a pénzért elvárható a szolgáltatás, és nem tenne jót a fórumnak, ha emberek között megromlana a viszony, mert nem ezt akartam, de nem mondtad el jól stb.
-
lajbi30
csendes tag
válasz
gyapo11 #1277 üzenetére
Írogathatnék,hogy S.O.S. valaki. De az sok idő lenne,mire így összeállna a terv. Egyszerübb valakinek fizetni érte. Végig olvastam majdnem az egész fórumot és bizony vannak itt nagy fejek akiknek gyerekjáték lenne megcsinálni azt amit én szeretnék. Nem is a kapcsolásokkal van a baj,hanem a programmal. Érdekel a dolog,de nagyom mélyre kellene visszamennem,amire nincs időm,sem energiám.SAJNOS!
-
gyapo11
őstag
válasz
softguner #1276 üzenetére
Fizetős munkánál egy dolog, hogy meg kell csinálni, és sikerül-e megfelelő pénzt kapni érte. De ott azért elvárt, hogy az tényleg úgy is működjön, ahogy a specifikáció leírta, és ha nem, akkor addig kell javítgatni, amíg jó nem lesz. Ezzel aztán mélyen a nem érte meg kategóriába csúszhat a project.
Másrészt sokszor a megrendelő később jön rá, hogy még ez is meg az is kellene bele. Nem kötelező megcsinálni, de nem lesz jó a szájíz ha nem, másnak meg már nehézkes a kódba belenyúlni, sok időt igényel, ezért drága. -
-
lajbi30
csendes tag
válasz
dave0825 #1262 üzenetére
//Sample using LiquidCrystal library
#include <LiquidCrystal.h>/*******************************************************
This program will test the LCD panel and the buttons of
the DFRobot LCD Keypad Shield for Arduino
Product code : RB-Dfr-07
http://www.robotshop.com/dfrobot-lcd-keypad-shield-arduino-1.htmlNote cct error identified by Arduino forum discussion at:
http://arduino.cc/forum/index.php/topic,96747.0.html
which advises insertion of a Germanium 1n34a or a Schotky 1N5819
diode between pin 10 and the base of Q1 (K to pin 10).sample code originally by Mark Bramwell, July 2010
modifications by Dion Weston, March 2012********************************************************/
// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);// define some values used by the panel and buttons
int backLight = 10; // LCD Panel Backlight LED connected to digital pin 10
int lightLevel = 255; // Initialise light full on
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
// my [Mark Bramwell's] buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
return btnNONE; // when all others fail, return this...
}void setup()
{
lcd.begin(16, 2); // start the LCD library
lcd.setCursor(0,0); // move cursor to beginning of line "0"
lcd.print("Backlight adjust"); // print a simple message}
void loop()
{
analogWrite(backLight, lightLevel);
lcd.setCursor(13,1); // move to position 13 on the second line
lcd.print(lightLevel);lcd.setCursor(0,1); // move to the begining of the second line
lcd_key = read_LCD_buttons(); // read the buttonsswitch (lcd_key) // depending on which button was pushed, we perform an action
{
case btnRIGHT:
{
lcd.print("LED On ");
lightLevel = 255;
break;
}
case btnLEFT:
{
lcd.print("LED Off ");
lightLevel = 1;
break;
}
case btnUP:
{
lcd.print("LED Fade Up ");
if (lightLevel < 255) lightLevel += 1;
break;
}
case btnDOWN:
{
lcd.print("LED Fade Down ");
if (lightLevel > 1) lightLevel -= 1;
break;
}
case btnSELECT:
{
lcd.print("Select ");
break;
}
case btnNONE:
{
lcd.print(" ");
break;
}
}}
Kilyelző fényerejének változtatása
-
lajbi30
csendes tag
Egy Arduino szakértöt keresek,aki honorárium ellenében,megírna egy programot.
-
dave0825
őstag
Csak megírtad.
Van még hova fejlődnöm.
Hát köszönöm, később megnézem gépen, mit tud.
Viszont az előbb kíváncsiságból megnéztrm, hogy megy-e külső tápról, és valami gebasz van: rendesen írja au időt, viszont a távirányítót hiába nyomkodom, nem csinál semmit az egész. Bedugtam gépbe usb-vel, megy rendesen irányítóval is.Hiába töltöttem rá újra a programot, semmi. Külső tápról valahogy nem megy a távirányító. Na ez mitől lehet?
-
zka67
őstag
válasz
dave0825 #1267 üzenetére
Szia, parancsolj:
const unsigned char minutes[60][6] = {
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // perc 0
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // perc 1
...
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000} // perc 59
};
const unsigned char hours[12][6] = {
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // ora 0
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // ora 1
...
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000} // ora 11
};
const unsigned char temperatures[17][6] = {
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // fok 15
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, // fok 16
...
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000} // fok 30
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000} // ures
};
void checkMinute() {
unsigned char second,minute,i;
second=Clock.getSecond();
minute=Clock.getMinute();
for (i=0; i<6; i++) data[i] = minutes[minute][i];
showpattern();
}
void checkHour() {
unsigned char hour;
hour=Clock.getHour(h12, PM);
for (i=0; i<6; i++) data[i] = hours[hour % 12][i];
showpattern();
}
void checkTemperature() {
unsigned char temperature;
temperature=Clock.getTemperature() - 15;
if (temperature >= 16) temperature = 16;
for (i=0; i<6; i++) data[i] = temperatures[temperature][i];
showpattern();
}vagy szerintem így sokkal szebb, csak másképp kell meghívnod (ebben az esetben természetesen semmi szükség a fenti rutinokra, checkMinutes stb...):
void checkValue(const unsigned char *table) {
unsigned char i;
for (i=0; i<6; i++) data[i] = *table++;
showpattern();
}
checkValue(&minutes[Clock.getSecond()][0]);
checkValue(&hours[Clock.getHour() % 12][0]);
checkValue(&temperatures[Clock.getTemperature()][0]);Remélem a fordító elfogadja a programot, ha meg nem, majd még igazítunk rajta
Szerk: mégiscsak megírtam...
-
dave0825
őstag
Ja igen, aztán rájöttem utána, hogy mivel < REPEAT_TIME van írva, ezért minél nagyobb, annál kisebb az esélye a duplázásnak, végül aztán hagytam 250-en. Megnézem majd az 500-at akkor, vagy majd keresek egy olyan számot, amivel nem ugrik át, bár furcsállom, hogy mindig csak a Mode == 2-ről ugrik át 3-ra (0-3-ig vehet föl értéket), sehol máshol nem ugrik a következőre, csak itt.
Nem is várom el senkitől, és nem is szeretném, hogy megírják/megírjátok helyettem.Én örülök neki, hogy még ha hosszúra sikeredve is, de (aránylag) jól működik.
Meg szeretnék is gyakorolni, mert elkezdett komolyan érdekelni a téma, úgyhogy ha meló mellett úgy lesz időm majd, fogok is foglalkozni ilyennel.
Annyit azért tudnál kiindulási alapként adni, hogy hogy érted a konstans tömböket?Tömböket használtam már, de egy ilyet nem tudom, hogy lehetne tömbbel megoldani:
data[0] = B00000000;
data[1] = B00000000;
data[2] = B00000010;
data[3] = B00000000;
data[4] = B00000100;
data[5] = B00000001; -
zka67
őstag
válasz
dave0825 #1264 üzenetére
Szia, örülök neki, hogy működik a programod
Viszont a REPEAT_TIME-ot nem csökkentened kellene, hanem növelned. Ez mondja meg, hogy mennyi az az idő, amin belül ha ugyan az a kód jön, az ismétlésnek számít. Lehet, hogy ezért ugrik át a beállításoknál. Vedd feljebb 500-ra, szerintem azzal már jónak kell lennie.
a switch (results)-ot át kellett írnom switch (results.value)-ra...
Jaja, én jegyzettömbe írtam a programot
De a presult is megfelelő lett volna...Szerintem sokkal egyszerűbb, átláthatóbb és jóval rövidebb lenne a programod, ha konstans tömbökben tárolnád a megjelenítendő adatokat...
Nem fogom megírni helyetted a programot, tanuld csak szépen a programozást
-
dave0825
őstag
zka67, vagy akinek van egy kis ideje: rá tudnátok nézni a (valószínűleg, legalábbis amíg nem jut eszembe új funkció
) végleges programomra az órával kapcsolatban? Van egy olyan kis hiba, hogy amikor módot váltok, tehát az idő/hőmérséklet/időbeállítás módok között lépkedek, akkor (mivel 2 részre osztottam az időbeállítást: óra- és percbeállításra) sokszor átugorja az órabeállítást, és egyből a percbeállításra lép. Itt pedig a másik kis hiba lép fel, hogy a percbeállításnál jóval nagyobb a fényereje a ledeknek, mint bárhol máshol (akár órabeállítás, akár hőmérséklet- vagy időkijelzés módban van).
Föltettem data.hu-ra magát a programot, de sima .txt-be is, innen mindenki le tudja szedni.
Kommentekbe beírtam a fontosabb programrészletek funkcióját, hogy jobban átlátható legyen. Tudom, hogy lehetett volna egyszerűbben is a programot megcsinálni, meg úgy az egész projektet, de eléggé kezdő vagyok, most még csak így sikerült.
Ha folyamatosan nyomom a 2 legfölső gombot a távirányítón, akkor (mivel annak egy tv hangerejének növelése/csökkentése volt az eredeti funkciója) folyamatosan újraküldi az infrajeleket, ezen a prellmentesítése sem segített, gondolom ez egy elektronikailag beépített funkció lehet, vagy nem tudom, de ez az idő beállításához pont nem baj. -
dave0825
őstag
-
dave0825
őstag
zka67: köszi, legközelebb holnap de. tudok vele foglalkozni, akkor elolvasom, megcsinálom, meg minden, most barátnőzök.
-
zka67
őstag
válasz
dave0825 #1251 üzenetére
(#1251) dave0825 Én pont ezért nagyon szeretem ezt a fórumot, de leginkább ezt a topikot, mert az esetek nagyon nagy részében mindig sikerül megoldást találni. Nekem legalábbis ritka volt, amikor nem tudtak itt segíteni az emberek.
(#1250) softguner Zseniális ez a csapatmunka
A C Programozás topikban is hasonlóan segítőkészek az emberek
-
zka67
őstag
válasz
dave0825 #1257 üzenetére
Szia, megnéztem a decode_results típust. A következőképpen módosítsd a programot:
#define VK1 0x12345678
#define VK2 0x87654321
#define REPEAT_TIME 250
decode_results results;
void IRHandler(void) {
static unsigned long pmillis, pvalue;
if (irrecv.decode(&results)) {
irrecv.resume();
if (results.value == pvalue) {
if ((millis()-pmillis) < REPEAT_TIME) {
pmillis = millis();
return;
} // Ez hiányzott
}
pmillis = millis();
pvalue = results.value;
switch (results) {
case VK1:
// Key 1 lenyomasakor
break;
case VK2:
// Key 2 lenyomasakor
break;
}
}
}
void loop() {
IRHandler();
} -
zoli03
őstag
A következőt hogyan lehetne megoldani? A DHT22 megadott időközönként küld értékeket, és az aktuális adatot össze akarom hasonlítani (nagyobb, kisebb vagy egyenlő), az előző 5 érték átlagával. Mindig az előző 5 érték átlagával, vagyis nem úgy, hogy 5 érték után hasonlítok, aztán megint a következő 5 érték után hasonlítok, stb.
-
dave0825
őstag
Okés, ez mind, amit kiír (volt egy pmilis elírásom is, azt javítottam):
zka67_prell:17: error: conversion from 'int' to non-scalar type 'decode_results' requested
zka67_prell.ino: In function 'void loop()':
zka67_prell:31: error: no match for 'operator==' in 'results == presults'
zka67_prell:43: error: switch quantity not an integer -
dave0825
őstag
És ez a két sor:
static unsigned long pmillis;
static decode_results results, presults = 0;
ezeket újra írjam be az IRHandler-en belül, vagy az menjen a legtetejére még a void setup() elé? Mert előtte alapból kell lennie egy decode_results results; nevű sornak, azt írjam át, vagy az maradjon ott és még az IRHandler-en belül-re is írjam oda amit írtál?Meg mondom, kihagytál egy } jelet, és nem tudom, hova kerül.
Ugyanazt a hibát kapom, mit írtam rosszul?
Úgy is próbáltam, hogy a 0-t kitörlöm a presults után, akkor ezen a hibán túllépett, viszont a results == presults-ra dobott egyet, hogy no match for 'operator==' in 'results == presults'.
-
zka67
őstag
-
dave0825
őstag
válasz
softguner #1250 üzenetére
Én pont ezért nagyon szeretem ezt a fórumot, de leginkább ezt a topikot, mert az esetek nagyon nagy részében mindig sikerül megoldást találni. Nekem legalábbis ritka volt, amikor nem tudtak itt segíteni az emberek.
(#1249) zka67: Ó, köszi, valami ilyenre gondoltam.
Viszont nem fordul le, hibát talál (lent a képen).
Az egyik lezáró }-jelet kihagytad, és nem tudom, hogy honnan, beraktam egy helyre, de nem tudom, hogy oda kell-e. A void IRHandler(void) miért kell oda, hol hívom azt meg? Ez alatt a sor alatt pedig miért kell a static szó oda a 2 helyre is?
Véleményem szerint a presults = 0;-t nem oda kéne írni, ahova a results-ot, mert ott a decode_results-ot nevezi csak ez, ami az IRremote.h-ban van, nem? Amúgy azt nem én írtam bele, az az IRrecvDemo.ino-ban alapból benne van. -
zka67
őstag
válasz
dave0825 #1248 üzenetére
Szia, szerintem ennek működnie kell:
Természetesen a gombok kódjait írd át
#define VK1 0x12345678
#define VK2 0x87654321
#define REPEAT_TIME 250
void IRHandler(void) {
static unsigned long pmillis;
static decode_results results, presults = 0;
if (irrecv.decode(&results)) {
irrecv.resume();
if (results == presults) {
if ((millis()-pmillis) < REPEAT_TIME) {
pmillis = millis();
return;
}
pmillis = millis();
presults = results;
switch (results) {
case VK1:
// Key 1 lenyomasakor
break;
case VK2:
// Key 2 lenyomasakor
break;
}
}
} -
dave0825
őstag
válasz
softguner #1244 üzenetére
Úgy akarom, hogy erre a gombra (7A6E10BA) egy úgynevezett Menü váltás legyen, tehát a Menü 1. pontjában az időt mutatja, a 2.-ban az időbeállítást (ilyenkor úgy tervezem, hogy 250ms-onként villan föl a pillanatnyi idő, ekkor meg a másik 2 gombbal tudom állítani az időt, mondjuk óra+, perc+, vagy csak a percet "+"-ba és "-"-ba, viszont ilyenkor sokáig kell nyomva tartani, mire az óra is változik, úgyhogy lehet, hogy marad az 1. verzió), a 3.-ban pedig a hőmérsékletet, 4., 5., meg még nem tudom lesz-e, vagy mi lesz. Viszont amit te írtál, abban is a case 1. esetében be lehet állítani, hogy növelje a Mode-ot minden lenyomásnál 1-gyel, és ha 1, akkor ez, ha 2, akkor az a programrészlet fusson le?Jó, most olvastam tovább, amit írtál.
Már nem törlöm ki, ha egyszer legépeltem ennyit.
Amúgy kösz szépen a segítséget is, meg a dicséretet is, nekem is tetszik/fog tetszeni.Ráadásul magyarul még nem láttam ilyet, úgyhogy az országban egyedül nekem lesz ilyenem.
A következő, amire gondoltam, meg egy hasonló méretű tábla, tele betűhalmazzal, talán még több led-del is, mint ez, és normál digitális óra formátumban írná ki az időt, mint az ilyen 7 szegmenses kijelzők, de a vonalakat betűk alkotnák.
De ez még a jövő zenéje.
(#1246) zka67:
próbáltam úgy is, hogy beírtam a break;-eket, de úgy meg ha jól emlékszem, akkor más gond volt.Jó, ezt is törölhetem.Sikerült, a break;-ekkel zsír.
Kösz szépen, a segítséget! Pedig tegnap tényleg próbáltam, csak lehet, hogy akkor meg még máshol volt valami gond. Annyi van most, ami nem tetszik, hogy ha megnyomom a gombot, akkor átvált, viszont előtte (ugye a 2 zöld sor világít, meg a többi kéken, amik az időt mutatják) erősebben fölvillannak a zöld led-ek.
A másik megoldást, amit írtál, valószínűleg holnap megcsinálom (így elsőre nem is tűnik bonyolultnak), de most már nincs agyam hozzá.Muszáj lesz beletennem, mert így a delay(40); nem igazán elegáns, meg így is van, hogy 2 gombnyomást érzékel, és nem csinál semmit, csak villan egyet (a delay miatt ugye).
Amúgy más része a programnak: a fényerőállítást úgy oldottam meg, hogy a fotoellenállás ugye 0-1023-ig ad vissza értéket, és map-pel belőttem a pause változót 10-900-ig, ami a led-mátrix frissítéséért felel, így mivel kis értéknél sűrűbben frissít, kisebb a fényereje, amikor nagyobb az értéke, akkor erősebb (900 fölött már kicsit látni, hogy villog, így azért mentem csak addig, de még ez is határeset).
-
zka67
őstag
válasz
dave0825 #1243 üzenetére
Szia, a 2. esetben, a case-s megoldásodnál kimaradtak a break; -ek
A switch utasítás csak elugrik a megfelelő case ágra, és onnan folytatja a program futását. Azaz, miután lefutott a case 1 ág, mivel nincs break, ezért a case 2 ágon folytatja a futást.
Az infrád ismétlését pedig a következőképpen tudod megszüntetni:
Amikor jön az adat, megnézed, hogy az előző adattal megegyezik-e? Ha nem, akkor új kód, feldolgozod, ha igen, megnézed, hogy mennyi idő telt el az előző adat óta. Ha több, mint 250ms, akkor új adatként feldolgozod, ha kevesebb, akkor figyelmen kívül hagyod.
Ezután az utolsó kódot elmented, és törlöd az eltelt időt.
-
softguner
csendes tag
válasz
dave0825 #1243 üzenetére
Mi lenne ha így csinálnád?
if (irrecv.decode(&results))
{
irrecv.resume();
}
switch (results.value)
{
case 0x7A6E10BA:
// lefut az utasítás sorozat amit akarsz lehet egy függvény is XY()
results.value=0;
break;
case "másik gomb"
// lefut az utasítás sorozat amit akarsz lehet egy függvény is XY()
results.value=0;
break;
}Vagy ha csak 1 gombot akarsz használni módok változtatására, akkor ez okés, de a resuls.value változót, akkor is le kell nullázni, mert ha nem akkor folyamatosan változtatni fogja az üzemmódot, vagy teljesen fals lesz a megjelenített információ.
Méghozzá azért, mert ez a rész.
if(results.value == 0x7A6E10BA)
{
Mode++;
}Ez mindig igaz lesz.
Nagyon jó cucc amit csinálsz, remélem sikerülni fog. Amikor a ledmátrixról beszéltél bevallom őszintén nem érdekelt annyira, de ez a megjelenítő ez nagyon ötletes, és baromi jó lesz ha sikerül
-
dave0825
őstag
válasz
gyapo11 #1238 üzenetére
Ezt a csavaros megoldást lehet, hogy megpróbálom, köszi. Amúgy talán az a 250 év is elég lesz, lehet, hogy 273 évesen már nem nagyon fogok forrasztgatni.
(Most nézem, hogy ha összeadom a leendő forrasztózsírom élettartamát a korommal, akkor az abszolút 0 fokot kapom
)
(#1239) gyapo11, (#1240) tvamos és (#1241) softguner: azóta annyit sikerült elérnem hogy működik úgy, hogy az 1. esetben mutatja mindkét saját függvény tartalmát, a 2. esetben pedig csak a 2.-at. Tehát a 2. része működik jól, az 1. részét kéne úgy megcsinálnom, hogy ne mindkét esetet mutassa, hanem csak az 1.-t. Data.hu-ra föltettem az új programrészletet, itt mindenki meg tudja nézni, de itt a sketch is. Beleraktam az IRremote library-t is, ha valakinek kell.
A delay(100)-at kivettem belőle, az nem tudom, hogy került oda.
Csináltam gyorsan egy videót, hogy így működik, akkor vált, ha megnyomom a távirányítón a gombot. Tehát így jó, de amikor a sok led világít, akkor csak kb. felének kéne, amikor váltok, akkor a hőmérsékletet mutatja, az jó. -
softguner
csendes tag
Szia, nekem van kész kódom, arra hogy SPI adapterrel hogy lehet a 1602-es LCD-t működésre bírni. Igaz ebben nincs benne a DHT library használata, de ahhoz találsz leírást a blogomban.
Annyi van, hogy én DHT11-et használtam nem a 22-őt. Viszont azt csak át kell írni, hogy melyik tipust akarod használni.
-
tvamos
nagyúr
válasz
dave0825 #1236 üzenetére
Nem veszunk ossze. Vegyel nyakhoz valo cuccot, amit a kollega javasolt, azzal sokkal jobban jarsz, mint a rozsdamaroval. Vagy rendelj egy ilyet: [link]. No-clean Flux, nem kell lemosni. En a regi fajtat le szoktam mosni, mert nem bizok semmi savas kemhatasu anyagban, ami a nyakra kerul. (Igazabol mindig lemosom flux cleanerrel, hogy szep legyen...)
(#1237) dave0825
Sajnos a linkjeid nalunk a proxi tiltja... -
gyapo11
őstag
válasz
dave0825 #1237 üzenetére
Nem látok hibát. Nem tudom hogy működik az infra vevő program. A delay(100) miatt kb. tizedmásodpercenként lefut a loop, és ha mindig igaz az (irrecv.decode(&results)), akkor gyors egymásutánban fogja léptetni a Mode változót, és felváltva fogja kiírni az értékeket.
Egy gombnyomás után meddig igaz a feltétel? Vagy ez maga a lekérdezés? Milyen gyakran küldi a távirányító a kódot? Lehet hogy lenyomod fél másodpercre, és már kiküldi 3-szor, az arduino meg lehet beolvassa mindháromszor. -
gyapo11
őstag
válasz
dave0825 #1236 üzenetére
100 g-os.
A fenyőgyanta és ez a forrasztózsír tuti mindkettő. Az 50 cm3 csak 250 évre lesz elég.
Nekem is van pisztolypákám, és szeretem is használni, az a trükkje, hogy ne legyen túl meleg. Az pedig nálam úgy megy, ha nem csak simán meghajlított drótot használok, hanem összesodrok a végén pár menetet. Így az összesodort rész nem fűt, csak a szabadon maradt drótrésztől kapja a meleget, így kevésbe lehet leégetni vele a fóliát meg az érzékenyebb alkatrészeket. Lassabban melegszik föl, nem kell annyit kattogtatni. -
dave0825
őstag
Egy kis segítséget kérnék a programhoz.
Van 2 saját függvény (azt hiszem, ez a neve a void valami()-nek), és azokat kéne futtatni úgy, hogy ha a Mode == 0-val, akkor a checkTime-ot, ha 1-gyel, akkor a checkTemperature-t. A Mode-ot eggyel növelem, amikor a távirányítón adott gombot nyomok meg.
Próbáltam if-ekkel is, de case-ekkel is, mindegyikkel ugyanaz az eredmény: amikor megnyomom a gombot először, akkor villan egyet az egész a checkTime alapján, ha másodszor, akkor semmi, újra, akkor megint az 1., következőre megint semmi, és így tovább (tehát a Mode működik jól, csak a kiíratás nem). -
dave0825
őstag
válasz
gyapo11 #1234 üzenetére
Nyákot ritkán szoktam forrasztani, inkább csak leforrasztani róla dolgokat, mint rá. Olyankor meg nem szokott probléma lenni ha rajt marad, vezetékek, ledek, meg ilyeneknél sem. Viszont ha most sűrűn nekiállok Arduino-zni, akkor lehet, hogy beszerzek valami rendes forrasztáshoz való cuccot, ez a Te TS570-ed sem drága, 50cm3 7-800 Ft. A képen látható mekkora kiszerelésű? (Úgy nézem nagyobb, ~3 billentyűnyi átmérőre.
)
Azért össze ne vesszetek, örülök, hogy mindketten segítetek, még akkor is, ha különböző véleményen vagytok, majd kipróbálom mindkettőtökét, valamelyik csak beválik.
-
gyapo11
őstag
válasz
dave0825 #1233 üzenetére
Nem tudom mi lehet a CR, talán rozsdaoldó? Az meg foszforsav tartalmú, ami elég gyenge sav, a foszfátsók meg elég stabilak, nem nedvszívók. Szóval nem olyan rossz az, persze le kell törölni a fölösleget, mert vezeti az áramot. Nekem a hagyományos fenyőgyantán kívül van egy TS 570 forrasztózsírom, kb. 500 évre elég, ha nem csatornaforrasztásra használom.
-
dave0825
őstag
Nyákot ritkán forrasztottam/forrasztok, általában led-eket, ellenállásokat, vezetékeket szoktam, azokhoz mindig jó volt, sosem volt semmi baj, nagyon jól letisztítja, amit kell. A rajt maradással szokott gond lenni, hogy nagyon lassan szárad, van, hogy napokig rajt marad, ha nem törlöm le, ezért gondoltam, hogy valahol maradhatott és összezár valamit. De akkor szerzek rendes no-clean folyasztószert. Tudnál esetleg linkelni oldalt, vagy boltot mondani, ahol kapok nemdrágán ilyet? Neten rendelni nem olcsó. Esetleg kis-elektronikai boltban, vagy hol lehet ilyet venni?
Amúgy így néz ki most a Nano-n az összeállítás:
-
-
dave0825
őstag
CR-nek szoktuk itthon mondani, vagy forrasztóvíz (azt hittem, hogy ez a hivatalos neve, de utánanéztem, nem
), rozsdamaró, ilyeneknek, de inkább CR-nek. A doboza ilyen, gondolom ez is van benne, apám szokta venni, sose kérdeztem, hogy eredeti doboza-e. 10-12 éve tudok forrasztani (Weller pákám nincs, csak pisztoly, 75W-os), azóta használok/használunk itthon ilyet hozzá, lemarja a koszt, egy pötty, és nagyon szépen megfogja mindig, amit kell a forrasztás. Enélkül van, hogy 5x kell megforrasztanom valamit, mert elengedi, úgyhogy enélkül nem is szoktam próbálkozni a forrasztásokkal.
Szép kis pöttyök lettek, nem hatalmas ormótlan buckók, úgyhogy tudok forrasztani szépen pisztollyal is.Képet már nem tudok mutatni, mert mivel nem jutottam semmire, szétszedtem az egészet, mármint az Arduino részét, kipróbálom a Nano-val. Próbapanellal összedugdosva jól működik, szerintem a Pro mini-m adta meg magát.
(Lehet, hogy ezért is produkálta mostanában a kékhalált a windows is, ha csatlakoztattam a géphez.)
Ha ráforrasztottam mindent a Nano-ra, arról küldök képet. -
gyapo11
őstag
Az elv az, hogy két változóban figyeled az időt, és amikor eléri a határt kiíratod amit kell.
ido1=millis()
ido2=millis()
loop
if(millis-ido1>15000)
{
{adatok beolvasása}
{egyik kiírás}
ido1=millis
}
if(millis-ido2>30000)
{
{adatok beolvasása}
{másik kiírás}
ido2=millis
}Az egyiket 15 másodpercenként fogja kiírni, a másikat 30 másodpercenként.
Amikor a millis túlcsordul, akkor 50 napig nem fog kiírni semmit, szóval azt kezelni kell. -
zoli03
őstag
Elakadtam kicsit a hőmérős programommal. 1602 LCD-re íratom ki az aktuális hőmérsékletet és alá a páratartalmat bal oldalra. Jobb oldalra meg a minimum hőmérsékletet, alá a minimum páratartalmat íratom ki, majd ezt mondjuk 30 másodperc múlva lecserélem a maximum értékekre, és ez a cserélgetés megy végtelen ideig. Viszont az aktuális adatokat gyakrabban akarom frissíteni (legyen mondjuk 15 másodperc), de ez nem jött össze.
A végleges megoldásban valószínűleg egyszerre lesznek kiíratva a min/max értékek, de érdekelne, hogyan lehetne megvalósítani a fenti problémát (pszeudokód is elég, vagy valamilyen linkelt példa, amiből ki tudok indulni). -
dave0825
őstag
Megőrülök ezzel az egésszel............Rátöltöttem a fönti képen látható infrás programot, a 11-es pin-re kötöttem az infrát, az még szabad volt, erre valahogy, halván lila f*ngom nincs hogy, de a led-mátrix utolsó oszlopa világít, ami a 10-esre van kötve...Gondoltam, a forrasztásnál valahogy összeérhetett, esetleg a forrasztóvíz miatt áthúz, vagy nem tudom, így átforrasztottam a 13-asra, ami elég messze van tőle. Rátöltöm újra a programot, megint világítanak ugyanazok.
Ráadásul hiába nyomkodom a távirányítót, soros porton semmit sem ír ki a program, pedig a hexa kódokat kéne.
Semmi köze nincs a programnak a mátrixhoz, semmit nem módosítottam rajta, egyedül a 11-es pin-t kéne használnia, mitől világít mégis az utolsó oszlop?Átkötöttem az infrát egy másik Arduino-ra, azon meg tökéletesen megy.
Soros porton írja is a megnyomott gombok kódjait, tehát nem az infrával van baj.
Átnéztem mindent, sehol semmi zárlat, vagy bármi. Meghalhatott az pro mini-m? Rátölteni sem mindig akarja a programot, megnyomom a reset gombot, amikor kell, és csak villan rajt 1 led pirosan, de nem tölti rá (kéken szokott villogni az usb-n 2 led is, most azok sem). Kihúzom a TxD, RxD, GND vezetékeket, visszadugom, semmi. Kb. 10-ből 1x sikerül rátölteni.
Ha nem is tudtok így látatlanba segíteni, legalább kiadtam magamból, mert már:Amúgy (#1226) tvamos: köszi.
-
dave0825
őstag
Köszönöm mindkettőtöknek, megpróbálom mindkét megoldást, hátha alakul valami.
Amúgy 1-2 hónapja kezdtem el aktívabban kérdezgetni itt, mert (röviden) egy ilyesmit szeretnék csinálni, csak magyarul, és úgy, hogy nem látszanak a betűk, hanem csak egy tükör lesz, és az éppen szükséges szavak világítanak át rajt. Ehhez szeretnék távirányítót, amivel 2-3-4 (még nem tudom pontosan) módot változtatnák, amelyekben az időt tudom beállítani (szintén távirányítóval), illetve egy másik módban a hőmérsékletet jelezné ki, a 3.-ban pedig újra az időt, meg még ami eszembe jut.
Találtam itthon egy régi 4 gombos távirányítót, azt szeretném használni, infrám is van, úgyhogy megvan minden, már csak a program kéne.
Egyelőre így néz ki a dolog (a tükrös fólia is fönt van már a plexin, csak közben fölbuborékosodott, mert állítólag plexit nem lehet fóliázni, mert mindenképp előbb-utóbb ilyen lesz, úgyhogy majd szerzek rendes üveget, amit újrafóliázok) a vágatott szavas fólia hátlapján keresztül (még csak tesztelés alatt van a program is). Meg a ledek egyelőre eléggé 1 pontba világítanak, rakok majd rá egy fóliát, amivel szépen szétterül nagyobb körré, így egyformán világítja majd be a betűk mindegyik részét. A fönt linkelt oldalon is a csávó rakott rá egy fóliát.
Itt pedig egy videó, a perceket átírtam a programban másodpercekre, így jobban látszik, hogy hogy fog működni majd.
(#1224) zoli03: szerintem lehet, igen, de a másik Arduino-ra ne csak a jelet kösd, hanem a földet is húzd át oda.
-
zoli03
őstag
Ha van egy szenzorom (az én estemben DHT22), akkor azt ugye rá lehet kötni egyszerre két Arduinora is? Egyik Arudinoról kapná a tápot, de a jelet mindkettőnek küldené egyszerre.
-
softguner
csendes tag
válasz
dave0825 #1221 üzenetére
Nem tudom, hogy mire használod az infrát, de én így oldottam meg, hogy csak 1x hajtsa végre az utasításokat.
results.value=0;
if (irrecv.decode(&results))
{
irrecv.resume();
}
Serial.println("Infra value: ");
Serial.println(results.value);
if (serialon != 0 )
{
switch (results.value)
{
case 553536955:
radio.setStandByOn();
if (playstate == 1 && radioon == 0)
{
command(0x0E, 0x00);
Serial.println("Pause");
playstate=0;
results.value=0;
myGLCD.clrScr();
myGLCD.print("PAUSE", 28, 20);
myGLCD.update();
}
else
{
command(0x0D, 0x00);
Serial.println("Play");
playstate = 1;
results.value=0;
myGLCD.clrScr();
myGLCD.print("PLAY", 30, 20);
myGLCD.update();
}
radioon = 0;
break;Mindig nullára állítottam az infra => results.value változót, és így mindig csak 1x fut le a kívánt programrész, a távirányító megnyomásakor.
Szerintem lemaradtam, de te mire használod az infrát? Én egy mp3 lejátszót és egy tea5767-es rádiót kapcsolok vele. Nálam ez a megoldás működik, lehet nálad van valami speciális dolog. Itt pl azért kell így megoldanom, mert a play/pause gomb egy és ugyan az, és ha már épp megy a lejátszás, akkor értelemszerűen pause jön a következő gombnyomásra, ellenben play kivéve ha a rádió üzemelt éppen, mert akkor így is úgy is play lesz.
-
dave0825
őstag
A 0x-et mindenképp elé kell írni, és utána megy a hexa kód, így ismeri föl a program. Először kínlódtam vele, mert tettem " "-be, aztán ' '-be, mindegyik nélkül is próbáltam, sehogy sem ment, aztán megnéztem a videót, ami alapján jött az ötlet a távirányítóhoz, és 0x-et ír elé.
Az utána lévő 8 jegyű kód meg az, amit a távirányító valamelyik gombjának megnyomása után kapok.Amúgy itt látszik is (4 gombot nyomtam meg), hogy az 1. gomb 1x-i megnyomásakor 2-t érzékelt, ezt kéne kiküszöbölnöm valahogy.
Itt egy próbaprogram is, hogy lásd, hogy 0x és utána a kóddal megy szépen.
-
dave0825
őstag
válasz
gyapo11 #1187 üzenetére
Kipróbáltam ezt a példát, amit írtál, de itt is néha 2 lenyomást számol, amikor csak 1x nyomom le a gombot. Hogy lehetne kiegészíteni úgy, hogy 1 nyomásra mindenképp csak 1-et számoljon?
if (gombjelzo==1 && results.value == 0x7A6E10BA)
{
buttonPushCounter++;
}else if (gombjelzo==1 && results.value != 0x7A6E10BA)
{
gombjelzo=0;
}if (gombjelzo==0 && results.value != 0x7A6E10BA)
{
}
else if (gombjelzo==0 && results.value == 0x7A6E10BA)
{
gombjelzo=1;
}
Serial.println(buttonPushCounter, DEC);Meg ha másik gombot nyomok, majd újra azt, amelyiket számoltatom (tehát a legutolsó else if fut le), akkor 1 nyomást nem számol, mert ugye akkor áll be a gombjelzo 1-re, és csak a következőt adja hozzá a számlálóhoz. Amit eggyel följebb írtam, arra a programra nem tudsz valami megoldást mondani? Hogy nem rendes fizikai gombbal csinálnám ugyanezt, hanem egy hexa kóddal, tehát ha az a kód érkezik, akkor HIGH, ha nem, akkor LOW-nak feleljen meg, vagy ilyesmi.
-
dave0825
őstag
Az Arduino oldalán található Debounce és ButtonStateChange sketch-et vegyítettem, így hoztam létre a saját prellmentesített gombnyomásszámláló programomat, amit át szeretnék írni úgy, hogy ezzel az alap programmal tudjam számoltatni a távirányítón lenyomott gombnyomásokat (4 gomb van, megvannak a hexa kódjai is), de nem tudom, hogy hogy induljak el. Tudnátok segíteni kicsit?
-
Sziasztok, volt már dolga valakinek ilyennel?
-
dave0825
őstag
Szerintetek ezen, miért nagyobb a 16MHz-es frekvenciagenerátor, ehhez képest? Vagy attól még a kompaktabb panel is működhet ugyanúgy, és csak fejlődött a korral?
Ott amúgy external resonator-t írnak, annyit megfigyeltem. Nekem a nagyobbik van, csak most valami nem stimmel vele, elkezdte a napokban, hogy ha rádugom laptop-ra (amin eddig is használtam, driver-t sem frissítettem), akkor kékhalál fogad, vagy ha rádugni sikerült is, rátölteni már nem tudom a programot, mert akkor jön elő a hiba. Úgy sikerül, ha előbb csak az usb-t dugom be, majd úgy kötöm rá a 4 vezetéket a pro mini-re, így működik. Vagy lehet, hogy a sok led-et nem szereti az usb (programozáshoz nem használom a külső tápot, amit majd ha kész lesz, fogok).
Szóval ezért vennék egy másikat, meg ezt be is építem ugye az órámba, úgyhogy legyen azért még egy. -
softguner
csendes tag
Sziasztok.
Akadt egy apró problémám, amire nem találok megoldást. Egy soros kommunikációval vezérelt Mp3 lejátszót akarok beüzemelni, aminél a következő problémám akadt. Valamiért nem működik nálam az az elágazás, amikor kezelném azt a helyzetet "ha az eszköz nem elérhető".
Ennek a résznek csak akkor kellene lefutni, ha az eszköz elérhető:
if (mp3.available() > 0) // Ha a lejátszó elérhető
{
myGLCD.clrScr();
if (answer()) // Ha az answer függvény TRUE
{
if (ansbuf[3] == 0x3A) // Kártya vizsgálata // Ha be van dugva
{
Serial.println("TF Card in slot");
command(0x17, 0x0100); // A 02-es mappa játszása folyamatosan
command(0x0D, 0x00); // Lejátszás elindítása
myGLCD.clrScr();
myGLCD.drawBitmap(0, 0, autoplay, 84, 48);
myGLCD.update();
}
if (ansbuf[3] == 0x3B) // Kártya vizsgálata // Ha ki van húzva
{
Serial.println("TF Card out of slot");
myGLCD.clrScr();
myGLCD.print("INSERT", 23, 10);
myGLCD.print("SD CARD", 20, 20);
myGLCD.update();
}
}
}Ez eddig oké is, minden stimmel. Viszont bármit írok a különben részbe, az ugyanúgy lefut, ezért csak a különben részbe írt képmegjelenítést látom a Nokia kijelzőn. Plusz a softwareserial library következő feltételvizsgálata sem működik:
if (!mp3.available())
{
//Valami történik
}Nem nagyon vagyok otthon a sotwareserial library működésében, ezért ha valaki tud segíteni, hogy mit bénázhatok el, annak előre is egy NAGY köszönet
-
tibi-d
tag
Sziasztok!
Úgy látom, hogy a nyomógombok prellegésmentesítése ekkora probléma. Bemásolom az általam használt megoldást (kiollózva egy működő alkalmazásból). Ezt a metódust bármilyen menürendszer felépítésére fel lehet használni. Csak a fantázia szab határt.#include <TimerOne.h>
int Pin3 = 3;
int Pin4 = 4;
int Pin5 = 5;
int Pin6 = 6;
int Value;
int Back;
int Up;
int Down;
int Enter;
int Time1;
int Count1;void setup()
{
Timer1; // Timer1 meghívása
Timer1.initialize(100000); // Az időzítés beállítása
Timer1.attachInterrupt( timerIsr ); // A megszakításkor meghívott függvény
pinMode(Pin3, INPUT_PULLUP);
pinMode(Pin4, INPUT_PULLUP);
pinMode(Pin5, INPUT_PULLUP);
pinMode(Pin6, INPUT_PULLUP);
}void timerIsr() // Minden megszakításkor lefut 1 ciklusidőre.
{
Time1 = 1; // Globális változó beállítása, ami bárhol használható
Count1 ++; // 0.5 s alatt körbeszámol
if ( Count1 > 4 ) Count1 = 0;}
void loop()
{
if (Time1 == 1 ) // 0.1 s-ként billentyű beolvasás
{
Back = digitalRead(Pin3);
Up = digitalRead(Pin4);
Down = digitalRead(Pin5);
Enter = digitalRead(Pin6);
Menu();
Time1 = 0; // Csak 1 ciklus idejére figyeli a gombokat
}}
void Menu()
{
if ( Up == 0 && Count1 == 2 )
{
Value ++; // 0.5 s-ként növeli az értéket}
if ( Down == 0 && Count1 == 2 )
{
Value --; // 0.5 s-ként csökkenti az értéket}
}Lehet, hogy csak billentyű beolvasásra kicsit körülményesnek látszik, de amiben én használom ott ez a módszer vált be. (szerteágazóbb funkciók meghívása, stb)
-
zka67
őstag
válasz
gyapo11 #1201 üzenetére
Szia, az arduino oldalán rengeteg példa van fent, ezek közül a legegyszerűbbet betettem ide.
#include <TimerOne.h>
void setup()
{
// Initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards
pinMode(13, OUTPUT);
Timer1.initialize(100000); // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
Timer1.attachInterrupt( timerIsr ); // attach the service routine here
}
void loop()
{
// Main code loop
// TODO: Put your regular (non-ISR) logic here
}
/// --------------------------
/// Custom ISR Timer Routine
/// --------------------------
void timerIsr()
{
// Toggle LED
digitalWrite( 13, digitalRead( 13 ) ^ 1 );
} -
-
dave0825
őstag
Megszakítást nem tudom, hogy kell használni, vagy az egyáltalán mi.
Én is szívesen látnék egy egyszerű példát, már ha egyszerű a megvalósítása annak, amit leírtál, meg az ilyen megszakításoknak egyáltalán.
A programom még eléggé gyerek cipőben jár, csak beillesztgettem a helyükre a 6x5-ös mátrixhoz, meg a DS3231 beolvasásához szükséges dolgokat. Aztán elkezdtem a loop-ban if-eket csinálni, hogy ha == valamivel, akkor melyik led világítson, ehhez meg az a 6 soros binárisan megadott data tömböket írtam, meg majd így is terveztem csinálni. Tudom, hogy elég sok sor lesz így, de nekem így a legegyszerűbb a mostani tudásomat nézve.
Az infrával kapcsolatban például még semmit nem raktam a programba. -
gyapo11
őstag
válasz
softguner #1205 üzenetére
Szerintem jó a kondenzátoros, csak a kondi kapacitását kell eltalálni. Nem tudom a digitális bemeneten mennyi a két küszöbfeszültség, legyen 1 és 2 V, a két érték között kell tartania a kondinak, amíg a prell tart. Néhány ms-et ír a cikk, legyen 5 ms, a kapcsolás szerint 100 Ohmon tudja kisütni, föltölteni lassabban 1.1 kOhmon, vagyis 5 ms * 20 mA / 1 V = 100 mikrofarádnál nem lehet kisebb, a cikk szerint meg 100 nF.
A Tina szerint 100 Ohm és 100 mikroF 2 V feszültséget rákapcsolva így töltődik:
Ebből az látszik, hogy kb 7 ms alatt már 1 V-ot mászik.
Valószínűleg sokkal rövidebbek a prell impulzusai. Másrészt 5 V-ról indul a kisütés, szóval biztos elég kisebb kondi is. -
softguner
csendes tag
-
gyapo11
őstag
válasz
softguner #1203 üzenetére
Ha a #1191-ben levő programra gondolsz, az a hosszú lenyomást megfogja, egynek számolja, de a prellt nem. Csak rá kell kötni a nyomógomb helyére egy 1 kHz-es négyszöggenerátort és nézni a számlálót.
Amikor vált az érték, akkor megnézi, hogy 1 lett-e, és ha igen léptet, ha 0 lett akkor nem. Vagyis minden L-H átmenetnél lépteti a számlálót.
Meg kell nézni az alkalmazott nyomógombot egy számlálóval, vagy egy hangkártyás szkópprogrammal, hogy van-e prell vagy nincs. De mechanikai érintkezésen alapuló nyomógombnál nagy valószínűséggel lesz, idővel még több. A fenti programmal használhatatlan lesz, mert egy nyomásra kiszámíthatatlan értékkel fog nőni az adat nevű változó értéke, nem eggyel. -
gyapo11
őstag
válasz
dave0825 #1196 üzenetére
Az arduino sokkal gyorsabb mint az ember, nekem mikrokapcsolóval 40-50 ms-et sikerült legrövidebbet gombot nyomni, ennyi idő alatt nagyon sokszor be tudja olvasni, tehát mindenképpen kezelni kell a prellt, vagy lehet külső áramkörrel, és akkor elég a lenyomást-felengedést detektálni. Elég egy RC tag, az már megfogja a prellt.
A programodra nem tudok, nekem már túl bonyolult átlátni ekkora programot.
Új hozzászólás Aktív témák
Hirdetés
- Kertészet, mezőgazdaság topik
- Barátokká váltak az eddig rivális AI-óriások
- Suzuki topik
- Megvan, milyen chipet használ a Pura 80 Ultra
- Apple MacBook
- Háztartási gépek
- Gurulunk, WAZE?!
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- The First Berserker: Khazan
- sziku69: Fűzzük össze a szavakat :)
- További aktív témák...
- MSI RTX 4070 SUPER 12GB GAMING X SLIM WHITE - 20 hónap garancia
- GIGABYTE RTX 4070 SUPER WINDFORCE OC 12GB - 20 hónap garancia
- iKing.Hu - Samsung S25 Ultra - Titanium Black - Használt, karcmentes
- Apple Ipad 10.generáció
- Új HP Pavilion x360 14-ek Érintős hajtogatós Laptop Tab 14" -35% i5-1335U 8/512 FHD IPS Iris Xe
- Bomba ár! Dell Latitude 7320 - i5-11GEN I 8GB I 256SSD I HDMI I 13,3" FHD I Cam I W11 I Garancia!
- REFURBISHED - DELL Thunderbolt Dock WD19TBS docking station (210-AZBV)
- Tablet felvásárlás!! Apple iPad, iPad Mini, iPad Air, iPad Pro
- Telefon felvásárlás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- BESZÁMÍTÁS! XFX MERC 310 RX 7900 XTX 24GB videokártya garanciával hibátlan működéssel
Állásajánlatok
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest