#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <string.h>
#include <stdint.h>
#include "lcd.h"
#include "adc.h"


/*
** Definition Grad-Zeichen
*/
static const PROGMEM unsigned char copyRightChar[] =
{
	0x0C, 0x12, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x00
};



int main(void)
{
    char buffer[5],buffer2[5],in[14],out[14];
	/* Vorgefertigte Strings fuer verschieden lange Ausgaben */
	char in1[12]="Innen:     ";
	char out1[12]="Aussen:    ";
	char in2[13]="Innen:      ";
	char out2[13]="Aussen:     ";
	char in3[14]="Innen:       ";
	char out3[14]="Aussen:      ";
	// Werte- und Schleifenvariablen
	int temp, temp2;
    	uint16_t i,j,wert;
	

    
    

    /* initialisire Display, Cursor aus */
    lcd_init(LCD_DISP_ON);
	/* initialisiere ADC */
	adc_init();

    for (;;) {                           /* Endlosschleife */

		/* Berechnung 1. Wert */		
		wert=0;
		for(i=0;i<25;i++){
			wert +=adc_getValue(0);
		}
		wert=wert/25;
		temp=wert;
		temp=(temp-412)/3; // umrechnung auf die Gradzahl

		/* Berechnung 2. Wert */
		wert=0;
		for(i=0;i<25;i++){
			wert +=adc_getValue(1);
		}
		wert=wert/25;
		temp2=wert;
		temp2=(temp2-415)/3; // Andere Umrechnung durch den Innenwiderstand des Kabels (denk ich mal)
		
		/* Berechnung der Stellen und Auswahl der richtigen Strings fuer Innen*/
		if(temp <= -10){
			strcpy(in,in1);
		}else{
			if((temp <= 0)|(temp >=10)){
				strcpy(in,in2);
			}else{
				strcpy(in,in3);
			}
		}   

		/* Berechnung der Stellen und Auswahl der richtigen Strings fuer Aussen*/
		if(temp2 <= -10){
			strcpy(out,out1);
		}else{
			if((temp2 <= 0)|(temp2 >=10)){
				strcpy(out,out2);
			}else{
				strcpy(out,out3);
			}
		}   

        itoa( temp , buffer, 10);
		itoa( temp2 , buffer2, 10);
		
	/* Kopieren des Gradzeichens in den CG RAM des Displays */ 
        lcd_command(_BV(LCD_CGRAM));  
        for(i=0; i<8; i++)
        {
            lcd_data(pgm_read_byte_near(&copyRightChar[i]));
        }

        /* Loesche Display und setze Cursor auf die erste Position (0,0) */
        lcd_clrscr();
        
		/* Ausgabe 1. Zeile */
        lcd_puts(in);
        lcd_puts(buffer);
        lcd_gotoxy(14,0);	
		lcd_putc(0);
		lcd_putc('C');


		/* Ausgabe 2. Zeile */
        lcd_gotoxy(0,1);
        lcd_puts(out);
        lcd_puts(buffer2);
        lcd_gotoxy(14,1);
		lcd_putc(0);
		lcd_putc('C');

	/* Warteschleife */
        for(i=0;i<2000;i++){
		 	j=0;
			while(j<2000){
				j++;
			}
		}
    }
}
