Hallo,
mein Problem ist, dass meine Matrix-Tastatur nur ohne die Register geht. Sobald ich das ADCSRA einfüge funktioniert sie nicht mehr und das LC-Display zeigt dementsprechend nichts mehr an. Da komische ist, es geht nur nicht wenn ich das adcsra-Register einfüge.
Hier ist der Code für das Hauptprogramm(Register sind auskommentiert)
#include <LiquidCrystal.h>
#include <avr/io.h>
// Pin Nummern der Tastatur
int s1=22; // Spalten Ausgang
int s2=24;
int s3=26;
int s4=28;
int r1=30; // Reihen Eingang
int r2=32;
int r3=34;
int r4=36;
// Deklaration der Variablen:
int k = 0; // Laufvariable fürs Eingabefeld
unsigned char feld[100]; // Zum Speichern der Eingaben
int screen = 1; // unterschiedliche Bildschirme und Eingaben verbinden
int wert;
char x[100];
// LCD Setup: rs e d4 d5 d6 d7 - Digital Pinnummern Arduino
// rw auf GND
LiquidCrystal lcd(12, 10, 5, 4, 3, 2);
// the setup routine runs once when you press reset:
void setup() {
lcd.begin(16, 2);
// Setzen der Tastenfeldmatrix:
pinMode(r1, INPUT); digitalWrite(r1, HIGH); //PIN 30 auf Eingang, Pullup aktiviert, Reihe 1
pinMode(r2, INPUT); digitalWrite(r2, HIGH); //PIN 32 auf Eingang, Pullup aktiviert, Reihe 2
pinMode(r3, INPUT); digitalWrite(r3, HIGH); //PIN 34 auf Eingang, Pullup aktiviert, Reihe 3
pinMode(r4, INPUT); digitalWrite(r4, HIGH); //PIN 36 auf Eingang, Pullup aktiviert, Reihe 4
pinMode(s1, OUTPUT); digitalWrite(s2, HIGH); //PIN 22 auf Ausgang, Spalte 1
pinMode(s2, OUTPUT); digitalWrite(s2, HIGH); //PIN 24 auf Ausgang, Spalte 2
pinMode(s3, OUTPUT); digitalWrite(s3, HIGH); //PIN 26 auf Ausgang, Spalte 3
pinMode(s4, OUTPUT); digitalWrite(s4, HIGH); //PIN 28 auf Ausgang, Spalte 4
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Menue: ");
lcd.blink();
k=0;
screen=1;
// ADCSRA=0;
// ADMUX=0;
// ADCSRB=0; // ADTS auf Null free running mit ADate
//
// ADMUX = B01100000;
// ADCSRA = B11101011;
}
// the loop routine runs over and over again forever:
void loop() {
keyboard_read(); // von der Matrix-Tastatur einlesen
// verwendet s1 bis s4 und r1 bis r4
// Auswertung - beispielsweise
if ((feld[k] == 'F') || (feld[k] == 'C') || (feld[k] == 'E')|| (feld[k] == 'A'))
// E bedeutet "ENTER"; F bedeutet "Start"; C bedeutet in eine zweite Eingabeebene bzw. Fenster wechseln; A bedeutet eum Menü zurück
{
if (screen == 1 && k == 1)
{ if (feld[1] == 'F') {lcd.clear(); lcd.setCursor(0,1); lcd.print("Start: ");}
else if (feld[1] == 'C') { screen=2;lcd.clear(); lcd.setCursor(0,1); lcd.print("2. Schirm: ");}
else if (feld[1] == 'A') { screen=1; lcd.clear(); lcd.setCursor(0,1); lcd.print("Menue: ");}
else { screen=1; lcd.clear(); lcd.setCursor(0,1); lcd.print("Menue: ");}
k = 0;
}
else if (screen == 1 && k == 3)
{wert= feld[1]*10+feld[2]; itoa(wert,x,10); lcd.clear(); lcd.setCursor(0,1);lcd.print(x);
k = 0;
}
else if (screen == 1 && k == 4)
{wert= feld[1]*100+feld[2]*10+feld[3]; itoa(wert,x,10); lcd.clear(); lcd.setCursor(0,1);lcd.print(x);
k = 0;
}
else if (screen == 2 && k == 1)
{ if (feld[1] == 'A') { screen=1; lcd.clear(); lcd.setCursor(0,1); lcd.print("Menue: ");}
else { screen=1; lcd.clear(); lcd.setCursor(0,1); lcd.print("Menue: ");}
k=0;
}
else
{ lcd.clear(); lcd.setCursor(0,1);
lcd.print("falsche Eingabe");
k=0; // unerlaubte Eingabe
}
// usw...
}
}
Hier ist der Code für Unterprogramm keyboard_read()
void keyboard_read()
{
// Tastatur Abfrage - EINGABEN INS FELD
digitalWrite(s1, LOW); //Spalte 1 wird auf LOW gesetzt
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
digitalWrite(s4, HIGH);
if(digitalRead(r1) == LOW){lcd.print("1"); delay(200);k++;feld[k]=1;} //Abfragen von Reihe 1
if(digitalRead(r2) == LOW){lcd.print("4"); delay(200);k++;feld[k]=4;} //Abfragen von Reihe 2
if(digitalRead(r3) == LOW){lcd.print("7"); delay(200);k++;feld[k]=7;} //Abfragen von Reihe 3
if(digitalRead(r4) == LOW){lcd.print("A"); delay(200);k++;feld[k]='A';} //Abfragen von Reihe 4
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW); //Spalte 2 wird auf LOW gesetzt
digitalWrite(s3, HIGH);
digitalWrite(s4, HIGH);
if(digitalRead(r1) == LOW){lcd.print("2"); delay(200);k++;feld[k]=2;} //Abfragen von Reihe 1
if(digitalRead(r2) == LOW){lcd.print("5"); delay(200);k++;feld[k]=5;} //Abfragen von Reihe 2
if(digitalRead(r3) == LOW){lcd.print("8"); delay(200);k++;feld[k]=8;} //Abfragen von Reihe 3
if(digitalRead(r4) == LOW){lcd.print("0"); delay(200);k++;feld[k]=0;} //Abfragen von Reihe 4
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW); //Spalte 3 wird auf LOW gesetzt
digitalWrite(s4, HIGH);
if(digitalRead(r1) == LOW){lcd.print("3"); delay(200);k++;feld[k]=3;} //Abfragen von Reihe 1
if(digitalRead(r2) == LOW){lcd.print("6"); delay(200);k++;feld[k]=6;} //Abfragen von Reihe 2
if(digitalRead(r3) == LOW){lcd.print("9"); delay(200);k++;feld[k]=9;} //Abfragen von Reihe 3
if(digitalRead(r4) == LOW){lcd.print("B"); delay(200);k++;feld[k]='B';} //Abfragen von Reihe 4
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
digitalWrite(s4, LOW); //Spalte 4 wird auf LOW gesetzt
if(digitalRead(r1) == LOW){lcd.print("F"); delay(200);k++;feld[k]='F';} //Abfragen von Reihe 1
if(digitalRead(r2) == LOW){lcd.print("E"); delay(200);k++;feld[k]='E';} //Abfragen von Reihe 2
if(digitalRead(r3) == LOW){lcd.print("D"); delay(200);k++;feld[k]='D';} //Abfragen von Reihe 3
if(digitalRead(r4) == LOW){lcd.print("C"); delay(200);k++;feld[k]='C';} //Abfragen von Reihe 4
}
Weiße jemand warum es nicht geht?
Danke schon mal im Vorraus.