Napisal/-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