#define analogPin_H 600 int OUTPUT0 = 52; // Datapin0 int OUTPUT1 = 50; // Datapin1 int OUTPUT2 = 48; // Datapin2 int OUTPUT3 = 46; // Datapin3 int controlPin1 = 44; // Clock Signal PC-Register int controlPin2 = 42; // Reset PC-Register int controlPin3 = 40; // Multiplexer DataIN/InkrementerIn int controlPin4 = 38; // Multiplexer BusIN / PC IN int analogPin0 = A12; // 3,3 Volt Integer-Wert größer 650!!! int analogPin1 = A13; // 3,3 Volt Integer-Wert größer 650!!! int analogPin2 = A14; // 3,3 Volt Integer-Wert größer 650!!! int analogPin3 = A15; // 3,3 Volt Integer-Wert größer 650!!! int val0 = 0; // Variable, die den gelesenen Wert speichert int val1 = 0; // Variable, die den gelesenen Wert speichert int val2 = 0; // Variable, die den gelesenen Wert speichert int val3 = 0; // Variable, die den gelesenen Wert speichert char on = 0x01; char SerialIncoming = 0x00; static int counter = 0; void PCReg_clock() { digitalWrite(controlPin1, LOW); delay(75); digitalWrite(controlPin1, HIGH); delay(275); } void PCReg_reset() { digitalWrite(controlPin2, LOW); delay(75); digitalWrite(controlPin2, HIGH); delay(275); } void PCReg_set(char byte) { PCReg_reset(); digitalWrite(controlPin4, LOW); digitalWrite(controlPin3, LOW); setBus(byte, 4, 0); PCReg_clock(); digitalWrite(controlPin4, HIGH); digitalWrite(controlPin3, HIGH); } void PCReg_increment() { digitalWrite(controlPin3, HIGH); digitalWrite(controlPin4, LOW); delay(11); PCReg_clock(); } int PCReg_count(int counter) { for(int i=1;i <= counter; i++) { PCReg_increment(); } } void setBus(char Input, int bus_size, char debug) { for(int i=0;i <= bus_size;i++) { int t = bitRead(Input, i); switch(i) { case 0: if(t == 1) digitalWrite(OUTPUT0, LOW); else if (t == 0) digitalWrite(OUTPUT0, HIGH); break; case 1: if(t == 1) digitalWrite(OUTPUT1, LOW); else if (t == 0) digitalWrite(OUTPUT1, HIGH); break; case 2: if(t == 1) digitalWrite(OUTPUT2, LOW); else if (t == 0) digitalWrite(OUTPUT2, HIGH); break; case 3: if(t == 1) digitalWrite(OUTPUT3, LOW); else if (t == 0) digitalWrite(OUTPUT3, HIGH); break; } } } void readBus(int bus_size, char debug) { unsigned char byte = 0; for(int i=0;i <= bus_size;i++) { switch(i) { case 0: val0 = analogRead(analogPin0); // Pin einlesen if(debug == 0x01) Serial.println(val0); if(val0 > analogPin_H) byte += 0x01; break; case 1: val1 = analogRead(analogPin1);// Pin einlesen if(debug == 0x01) Serial.println(val1); if(val1 > analogPin_H) byte += 0x02; break; case 2: val2 = analogRead(analogPin2); // Pin einlesen if(debug == 0x01) Serial.println(val2); if(val2 > analogPin_H) byte += 0x04; break; case 3: val3 = analogRead(analogPin3); // Pin einlesen if(debug == 0x01) Serial.println(val3); if(val3 > analogPin_H) byte += 0x08; break; } } Serial.print("Ausgabe: 0x0"); Serial.println(byte, HEX); } void resetBus() { digitalWrite(OUTPUT0, HIGH); digitalWrite(OUTPUT1, HIGH); digitalWrite(OUTPUT2, HIGH); digitalWrite(OUTPUT3, HIGH); } char PCReg_readInput() { } void setup() { pinMode(OUTPUT0, OUTPUT); pinMode(OUTPUT1, OUTPUT); pinMode(OUTPUT2, OUTPUT); pinMode(OUTPUT3, OUTPUT); pinMode(analogPin0, INPUT); pinMode(controlPin1, OUTPUT); pinMode(controlPin2, OUTPUT); pinMode(controlPin3, OUTPUT); pinMode(controlPin4, OUTPUT); digitalWrite(controlPin1, HIGH); digitalWrite(controlPin2, HIGH); digitalWrite(controlPin3, HIGH); digitalWrite(controlPin4, HIGH); digitalWrite(OUTPUT0, HIGH); digitalWrite(OUTPUT1, HIGH); digitalWrite(OUTPUT2, HIGH); digitalWrite(OUTPUT3, HIGH); Serial.begin(9600); } void loop() { /* readBus(4,0); PCReg_set(0x0F); delay(200); readBus(4,0); PCReg_set(0x0E); delay(200); readBus(4,0); PCReg_set(0x0D); delay(200); readBus(4,0); PCReg_set(0x0C); delay(200); readBus(4,0); PCReg_set(0xB); delay(200); readBus(4,0); PCReg_set(0x0A); delay(200); readBus(4,0); PCReg_set(0x09); delay(200); readBus(4,0); PCReg_set(0x08); delay(200); readBus(4,0); PCReg_set(0x07); delay(200); readBus(4,0); PCReg_set(0x06); delay(200); readBus(4,0); PCReg_set(0x05); delay(200); readBus(4,0); PCReg_set(0x04); delay(200); readBus(4,0); PCReg_set(0x03); delay(200); readBus(4,0); PCReg_set(0x02); delay(200); readBus(4,0); PCReg_set(0x01); delay(200); readBus(4,0); PCReg_set(0x00); delay(200); readBus(4,0); //PCReg_set(0x02); */ /* if(counter <= 2) { PCReg_reset(); for(int i=0; i <= 14;i++) { PCReg_increment(); readBus(4,0); } counter++; Serial.println("Zählvorgang abgeschlossen!"); Serial.print("Durchgangnr.: "); Serial.println(counter, DEC); } else if(counter == 2) { Serial.println("Setze PC zurück!"); PCReg_reset(); counter++; } else { Serial.println("Programm abgeschlossen!"); delay(1000);} */ if (Serial.available() > 0) { // Lies das eingehende Byte: //SerialIncoming = Serial.read(); String buffer = Serial.readString(); // Ausgeben: Serial.print("I received: "); Serial.println(buffer); if(buffer.compareTo("PC_inc\n") == 0) { Serial.println("Starte Programm!"); PCReg_increment(); } else if(buffer.compareTo("PC_reset\n") == 0) { PCReg_reset(); Serial.println("Befehl ausgeführt"); } else if(buffer.compareTo("readBus\n") == 0) { readBus(4,0); Serial.println("Befehl ausgeführt"); } else if(buffer.compareTo("PC_countto\n") == 0) { PCReg_reset(); PCReg_count(8); Serial.println("Befehl ausgeführt"); } else if(buffer.compareTo("PC_countdown\n") == 0) { PCReg_set(0x0F); delay(200); readBus(4,0); PCReg_set(0x0E); delay(200); readBus(4,0); PCReg_set(0x0D); delay(200); readBus(4,0); PCReg_set(0x0C); delay(200); readBus(4,0); PCReg_set(0xB); delay(200); readBus(4,0); PCReg_set(0x0A); delay(200); readBus(4,0); PCReg_set(0x09); delay(200); readBus(4,0); PCReg_set(0x08); delay(200); readBus(4,0); PCReg_set(0x07); delay(200); readBus(4,0); PCReg_set(0x06); delay(200); readBus(4,0); PCReg_set(0x05); delay(200); readBus(4,0); PCReg_set(0x04); delay(200); readBus(4,0); PCReg_set(0x03); delay(200); readBus(4,0); PCReg_set(0x02); delay(200); readBus(4,0); PCReg_set(0x01); delay(200); readBus(4,0); PCReg_set(0x00); delay(200); readBus(4,0); } else { Serial.println("Unbekannter Befehl!"); } } }