/* Globales char- Feld von 128 Feldelementen wird überprüft. Die Variable ind ist ebenfalls global. */ void analyze() //Analysefunktion { int ind = 0; //Index zur Bestimmung des richtigen Feldelements int i, l; int count = 0; unsigned char addressByte[8]; unsigned char simDataByte[8]; unsigned char adDataByte[8]; //Zählwert für PreAmble- Bits unsigned char preReady = 0; //PreAmble herausgefiltert unsigned char addressReady = 0; //Adresse herausgefiltert unsigned char advancedDataReady = 0; //Erweitertes Datenbyte herausgefiltert unsigned char simpleDataReady = 0; //Einfaches Datenbyte herausgefiltert unsigned char puffer[8]; //Hilfsfeld für String-To-Int- Konvertierung unsigned char puffer1[8]; long int address, adData, simData; //Variablen für Int- Werte der obigen Bytes address = adData = simData = 0; for(i = 0; i<127; i++) //Bestimmung der PreAmble { if(signal[i] == 1) { count++; } else if(signal[i] == 0) { count = 0; } if(count == 23) //Per Oszilloskop wurde ermittelt, dass es sich { //um 24 1- Bits handelt preReady = 1; i = 127; } ind++; if(ind>=(128-18)) { preReady = 0; } } if(preReady == 1) { ind = ind + 2; for(i = ind, l = 0; i<(ind+8), l < 8; i++, l++) //Herausfiltern der Adresse { if(signal[i] == 0) { addressByte[l] = '0'; } else { addressByte[l] = '1'; } ind++; } printString("Adresse", 0,2); //Ausgeben des Strings "Adresse" address = strtol(addressByte, puffer, 2); //Konvertierung String in Int if(address == 3) //Fixe Adresse, da nur ein Zug { ausgabeLCDUART(address, 0, 3); //Ausgabe auf LCD und UART } addressReady = 1; } if(addressReady == 1) { for(i = ind, l = 0; i<(ind+8), l<8; i++, l++) //Herausfiltern des erweiterten Datenbytes { if(signal[i] == 0) { adDataByte[l] = '0'; } else { adDataByte[l] = '1'; } ind++; } printString("Adv. Data", 0,4); printString(advancedDataByte, 0, 1); //Ausgabe des String "Adv- Data" adData = strtol(adDataByte, puffer, 2); if(adData == 31) //Per Oszilloskop bestimmtes { //erweitertes Datenbyte ausgabeLCDUART(adData, 0,5); } advancedDataReady = 1; } if(advancedDataReady == 1) { for(i = ind, l = 0; i<(ind+8), l<8; i++, l++) //Herausfiltern des erweiterten Datenbytes { if(signal[i] == 0) { simDataByte[l] = '0'; } else { simDataByte[l] = '1'; } ind++; } printString("Sim. Data", 0,6); //Ausgabe des String "Adv- Data" simData = strtol(simDataByte, puffer, 2); if(simData < 192 && simData > 158) //Per Oszilloskop bestimmtes { //erweitertes Datenbyte ausgabeLCDUART(simData, 0,7); } } for(i = 0; i<128; i++) //Löschen der Felder der obigen Bytes { signal[i] = 0; } for(i = 0; i<8; i++) { addressByte[i] = adDataByte[i] = simDataByte[i] = 0; } } void ausgabeLCDUART(long int wert, int x, int y) { unsigned char puffer4[8]; itoa(wert, puffer4, 10); printString(puffer4, x,y); sendString(puffer4); sendString(" "); }