Arduino code with Neumann + .py to write from COM
commit
268c4c5d87
|
@ -0,0 +1,60 @@
|
|||
const int adcPin = A0; // ADC-Pin
|
||||
const int serialBaudRate = 9600; // Baudrate des seriellen Monitors
|
||||
const int toggleDelay = 0.5; // Verzögerung zwischen dem Umschalten der Bits, 1 ms evtl ausreichend -> testen!
|
||||
|
||||
void setup() {
|
||||
Serial.begin(serialBaudRate); // Starten des seriellen Monitors
|
||||
analogReadResolution(12);
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
uint32_t buffer[8] = {0}; // Initialisierung des Puffer-Arrays mit Nullen
|
||||
uint8_t bitCount = 0; // Anzahl der erzeugten Bits
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
uint32_t randomValue = 0; // Initialisierung der zufälligen Zahl
|
||||
|
||||
while (bitCount < 32) {
|
||||
uint16_t adcValue = analogRead(adcPin); // Lesen des ADC-Werts
|
||||
uint32_t newBit = adcValue & 0x01; // Extrahieren des LSB aus dem ADC-Wert
|
||||
randomValue = (randomValue << 1) | newBit; // Hinzufügen des neuen Bits an das LSB
|
||||
bitCount++; // Inkrementierung der Anzahl der erzeugten Bits
|
||||
delay(toggleDelay); // Verzögerung
|
||||
}
|
||||
|
||||
buffer[i] = randomValue; // Speichern des zufälligen Werts im Puffer-Array
|
||||
bitCount = 0; // Zurücksetzen der Anzahl der erzeugten Bits
|
||||
}
|
||||
|
||||
// Serial.print("Zahl: ");
|
||||
for (int i = 0; i < 8; i++) {
|
||||
Serial.print(vonNeumannAlgorithm(formatBinary(buffer[i]))); // Ausgabe der erzeugten 32-Bit-Werte im binären Format
|
||||
}
|
||||
// Serial.println(); // Neue Zeile zur Trennung von anderen Ausgaben
|
||||
}
|
||||
|
||||
String formatBinary(uint32_t number) {
|
||||
String binaryString = String(number, BIN); // aendern zwischen HEX und BIN moeglich, naechste Zeile mit aendern
|
||||
while (binaryString.length() < 32) { // bei HEX 8, fuer BIN 32
|
||||
binaryString = "0" + binaryString;
|
||||
}
|
||||
return binaryString;
|
||||
}
|
||||
|
||||
String vonNeumannAlgorithm(String binaryString) {
|
||||
String generatedString = ""; // erzeugter String
|
||||
int lastIndex = binaryString.length() - 1; // Index des letzten Bits im String
|
||||
|
||||
// Durchlaufen der Bits paarweise
|
||||
for (int i = 0; i < lastIndex; i += 2) {
|
||||
if (binaryString.charAt(i) == '0' && binaryString.charAt(i+1) == '1') {
|
||||
generatedString += '0';
|
||||
} else if (binaryString.charAt(i) == '1' && binaryString.charAt(i+1) == '0') {
|
||||
generatedString += '1';
|
||||
}
|
||||
// wenn beide Bits gleich sind, werden sie verworfen
|
||||
}
|
||||
|
||||
return generatedString; // Rückgabe des erzeugten Strings
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
import os
|
||||
import serial
|
||||
|
||||
ser = serial.Serial('COM3', 9600) # Hier musst du den richtigen Port und die richtige Baudrate einstellen
|
||||
filename = 'binaryDataTestPython.bin'
|
||||
|
||||
with open(filename, 'wb') as file:
|
||||
while os.path.getsize(filename) < 6000000: # prüfen, ob die Größe der Datei kleiner als 1 Kilobyte ist
|
||||
if ser.in_waiting > 0:
|
||||
data = ser.read(ser.in_waiting) # Lesen Sie alle verfügbaren Bytes aus der seriellen Verbindung
|
||||
print(data)
|
||||
file.write(data)
|
||||
file.flush() # Flushe die Datei, um die Daten zu schreiben
|
Loading…
Reference in New Issue