Ich habe ein menü,
in einem Menüpunkt kann der Anwender wählen, welche Pins geprüft werden
sollen.
In einem anderen menü, wird dann Ausgegeben, ob an den Gewählten Pins
ein High oder Low - Signal anliegt.
Ich hatte es folgendermaßen geplant:
Globale Variable:
//Pins übers menü setzen
1 | unsigned char set_getDatapins_input(unsigned char cPinnumber)
|
2 | {
|
3 | // Processorpins PINE7 PINE6 PINE5 PINE4 PIND0 PIND1
|
4 | // Boxpins PIN6 PIN5 PIN4 PIN2 PIN7 PIN8
|
5 | // brief: PIN1 and PIN3 not handled in this function --> only Output
|
6 |
|
7 | if (cPinnumber > 1 )//&& cPinnumber != 3)
|
8 | {
|
9 | if (cPinnumber < 7)
|
10 | {
|
11 | if (cPinnumber == 2)
|
12 | inValue |= ( 1 << (cPinnumber + 2) );
|
13 | else
|
14 | inValue |= ( 1 << (cPinnumber + 1) );
|
15 |
|
16 | return inValue;
|
17 | }
|
18 | else
|
19 | {
|
20 | inValue |= ( 1 << (cPinnumber - 7) );
|
21 |
|
22 | return inValue;
|
23 | }
|
24 | }
|
25 | else
|
26 | {
|
27 | return inValue; //Previous value to read
|
28 | }
|
29 | }
|
//Pins übers menü rücksetzen
1 | void reset_getDatapins_input(unsigned char cPinnumber)
|
2 | {
|
3 | // Processorpins PINE7 PINE6 PINE5 PINE4 PIND0 PIND1
|
4 | // Boxpins PIN6 PIN5 PIN4 PIN2 PIN7 PIN8
|
5 | // brief: PIN1 and PIN3 not handled in this function --> only Output
|
6 |
|
7 | if (cPinnumber > 1 )//&& cPinnumber != 3)
|
8 | {
|
9 | if (cPinnumber < 7)
|
10 | {
|
11 | if (cPinnumber == 2)
|
12 | inValue &= ~( 1 << (cPinnumber + 2) );
|
13 | else
|
14 | inValue &= ~( 1 << (cPinnumber + 1) );
|
15 | }
|
16 | else
|
17 | {
|
18 | inValue &= ~( 1 << (cPinnumber - 7) );
|
19 | }
|
20 | }
|
21 | }
|
//Pins abfragen
1 | unsigned char get_datapins_hardware(void)
|
2 | {
|
3 | if (inValue > 2 )
|
4 | return !( (PINE & (inValue) );
|
5 |
|
6 | else
|
7 | return !( PIND & inValue );
|
8 | }
|
so ist mein Aufruf:
//menü Setze zu Prüfende Pins
set_getDatapins_input(2);
set_getDatapins_input(5);
Wenn ich NUR set_getDatapins_input(2); oder NUR
set_getDatapins_input(5);
schreibe gehts einwandfrei.
//menü Prüfe Pinstatus --> Wird alle 10ms erneut aufgerufen.
get_datapins_hardware();
Gruß