Hallo Forum,
super Idee, eine "c"-Ecke einzurichten. Vor allem für Controller-Anfänger wie ich einer bin.
Ich habe einige kleine Schnipsel für die c-Programmierung des RN-Control-Boards fertig.
Das heir ist eine Funktion zur Tastenabfrage. Da das Board "nur" einen Eingang (PORT-A, PIN-7) verwendet, werden heir analoge Werte mit einem Spannungsteiler, der schon auf dem Board sitzt, ermittelt und ausgewertet.
Code:
// Tastenabfrage (eine Taste...)
uint8_t RN_Control_Board::Taste(void)
{
uint8_t Tastennummer= 0;
uint16_t ad_wert = 0;
admux = 7; // Input-Pin: Taste ist an PA7 angeschlossen
cbi(ADCSRA, ADFR); // single-Wandlung
cbi(ADMUX, ADLAR); // left adjust ist nicht aktiv
sbi(ADCSRA, ADEN); // ADC enable
sbi(ADCSRA, ADSC); // A/D-Wanldung starten
while (ADCSRA & 64); // auf 0 warten, dann ist Wandlung beendet
ad_wert = ADCW; // Low- und High-Byte in einem Schritt kopieren.
// In ad_wert steht jetzt der 10-Bit-A/D-Wert (0...1023)
if (ad_wert < 1010)
{
if((ad_wert >= 410) && (ad_wert <= 450) { Tastennummer = 1;}
if((ad_wert >= 340) && (ad_wert <= 380) { Tastennummer = 2;}
if((ad_wert >= 265) && (ad_wert <= 305) { Tastennummer = 3;}
if((ad_wert >= 180) && (ad_wert <= 220) { Tastennummer = 4;}
if((ad_wert >= 100) && (ad_wert <= 130) { Tastennummer = 5;}
}
return Tastennummer;
}
Ich hoffe, dass der Code richtig dargestellt wird. Wie macht man das hier denn ?
Also... wenn eine Taste gedrückt wird (eine von 5), dann wird per A/D-Wandler ein Wert ermittelt, der bei jeder Taste ein anderer ist. Als Rückgabewert wird dann die Tastennummer 1 bis 5 ausgegeben. Ist keine Taste gedrückt, dann wird 0 zurückgegeben.
Eventuell ist ja eine schlauere Lösung im Umlauf.
Bis denn... Klaus
Naja.... Ich werde noch andere Listings posten....
Lesezeichen