wno158:
Nicht von alleine - das musst Du schon so programmieren. Das ist aber möglich.
Fang doch erstmal damit an, die Ziffern von Deinem Keyboard einzulesen und auf der seriellen Schnittstelle (Monitor) auszugeben.
Hinweise:
Die verlinkte Tastatur hat keinen Dezimalpunkt.
Du musst Dir überlegen, wann das Ende der Eingabe festgestellt werden soll - vermutlich willst Du ja nicht für glatte 2V immer 2.00 eingeben wollen und eine Monstereingabe à la 3.1426926 ergibt m.E. eher wenig Sinn.
Das am Monitor auszugeben hab ich schon gemacht. Ich hatte ja das Projekt soweit das ich pro Taste eine andere Spannung ausgeben konnte.
Das ist der Code den ich mir zusammen gebastelt habe:
#include <Keypad.h>
int Ausgang = DAC0;
//int DAC0 = 66;
//int DAC1 = 67; vielleicht reicht auch nur ein Ausgang
//int value = analogRead(0); //Sobald das hier aktiv ist funktioniert das Tastenfeld nicht mehr
//Keypad ==================================
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {52, 48, 44, 40}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {36, 32, 28, 24}; //connect to the column pinouts of the keypad
char Taste;
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
//=================================================================================
void setup() {
Serial.begin(9600); //öffne Serielle Kommunikation
analogWriteResolution(12); //da es 12 bits sind muss es angegeben wird -> Standard Wert ist 8bits | Fehlermeldung weil nicht das richtige Board ausgewählt ist!!!
}
void loop() {
//Keypad Pfad =======================================
char Taste = customKeypad.getKey(); //pressedKey entspricht der gedrückten Taste
if (Taste) {
Serial.print("Die Taste ");
Serial.print(Taste);
Serial.println(); //Teile uns am Serial Monitor die gedrückte Taste mit
switch (Taste){ //das Programm soll verschiedene Sachen ausführen je nach dem welche Bedingung (Taste) gedrückt wird
case '1': //Taste 1
//clearSpannung();
analogWrite(Ausgang, 2700);
//analogWrite(DAC1, 3722);
Serial.println("Ausgangswert 4V");
break;
case '2':
// clearSpannung();
analogWrite(Ausgang, 2485); // Spannung beträgt 1,885V
Serial.println("Ausgangswert 3,77V");
break;
case '3':
// clearSpannung();
analogWrite(Ausgang, 2420);
Serial.println("Ausgangswert 3,7V");
break;
case '4':
// clearSpannung();
analogWrite(Ausgang, 2365); //ggf den Wert nochmal anpassen da sonst 2 Ausgänge benötigt werden um die richtige Spannung raus zu geben
Serial.println("Ausgangswert 3,627V");
break;
case '5':
// clearSpannung();
analogWrite(Ausgang, 2284);
Serial.println("Ausgangswert 3,552V");
break;
case '6':
// clearSpannung();
analogWrite(Ausgang, 2272); //ggf den Wert nochmal anpassen da sonst 2 Ausgänge benötigt werden um die richtige Spannung raus zu geben
Serial.println("Ausgangswert 3,475V");
break;
case '7':
// clearSpannung();
analogWrite(Ausgang, 2143);
Serial.println("Ausgangswert 3,402V");
break;
case '8':
// clearSpannung();
analogWrite(Ausgang, 2180); //ggf den Wert nochmal anpassen da sonst 2 Ausgänge benötigt werden um die richtige Spannung raus zu geben
Serial.println("Ausgangswert 3,327V");
break;
case '9':
// clearSpannung();
analogWrite(Ausgang, 2049); //ggf den Wert nochmal anpassen da sonst 2 Ausgänge benötigt werden um die richtige Spannung raus zu geben
Serial.println("Ausgangswert 3,253V");
break;
case '*': //Nr.10
// clearSpannung();
analogWrite(Ausgang, 2085); //ggf den Wert nochmal anpassen da sonst 2 Ausgänge benötigt werden um die richtige Spannung raus zu geben
Serial.println("Ausgangswert 3,177V");
break;
case '0': //Nr.11
// clearSpannung();
analogWrite(Ausgang, 1957); //ggf den Wert nochmal anpassen da sonst 2 Ausgänge benötigt werden um die richtige Spannung raus zu geben
Serial.println("Ausgangswert 3,103V");
break;
case '#': //Nr.12
// clearSpannung();
analogWrite(Ausgang, 2818);
Serial.println("Ausgangswert 3,028V");
break;
case 'A': //Nr.13
// clearSpannung();
analogWrite(Ausgang, 1587); //ggf den Wert nochmal anpassen da sonst 2 Ausgänge benötigt werden um die richtige Spannung raus zu geben
Serial.println("Ausgangswert 2,951V");
break;
case 'B': //Nr.14
// clearSpannung();
analogWrite(Ausgang, 1717); //ggf den Wert nochmal anpassen da sonst 2 Ausgänge benötigt werden um die richtige Spannung raus zu geben
Serial.println("Ausgangswert 2,877V");
break;
case 'C': //Nr.15
// clearSpannung();
analogWrite(Ausgang, 2047);
Serial.println("Ausgangswert 2,2V");
break;
case 'D': //Nr.16
// clearSpannung();
analogWrite(Ausgang, 1861);
Serial.println("Ausgangswert 2V");
break;
}
}
}
void clearSpannung(){
analogWrite(Ausgang, 0);
}
kleine Anmerkung vllt dazu.. ich habe noch vor dazu einen OP dran zu bauen damit ich auch wirklich die Spannung raus bekomme die ich brauche. Deshalb sind die Ausgangswerte nur halb so groß als das was er auf dem Monitor anzeigen soll.
ich weiß nur noch nicht ob das mit der If-Bedingung, Switch/case oder einer ganz anderen Sache programmiert werden soll oder kann