Tipke na analognem pinu

Arduino je pojav za katerega bi težko rekli, da opisuje samo HW ali samo SW, zato mu tu namenajm poseben prostor.

Moderator: tilz0R

Tipke na analognem pinu

OdgovorNapisal/-a Kroko » 14 Jun 2024, 18:49

Ali bi lahko na analogen pin priklopil 6 tipk?

Recimo takole:
Koda: Izberi vse
         Analog pin
            |
GND--1K-----|--------|--------|-------|-------|-------|
            |        |        |       |       |       |
           btn1     btn2     btn3    btn4    btn5    btn6
            |        |        |       |       |       |
           220      390      680     2.2K    4.7K    10K
            |--------|--------|-------|-------|-------|--- +5V


Ima kdo izkušnje?
http://www.planet-cnc.com Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 5961
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 759 krat
Prejel zahvalo: 2307 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Tipke na analognem pinu

OdgovorNapisal/-a DusanK » 14 Jun 2024, 19:13

CGPT4.0 pravi:

Da, takšna konfiguracija, kot ste jo opisali, je možna in dejansko dokaj pogosta rešitev za zmanjšanje števila vhodnih pinov, potrebnih za povezavo več tipk na mikrokrmilnik. Ideja je, da vsaka tipka ustvari različen uporovni delilnik, ki povzroči različno napetost na analognem pinu, ko je pritisnjena. S pomočjo analogno-digitalnega pretvornika (ADC) na mikrokrmilniku lahko te različne napetosti prepoznate in ugotovite, katera tipka je bila pritisnjena.

Vaša shema je pravilna. Vsak upor, priključen na tipke, bo povzročil drugačno napetost na analognem pinu, ko je tipka pritisnjena. Upori so izbrani tako, da ustvarijo dovolj različne napetosti, ki jih ADC lahko zanesljivo zazna.

Postopek za implementacijo:

Preverjanje napetosti: Najprej morate izmeriti napetost na analognem pinu za vsak upor (vsako tipko), da ugotovite, kakšne vrednosti napetosti boste dobili, ko so posamezne tipke pritisnjene.

Kalibracija: Zabeležite te napetosti. Lahko uporabite funkcijo analogRead() v Arduino okolju, da dobite digitalne vrednosti napetosti za vsako tipko.

Programiranje: Napišite program, ki bo glede na izmerjene vrednosti ADC-ja zaznal, katera tipka je pritisnjena. Običajno boste nastavili določene meje za vsako tipko, da bodo zaznane pravilno.

Primer kode za Arduino:

const int analogPin = A0;

void setup() {
Serial.begin(9600);
}

void loop() {
int adcValue = analogRead(analogPin);
Serial.println(adcValue);

if (adcValue > 0 && adcValue < 100) {
Serial.println("Button 1 pressed");
} else if (adcValue >= 100 && adcValue < 200) {
Serial.println("Button 2 pressed");
} else if (adcValue >= 200 && adcValue < 300) {
Serial.println("Button 3 pressed");
} else if (adcValue >= 300 && adcValue < 400) {
Serial.println("Button 4 pressed");
} else if (adcValue >= 400 && adcValue < 500) {
Serial.println("Button 5 pressed");
} else if (adcValue >= 500 && adcValue < 600) {
Serial.println("Button 6 pressed");
}

delay(100);
}

Dodatni nasveti:

Odporniška toleranca: Upori imajo lahko toleranco, kar pomeni, da lahko dejanske vrednosti napetosti nekoliko odstopajo. Zato je priporočljivo izbrati uporovne vrednosti, ki so dovolj razmaknjene, da se prepričate, da se vrednosti ADC ne prekrivajo.
Debouncing: Pri delu s tipkami je pomembno tudi obravnavanje učinka "debouncinga", saj lahko mehanski stiki tipke povzročijo večkratne hitre prekinitve, ko je tipka pritisnjena ali sproščena. To lahko odpravite s programsko ali strojno debouncing tehniko.

Če pravilno implementirate vse zgoraj navedeno, bi moral vaš sistem za zaznavanje več tipk na enem analognem pinu delovati zanesljivo.
Največji čar - električar
Uporabniški avatar
DusanK
 
Prispevkov: 7253
Pridružen: 18 Jan 2015, 00:43
Kraj: Medvode
Zahvalil se je: 3219 krat
Prejel zahvalo: 5716 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 255

Re: Tipke na analognem pinu

OdgovorNapisal/-a MadMax » 14 Jun 2024, 19:32

Omejitev je pa istočasni pritisk več tipk. Privzeto pač ni mogoč, čeprav bi se kakšno kombinacijo še dalo sestavit.
Če pa je problem pritisk neželjene tipke, je treba poskrbeti da naključen hkraten stisk večih drugih tipk ne pade v vrednost neželjene.
Stvari so preproste, le ljudje smo neverjetni mojstri, da jih zakompliciramo.
MadMax
 
Prispevkov: 3434
Pridružen: 18 Jan 2015, 00:38
Kraj: Črnomelj
Zahvalil se je: 803 krat
Prejel zahvalo: 899 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 255

Re: Tipke na analognem pinu

OdgovorNapisal/-a S56FPW » 14 Jun 2024, 23:41

tkole so fantje resili pri keyerju
Priponke
Keyer.jpg
http://lea.hamradio.si/~s56fpw/
Uporabniški avatar
S56FPW
 
Prispevkov: 911
Pridružen: 26 Jan 2015, 23:00
Kraj: Ljubljana
Zahvalil se je: 254 krat
Prejel zahvalo: 499 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 96

Re: Tipke na analognem pinu

OdgovorNapisal/-a MadMax » 15 Jun 2024, 05:45

In en ruski projekt na 16 tipk:
Priponke
Synthesizer on Mega 2560.JPG
Stvari so preproste, le ljudje smo neverjetni mojstri, da jih zakompliciramo.
MadMax
 
Prispevkov: 3434
Pridružen: 18 Jan 2015, 00:38
Kraj: Črnomelj
Zahvalil se je: 803 krat
Prejel zahvalo: 899 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 255

Re: Tipke na analognem pinu

OdgovorNapisal/-a VolkD » 15 Jun 2024, 06:00

Unisolder ima, s pomočjo delilnika napetosti, narejeno prepoznavanje vrsto priključene konice.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 65730
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 19233 krat
Prejel zahvalo: 10027 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Tipke na analognem pinu

OdgovorNapisal/-a tilz0R » 15 Jun 2024, 16:49

Na STM32U0-discovery boardu smo podobno rešili joystick.

https://www.st.com/en/evaluation-tools/ ... -resources
Priponke
Brez naslova.png
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 2321
Pridružen: 17 Jan 2015, 23:12
Kraj: Črnomelj
Zahvalil se je: 260 krat
Prejel zahvalo: 730 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Tipke na analognem pinu

OdgovorNapisal/-a s55m » 15 Jun 2024, 17:44

Yaesu pocne isto. Pri taki resitvi je jasno, da ne smes pritisniti dveh tipk naenkrat.
Priponke
keypad_schema.png
keypad_schema.png (9.49 KiB) Videno 176 krat
The human emotional side is what allows believing in something, even when the science is totally wrong.
Uporabniški avatar
s55m
 
Prispevkov: 624
Pridružen: 17 Jan 2015, 20:56
Kraj: Sofia BG
Zahvalil se je: 153 krat
Prejel zahvalo: 215 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 43


Vrni se na Arduino

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost