Hallo, (Hoff die Aufgabenstellung und mein Problem sind jetzt klarer beschrieben)
Aufgabe:
Zwei Binär-Zahlen aus dem Zweierkomplement von -8 bis 7 sollen addiert und auch subtrahiert werden können. Außerdem als BinärLED's mit MSB(most significant bit) angezeigt werden. Es soll außerdem über einen Adder und einen XOR mithilfe eines ExtraBits die Ampel über Summen LED's des Addierers angezeigt werden. Adder für Addition. Xor für Subtraktion. Mein bisheriger Code kann die Zeichen lesen die ich eingebe und ausgeben.
Ich konnte zusammen mit jemandem die paar Zeilen für die Rechenzeichenerkennung schreiben. Das speichern der Eingaben und überführen an die Rechenfunktion add und subtract sind jetzt mein Problem. Hab eine millis() genutzt um die 1. Eingabe zu speichern. Problem ist dann allerdings der -- Fall. Der soll explizit funktionieren.
Beim Drucken wird bei der 2. Zahl ein ? hinter die Zahl geschrieben. Gleichzeitig mit der Zahl. Woran liegts?
.
Das hier ist der Hauptsketch.
static int A = 0;
static int B = 0;
static int C = 0;
static int lastDecimal = -100;
static int lastOperator = -100;
unsigned long startMillis;
unsigned long currentMillis;
const unsigned long zeitmessung_seit_letzter_UEbergabe = 250;
void setup() {
Serial.begin(9600);
startMillis = millis();
}
void loop() {
lastDecimal = 0;
currentMillis=millis();
delay(500);
//SERIELLE EINGABE AN ARITHMETIK ANPASSEN
if(Serial.available()>0){
for(int i=0; i<2; i++){
A = Serial.read();
B = A - '0';
C = constrain(B, -8, 7);
if (0 <= B && B <= 7){
Serial.print(C);
if(currentMillis - startMillis >= zeitmessung_seit_letzter_UEbergabe){
lastDecimal != C;} // Erste Zahl nach 1s, 2. Zahl nach 3s und löscht die 1.
else{lastDecimal = C;}} //Option: Zeitvariable: "Ist sie in den letzten 2s belegt worden?" == Bedingung
else{
lastOperator = A; // + wird gespeichert und gedruckt
Serial.print((char)A);
}
}
/*
if (lastOperator = '-') {
D = subtract(lastDecimal, C);
Serial.print(D);}
else {
if(lastOperator = '+') {
D = add(lastDecimal, C);
Serial.print(D);}
*/
delay(1000);
}
}
int add (int a, int b) {
return (a+b);}
int subtract (int a, int b) {
return a-b;}
Addierer - 74LS283.pdf (50.3 KB)
XOR - 74LS86.pdf (48 KB)
