Binärarithmetik mit LEDs über Serial

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)

To-bias:

 }

}

Dein Code kompiliert nicht.
Deine eingefügten Grafiken sind atachment, die keine Grafik sind.
Nimm das bitte wieder raus.
Dann formatiere in der IDE Deinen Code - wenn ich das mache, komme ich auf die gleiche Zeilenzahl. Aber ich formatiere gaanz anders.

Und ja, ich denke Dein Problem erkannt zu haben, aber auch für Lernende ist so ein Produkt sicher hilfreich. Dazu muss aber die Ausgangslage klar sein.

Hab die 2 Klammern angepasst. Kompiliert jetzt wieder. (Und die Beschreibung wie auch meine Kommentare jetzt angepasst um das ganze weniger verwirrend zu gestalten)
Der Part des C0 Adder-Toggling muss also ausgebaut und angepasst werden:

//ADDER C0 TOGGLING
 

   if(B == 6||B == 4||B == 2||B == 1||B == 0||B == 5 || B == 3||B == 7||B == -1||B == -2 ||B == -3 ||B == -4|| B == -5 || B == -6||B == -7||B == -8){
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
    delay(2000);
   }

Falls immer noch Probleme vorhanden sind, bitte die Aufgabenstellung verständlich formulieren.

Ich dachte schon, ich wäre der Einzige, der es nicht versteht.

Was sollen die Logikgatter an den Ausgaben? Das sollte doch der MC berechnen oder habe ich da schon wieder was nicht verstanden?

Gruß Tommy

Vermutlich soll irgendwann/irgendwie auch mal eine Subtraktion ausgeführt/angezeigt werden, und dazu die XOR zum Invertieren des Subtrahenden, und dann auch das Problem mit dem Carry/Borrow. So viel kann ich der Schaltung entnehmen. Da wären schon 1-2 LED mehr hilfreich, die anzeigen ob die Zahlen addiert oder subtrahiert werden sollen.

Zur Kontrolle des Codes könnte die Ausgabe des Addierers wieder eingelesen und mit dem berechneten Bitmuster verglichen werden.

To-bias:
Hab die 2 Klammern angepasst. Kompiliert jetzt wieder. Ob der ausgebaute Code noch ganz funktioniert kann ich nicht sagen. Der hinzugefügte Part ist der Baustein

den ich mal nur mit STRG-T bearbeitet habe.

if (Serial.read() == mychar)
{
  Serial.read();
  if (Serial.read() == mychar)
  {
    Serial.read();
    Serial.read();
    if (isAscii (Serial.read()))
    {
      int B = Serial.parseInt();

um zu verstehen, was Du willst.
Und nein, das verstehe ich nicht.
Auch, weil da nicht mal irgendwas kommentiert ist, was Du erwartest.

Na dann - ich bin hier raus.

Den Thread bitte löschen.

To-bias:
Den Thread bitte löschen.

Warum?

Wenn überhaupt könnte es nur unser Moderator Uwe.

To-bias:
Den Thread bitte löschen.

Ja warum?
Grüße Uwe