/* * Pruefcomputer V1_5_2.cpp * * Created: 12.09.2016 08:48:15 * Author : Doege/ Theilken */ #define F_CPU 16000000UL #include #include #include #include #include "definitionen.h" // Vergabe vom Namensraum using namespace std; uint8_t zustand; #define BAUDRATE 9600 #define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1) /*Deklaration der genutzten Funktionen*/ void USART_init(void); void USART_Transmit(unsigned char data ); void data_send (char str[]); void Ausgang_high(int Pin); void Ausgang_low(int Pin); void Name(char Name_auswertung_array [],char uart_get_array []); void loesch(int kreuztest_array[],int verbidung_array[],int ergebnis_messung_array[]); void Verbindungstest(int Pin_Anzahl,int verbidung_array []); void Kreuztest (int Pin_Anzahl, int kreuztest_array[]); void Objekt_Schalter_AUS (int kreuztest_array[], int verbidung_array[],int ergebnis_messung_array[]); void Objekt_Schalter_AN (int kreuztest_array[], int verbidung_array[],int ergebnis_messung_array[]); uint8_t uart_get(void); void Leitung_kodierung(int Leitung_kodierung_array[],char uart_get_array[],int Leitung_array[][28]); /*******************************Beginn Hauptprogramm*******************************/ int main(void) { USART_init(); // Aufruf der Initialisierungsfunktion für die USART-Schnittstelle // Eingänge definieren und Pullups einschalten DDRB &= ~((1< (UART Baud Rate Register) hier wird die Datenübertragungsgeschwindigkeit festgelegt. UCSRnB => (UART Control and Status Register B) hier wird die Art der Verwendung festgelegt. UCSRnC => (UART Control and Status Register C) hier wird der Aufbau des Signals festgelegt.*/ UBRR1H = (uint8_t)(BAUD_PRESCALLER>>8); UBRR1L = (uint8_t)(BAUD_PRESCALLER); UCSR1B = (1< BIT Ergebnis if (Input_PIN_0(zustand) == 0 ) verbidung_array[0]=1; if (Input_PIN_1(zustand) == 0 ) verbidung_array[1]=1; if (Input_PIN_2(zustand) == 0 ) verbidung_array[2]=1; if (Input_PIN_3(zustand) == 0 ) verbidung_array[3]=1; if (Input_PIN_4(zustand) == 0 ) verbidung_array[4]=1; if (Input_PIN_5(zustand) == 0 ) verbidung_array[5]=1; if (Input_PIN_6(zustand) == 0 ) verbidung_array[6]=1; if (Input_PIN_7(zustand) == 0 ) verbidung_array[7]=1; if (Input_PIN_8(zustand) == 0 ) verbidung_array[8]=1; if (Input_PIN_9(zustand) == 0 ) verbidung_array[9]=1; if (Input_PIN_10(zustand) == 0 ) verbidung_array[10]=1; if (Input_PIN_11(zustand) == 0 ) verbidung_array[11]=1; if (Input_PIN_12(zustand) == 0 ) verbidung_array[12]=1; if (Input_PIN_13(zustand) == 0 ) verbidung_array[13]=1; if (Input_PIN_14(zustand) == 0 ) verbidung_array[14]=1; if (Input_PIN_15(zustand) == 0 ) verbidung_array[15]=1; if (Input_PIN_16(zustand) == 0 ) verbidung_array[16]=1; if (Input_PIN_17(zustand) == 0 ) verbidung_array[17]=1; if (Input_PIN_18(zustand) == 0 ) verbidung_array[18]=1; if (Input_PIN_19(zustand) == 0 ) verbidung_array[19]=1; if (Input_PIN_20(zustand) == 0 ) verbidung_array[20]=1; if (Input_PIN_21(zustand) == 0 ) verbidung_array[21]=1; if (Input_PIN_22(zustand) == 0 ) verbidung_array[22]=1; if (Input_PIN_23(zustand) == 0 ) verbidung_array[23]=1; if (Input_PIN_24(zustand) == 0 ) verbidung_array[24]=1; if (Input_PIN_25(zustand) == 0 ) verbidung_array[25]=1; if (Input_PIN_26(zustand) == 0 ) verbidung_array[26]=1; if (Input_PIN_27(zustand) == 0 ) verbidung_array[27]=1; if (Input_PIN_28(zustand) == 0 ) verbidung_array[28]=1; _delay_ms(300); // Zeit für Optokoppler zum erreichen eines definierten Zustands Ausgang_low(a); } } void Name(char Name_auswertung_array [],char uart_get_array[]) { for (int a =0; a<=20;a++) { Name_auswertung_array[a]=0; } int i = 0; char message [80]; do { Name_auswertung_array[i]=uart_get_array[i+1]; i++; }while ((uart_get_array[i+1]!= '#')||(i==25)); } void Leitung_kodierung(int Leitung_kodierung_array[],char uart_get_array[],int Leitung_array[][28]) { int Wert; for (int a =0; a<=28;a++) { Leitung_kodierung_array[a]=0; } int i = 0; int spalten_zehner =0; int spalten_einer =1; char message [80]; do { Leitung_kodierung_array[i]=uart_get_array[i+1]; Leitung_kodierung_array[i]=Leitung_kodierung_array[i]-48; // -48 weil char 0 =int 48 ist Leitung_array[0][i]=Leitung_kodierung_array[spalten_zehner]; Leitung_array[1][i]=Leitung_kodierung_array[spalten_einer]; // Leitung_array[2][i]=Leitung_array[0][i]*10; // Leitung_array[2][i]=Leitung_array[2][i]+Leitung_array[1][i]; i++; spalten_zehner=spalten_zehner +2; spalten_einer=spalten_einer +2; }while ((uart_get_array[i+1]!= '#')||(i==28)); sprintf (message,"Manuell_Ausw.t5.txt=%c%d%c\n",34,Leitung_array[2][0],34); data_send(message); } void Objekt_Schalter_AUS(int verbidung_array[], int kreuztest_array[],int ergebnis_messung_array[]) { char message [80]; // Buffer sprintf Befehl for (int i=0; i<=3 ; i++ ) { if (verbidung_array[1]==1) { ergebnis_messung_array[0]=1; } } sprintf(message,"ErgebnisHptSch.ergebnis.val=%d\n",ergebnis_messung_array[0]); data_send(message); } void Objekt_Schalter_AN(int verbidung_array[], int kreuztest_array[], int ergebnis_messung_array[]) { char message [80]; int i =0; for (int a=0;a<=4;a++) { if(verbidung_array[a]==1) { i++; } } if ((verbidung_array[5]==1)&&(i==4)) { ergebnis_messung_array[0]=2; } sprintf(message,"ErgebnisHptSch.ergebnis.val=%d\n",ergebnis_messung_array[0]); data_send(message); }