- Gurulunk, WAZE?!
- gban: Ingyen kellene, de tegnapra
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Magga: PLEX: multimédia az egész lakásban
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Ivqkzy-: Eddig
- sziku69: Szólánc.
- Argos: Szeretem az ecetfát
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
-
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
-
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
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- WLAN, WiFi, vezeték nélküli hálózat
- Kerti grill és bográcsozó házilag (BBQ, tervek, ötletek, receptek)
- Google Pixel topik
- BMW topik
- Formula-1
- Fejhallgató erősítő és DAC topik
- Moderátort keresek a fórumhoz!
- Star Wars rajongók
- Trollok komolyan
- További aktív témák...
- BESZÁMÍTÁS! MSI SUPRIM X RTX 4080 16GB videokártya garanciával hibátlan működéssel
- BESZÁMÍTÁS! 6TB Seagate SkyHawk SATA HDD meghajtó garanciával hibátlan működéssel
- BESZÁMÍTÁS! 4TB Samsung 870 EVO SATA SSD meghajtó garanciával hibátlan működéssel
- BESZÁMÍTÁS! Intel Core i7 8700K 6 mag 12 szál processzor garanciával hibátlan működéssel
- BESZÁMÍTÁS! Intel Core i7 4790 4 mag 8 szál processzor garanciával hibátlan működéssel
- FÉL ÁR ALATT! Lian Li UNI FAN SL120 RGB 1db-os és 3db-os ventilátor szett garanciával
- BESZÁMÍTÁS! Gigabyte H610M i5 13400F 32GB DDR4 512GB SSD RTX 3070 8GB Zalman Z1 Plus Enermax 750W
- BESZÁMÍTÁS! Gigabyte B450M R5 5600X 16GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Seasonic 520W
- Samsung Galaxy A35 5G 128GB Kártyafüggetlen 1Év Garanciával
- BESZÁMÍTÁS! ASUS TUF Z390-PRO GAMING alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged