- TCL LCD és LED TV-k
- Nvidia GPU-k jövője - amit tudni vélünk
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Samsung Galaxy Tab S10 Ultra - más dimenzió
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Canon EOS DSLR topic
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Forrmell.enn
- Vélemény: nem úgy tűnik, de Lip-Bu Tan most menti meg az Intelt
- AMD Navi Radeon™ RX 5xxx sorozat
-
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
-
tibi-d
tag
Szia!
Itt a kód, amit az Arduino.cc "learning" oldaláról ollóztam.State change detection (edge detection)
Often, you don't need to know the state of a digital input all the time,
but you just need to know when the input changes from one state to another.
For example, you want to know when a button goes from OFF to ON. This is called
state change detection, or edge detection.This example shows how to detect when a button or button changes from off to on
and on to off.The circuit:
* pushbutton attached to pin 2 from +5V
* 10K resistor attached to pin 2 from ground
* LED attached from pin 13 to ground (or use the built-in LED on
most Arduino boards)created 27 Sep 2005
modified 30 Aug 2011
by Tom IgoeThis example code is in the public domain.
http://arduino.cc/en/Tutorial/ButtonStateChange
*/
// this constant won't change:
const int buttonPin = 2; // the pin that the pushbutton is attached to
const int ledPin = 13; // the pin that the LED is attached to// Variables will change:
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the buttonvoid setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
}void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
}
else {
// if the current state is LOW then the button
// wend from on to off:
Serial.println("off");
}
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;// turns on the LED every four button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}}
Természetesen úgy alakítod, ahogy neked megfelel. -
gyapo11
őstag
Ez beolvassa a nyomógomb állapotát, a buttonState változó értéke vagy 0 vagy 1 lesz.
Az #1031-be linkelt példa jó, ha nem értesz benne valamit akkor kérdezz.
Illetve még javaslom a folyamatábrát, azal könnyű megérteni a működést programnyelvtől függetlenül, és utána át kell fordítani az arduino nyelvére, ebben tudok segíteni. -
tibi-d
tag
Sziasztok!
Minden programomban én úgy oldom meg a nyomógombok prellmentesítését, hogy a menüvezérlést egy önálló szubrutinba hívom meg. Ezt a szubrutint egy (Timer1.attachInterrupt) hívja meg, ami nálam 0.1s alatt fut le 1X.
Ekkor figyelem a nyomógomb változását. Ha változott, beállítok egy változót (PinOld) amit csak akkor írok vissza, ha már végrehajtottam a feladatot, amit a nyomógomb vezérelt, és felengedtem a gombot. Így biztos, hogy csak 1X fogja végrehajtani. Ez az algoritmus bármennyi gomb vezérléséhez használható, ha kell prioritás is felállítható a gombok között. ( és csak 1X kell megírni, utána bármelyik projektben alkalmazható.) -
gyapo11
őstag
Egy változóban őrzöd, hogy most éppen melyik állapot az aktuális, az időmérés, vagy a nem időmérés.
A gombnyomásnál és a fölengedésnél lesznek prellek, ezeket kezelni kell. Lehet külső áramkörrel, ami garantáltan prellmentesen vált egyik állapotból a másikba, vagy software-ből, mondjuk 50 ms-et várni, de szeritnem elég 30 is.
Amikor érzékeled a nyomógomb lenyomását, akkor a millist leteszed, és addig vársz, amíg 30-cal nem lesz több, ha még mindig be van nyomva, akkor úgy veszed, hogy megtörtént a lenyomás. Ekkor elvégzed az ehhez tartozó műveleteket, beírod az állapotváltozóba, hogy 1 (mérés), és figyeled, hogy mikor enged föl. Amikor észreveszed, hogy föl van engedve, akkor ugyanaz a menet, mint a lenyomásnál. Vársz 30 ms-et, megnézed, hogy még mindig föl van-e engedve, ha igen elvégzed a műveleteket és beírod a változóba a 0-át (nincs mérés). És a delay-t elfelejted. -
nyunyu
félisten
elapsedTime 64 bites egesz tipusu, azert inicializalja az 1000-es osztot ugyanilyen adattipusnak.
Ha siman /1000 lenne odairva, akkor alapertelmezetten 32 bites int tipusu lenne az oszto, amit osztas elott at kell alakitania a forditonak 64 bitesre, mivel az aritmetikai muveletek csak azonos tipusu parametereken vegezhetoek el.
Legalabbis a fejlett programnyelvek altalaban automatikusan szoktak castolni a rovidebb valtozot a hosszabb adattipusara, de elegansabb eleve ugyanolyan adattipust hasznalni mindenhol.
Ugy rovidebb es valamivel gyorsabb is lesz a leforditott kod.Regebbi progamnyelvek hibauzenetet dobtak forditaskor, ha nem egyezett a ket adattipus.
Legalabbis a C meg elegge haklis volt erre. -
gyapo11
őstag
Nem feltétlenül kell megszakítással számolni, a loop egy ledvillogtatással 100 ezerszer fut le másodpercenként, a te programod nyilván hosszabb lesz, de ha csak 10 ezerszer fordul, akkor is lesz ideje számolni az impulzusokat.
Nyomógombot (mikrokapcsolót) simán kezelem bármelyik lábon, még kondi se kell. Az első lenyomott állapot érzékelése után 30 ms múlva kell leolvasni, ha még mindig benyomott, akkor jó, addigra az összes prell elmúlik. Ezután kell figyelni a fölengedést, nekem 40 ms volt kb. a leggyorsabb fölengedésem, de inkább 100 ms-re kell számítani. Fölengedésnél a prellel nem kell törődni, amint 1-be ugrik a bemenet az föl van engedve.
Ez az egyszeri megnyomás beolvasására igaz, ha nyomvatartott állapot is van, akkor kicsit más, én órát programoztam egy gombbal, és volt 500 ms-nél kisebb, 500-1500 közötti, és ennél hosszabb idő, ezek mind más funkciót töltöttek be.
Mivel számolnod kell az impulzusokat, a delay() függvényt felejtsd el, vannak timer libraryk delay nélkül, vagy akár programozhatod magad is, de a loop pörögjön. -
bacus
őstag
miért kell két nyomógomb? egy nem elég? ha mér akkor ne mérjen, ha nem mér akkor mérjen. ez egy gombnyomás.
az lcd kijelzőt érdemes úgy választani, hogy legyen rajta i2c busz és akkor 2 vezeték elég, csak magadnak könnyited meg az életed.
ja, most olvasom, hogy soha nem forrasztottál, nos ez a kisebbik baj, mert azt gyorsan megtanulod, lehet az elején nem lesz szép, de működni fog, de ezt ha tartósan meg akarod tartani, akkor a próba panel a minimum, a breadboard, egyrészt drága, másrészt hogy néz ki, hogy a kanócok ott mennek és beleakadsz leesik, ki is húzódik?
Mondom a minimum, hogy veszel próbanyákot, azon szépen beforrasztgatod az alkatrészeket, majd összehuzalozod.
Új hozzászólás Aktív témák
Hirdetés
- TCL LCD és LED TV-k
- Luck Dragon: Asszociációs játék. :)
- Xbox Series X|S
- sziku69: Szólánc.
- Nvidia GPU-k jövője - amit tudni vélünk
- LEGO klub
- Google Pixel 8 Pro - mestersége(s) az intelligencia
- sziku69: Fűzzük össze a szavakat :)
- Debrecen és környéke adok-veszek-beszélgetek
- Milyen routert?
- További aktív témák...
- SZÉP Lenovo ThinkPad P15 G2 Tervező Laptop -75% 15,6" i9-11950H 64/2TB RTX A4000 8GB UHD OLED
- Szép! Lenovo Thinkpad T14s G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 16GB/512GB FHD IPS
- Eladó Apple MacBook Pro 13" A1706 (Late 2017, Silver - EMC 3163)
- Amazfit GTR 2 Classic okosóra dobozában töltőkábellel
- Mac mini M1 chip 8 magos CPU-val, 8 magos GPU-val
- Bomba ár! HP EliteBook 2570P - i5-3GEN I 4GB I 320GB I DVD I 12,5" HD I W10 I Garancia!
- BESZÁMÍTÁS! ASRock Z370 i5 8500 16GB DDR4 512GB SSD 2060 Super 8GB Zalman Z9 Plus Enermax 750W
- Xiaomi Redmi 10 128GB, Kártyafüggetlen, 1 Év Garanciával
- Akciós dokkolók, Lenovo Legion Pro 7 RTX 4080/4090 laptopok, licencek, antivírusok
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest