Folgendes Problem: Ich habe das AVR Board LPT. Ich möchte mit einer Variable erkennen, welchen Taster ich gedrückt habe. Leider weiß ich nicht, was dann in der Variable drin steht (also ob Hex oder Binär oder sonst was) um die Variable zu vergleichen. Hatte mir das folgendermaßen gedacht. uint8_t variable; ... variable = PIND; aber irgendwie kriege ich das nicht richtig hin. im prinzip möchte ich nur wissen wie man es hinkriegt, dass die variable erkennt welchen taster ich gedrückt habe. vielen dank schonmal
Deine Grundidee ist schon mal nicht schlecht. Details erfährst du bei http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Tasten_und_Schalter
habe mal den quellcode reingestellt. habe im prinzip noch 3 kleine fehler drin. die fehler habe ich unten angehängt. leider komme ich in der fehlerbehebung nicht weiter. #define F_CPU 3686400 // Taktferquenz des myAVR-Boards #include <avr\io.h> // AVR Register und Konstantendefinitionen #include <stdint.h> #include <util\delay.h> void set_pw(void); void enter_pw(void); void test_pw(void); uint16_t counter=0; char pw_org[8]; char pw_comp[8]; char pw_pressed[8]; bool pw_true=false; bool pw=false; main () { do { if (pw==false) { set_pw(); } enter_pw(); test_pw(); if (pw_true==true) { pw_true=false; // relais auf(); } else { enter_pw(); } } while (true); } void set_pw(void) { uint8_t port_c=0x00; uint16_t counter=0; bool pw=true; for(int i=0;i<7;i++) { pw_org[i]="x"; } do { if ( (PINC & (1<<PINC0)) || (PINC & (1<<PINC1)) ) //alle ärgänzen { port_c=PINC; switch(port_c) { case 1: pw_org[counter]="0"; counter++; break; case 2: pw_org[counter]="1"; counter++; break; case 3: pw_org[counter]="2"; counter++; break; case 4: pw_org[counter]="3"; counter++; break; case 5: pw_org[counter]="4"; counter++; break; case 6: pw_org[counter]="5"; counter++; break; case 7: pw_org[counter]="6"; counter++; break; case 8: pw_org[counter]="7"; counter++; break; case 9: pw_org[counter]="8"; counter++; break; case 10: pw_org[counter]="9"; counter++; break; } } if (counter>7) { _delay_ms(3000);set_pw(); break; } if (PINC & (1<<PINC10)) // STERN-Taste { _delay_ms(3000);set_pw(); break; } }while(PINC & (1<<PINC11)); //RAUTE-Taste if ((pw_org[3]=="x")||(pw_org[0]=="x")) { _delay_ms(3000); set_pw(); } } void enter_pw(void) { uint8_t port_c=0x00; counter=0; for(int i=0;i<7;i++) { pw_pressed[i]="x"; } do { if ((PINC & (1<<PINC0)) || (PINC & (1<<PINC1)) ) //alle ärgänzen { port_c=PINC; switch(port_c) { case 1: pw_pressed[counter]="0"; counter++; break; case 2: pw_pressed[counter]="1"; counter++; break; case 3: pw_pressed[counter]="2"; counter++; break; case 4: pw_pressed[counter]="3"; counter++; break; case 5: pw_pressed[counter]="4"; counter++; break; case 6: pw_pressed[counter]="5"; counter++; break; case 7: pw_pressed[counter]="6"; counter++; break; case 8: pw_pressed[counter]="7"; counter++; break; case 9: pw_pressed[counter]="8"; counter++; break; case 10: pw_pressed[counter]="9"; counter++; break; } } if (counter>7) { _delay_ms(3000);enter_pw(); break; } if (PINC & (1<<PINC10)) // STERN-Taste { _delay_ms(3000);enter_pw(); break; } }while(PINC & (1<<PINC11)); //RAUTE-Taste if ((pw_pressed[3]=="x")||(pw_pressed[0]=="x")) { _delay_ms(3000); enter_pw(); } } void test_pw(void) { int k=1; for (int i=0;i<7;i++) { if (pw_org[i]==pw_pressed[i]) { k++; } } if (k==8) { pw_true=true; //Passwort richtig } } compilieren ... codeschloss.cc In function `void set_pw()': codeschloss.cc:53 53: error: invalid conversion from `const char*' to `char' codeschloss.cc:64 64: error: invalid conversion from `const char*' to `char' codeschloss.cc:65 65: error: invalid conversion from `const char*' to `char' codeschloss.cc:66 66: error: invalid conversion from `const char*' to `char' codeschloss.cc:67 67: error: invalid conversion from `const char*' to `char' codeschloss.cc:68 68: error: invalid conversion from `const char*' to `char' codeschloss.cc:69 69: error: invalid conversion from `const char*' to `char' codeschloss.cc:70 70: error: invalid conversion from `const char*' to `char' codeschloss.cc:71 71: error: invalid conversion from `const char*' to `char' codeschloss.cc:72 72: error: invalid conversion from `const char*' to `char' codeschloss.cc:73 73: error: invalid conversion from `const char*' to `char' codeschloss.cc:81 81: error: `PINC10' was not declared in this scope codeschloss.cc:85 85: error: `PINC11' was not declared in this scope codeschloss.cc:88 88: error: ISO C++ forbids comparison between pointer and integer 88: error: ISO C++ forbids comparison between pointer and integer codeschloss.cc In function `void enter_pw()': codeschloss.cc:105 105: error: invalid conversion from `const char*' to `char' codeschloss.cc:116 116: error: invalid conversion from `const char*' to `char' codeschloss.cc:117 117: error: invalid conversion from `const char*' to `char' codeschloss.cc:118 118: error: invalid conversion from `const char*' to `char' codeschloss.cc:119 119: error: invalid conversion from `const char*' to `char' codeschloss.cc:120 120: error: invalid conversion from `const char*' to `char' codeschloss.cc:121 121: error: invalid conversion from `const char*' to `char' codeschloss.cc:122 122: error: invalid conversion from `const char*' to `char' codeschloss.cc:123 123: error: invalid conversion from `const char*' to `char' codeschloss.cc:124 124: error: invalid conversion from `const char*' to `char' codeschloss.cc:125 125: error: invalid conversion from `const char*' to `char' codeschloss.cc:133 133: error: `PINC10' was not declared in this scope codeschloss.cc:137 137: error: `PINC11' was not declared in this scope codeschloss.cc:139 139: error: ISO C++ forbids comparison between pointer and integer 139: error: ISO C++ forbids comparison between pointer and integer *' to `char' codeschloss.cc:117 117: error: invalid conversion from `const char*' to `char' codeschloss.cc:118 118: error: invalid conversion from `const char*' to `char' codeschloss.cc:119 119: error: invalid conversion from `const char*' to `char' codeschloss.cc:120 120: error: invalid conversion from `const char*' to `char' codeschloss.cc:121 121: error: invalid conversion from `const char*' to `char' codeschloss.cc:122 122: error: invalid conversion from `const char*' to `char' codeschloss.cc:123 123: error: invalid conversion from `const char*' to `char' codeschloss.cc:124 124: error: invalid conversion from `const char*' to `char' codeschloss.cc:125 125: err
codeschloss.cc:133 133: error: `PINC10' was not declared in this scope codeschloss.cc:137 137: error: `PINC11' was not declared in this scope den bitte nicht beachten. das progge ich noch um. da weiß ich warum der kommt.
Erstens mal: Werde Dir mal klar über den Unterschied zwischen z.B. "1" und '1'... "1" sind ZWEI ASCII-Zeichen, und die passen erstens nicht in eine Array-Stelle und zweitens kann man in C keine Vergleiche mit mehreren Zeichen gleichzeitig durchführen. Zweitens: Schau Dir in der libc-Doku die Beschreibung der _delay_XX-Funktionen an. _delay_ms(3000) geht mit keinem der üblichen CPU-Takte (nur mit Takten unter 87 kHz, und das dürfte bei Dir nicht der Fall sein).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.