/* ATB_Touch_Prg_1.c Created: 27.03.2016 17:37:48 Author : AS */ 

// Hardware 
// D2 - Display I2C, P92 - AT42QT1070
// P30 - Board 1 mit AT1284p, NT2 mit 5/12V 3A 

#include <stdbool.h>
#include <avr/pgmspace.h>
#include "main.h"
#include <util/delay.h>
#include "i2clcd.h"
#include "i2cmaster.h"
#include "avr/io.h"
#include "util/delay.h"
#include "avr/interrupt.h"
#include <stdlib.h>

int8_t d;
int8_t dt;

uint8_t ret;             			// Variable für I2C Kommunik.
char Buffer[20];         			// Variable für LCD Anzeige

void anzeige()
  {
	lcd_printlc(1,2,"Touch + Display"); // Zeile 1
	lcd_printlc(2,3,"Touch Modul 1");	// Zeile 2
	lcd_printlc(3,2,"mit AT42QT1070");	// Zeile 3
	lcd_printlc(4,2,"(by achim 2016)");	// Zeile 4	
  }

void erfassung()
  {
	ret = i2c_start(0x36);      			// Start 
	if (ret == 0)
	  {   
		i2c_start( 0x36 );					// Addressiere Device
		i2c_write( 0x03 );					// Setze lesezugriff
		
		// bei 0x02 ändert von 0 auf 1 bei jeder Taste - Detection Status
		// bei 0x03 gibt jede Taset einen Bit Wert aus - Key Status
		// bei 0x05 Anzeige Empfindlichkeit Key 0
		// bei 0x07 Anzeige Empfindlichkeit Key 1
		// bei 0x09 Anzeige Empfindlichkeit Key 2
		// bei 0x0B Anzeige Empfindlichkeit Key 3
		// bei 0x0D Anzeige Empfindlichkeit Key 4
		// bei 0x0F Anzeige Empfindlichkeit Key 5
		// bei 0x11 Anzeige Empfindlichkeit Key 6
		
		i2c_start( 0x36 | 0x01 );			// Starte Lesezugriff mit READ bit gesetzt
		d=i2c_readNak();					// Wert auf d übertragen
		i2c_stop();						
	  }
	else									// Fehlererkennung
	  {                        				// Wenn AT kein OK sendet
		lcd_command(LCD_CLEAR);				// Leere Display
		_delay_ms(2);		      			// Warte 2ms
		lcd_printlc(1,1,"Fehlermeldung:");	// "Lesevorgang"
		lcd_printlc(3,4,"AT42QT1070");		// "Nicht OK (NOK)"
		lcd_printlc(4,2,"nicht OK");		// "Lesevorgang"
		_delay_ms(2000);		      		// Warte 2ms	
	  }
  }

int main(void)
  {
	cli();                     				// Interrupts deaktiviert
	i2c_init();                				// Starte I2C Bus
	lcd_init();                				// Starte I2CLCD
	lcd_light(0);							// 0=Licht an, 1=aus
	// Display Befehle
	lcd_command(LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKINGOFF);
	lcd_command(LCD_CLEAR);        			// Leere Display
	_delay_ms(2);		      				// Warte 2ms
	anzeige();
	_delay_ms(5000);		       			// Warte 5000ms
	lcd_command(LCD_CLEAR);    				// Leere Display
	_delay_ms(2);		      				// Warte 2ms
	while(1)
	  {
		erfassung();                        // Unterprg Touch auslesen
		lcd_command(LCD_CLEAR);        		// Leere Display
		_delay_ms(2);		      			// Warte 2ms
		
		itoa(d, Buffer, 10 );
		lcd_printlc(3,14,Buffer);
			
		lcd_printlc(1,1,"Anzeige Keys:");
		lcd_printlc(3,1,"Key Wert:");
		lcd_printlc(4,1,"Taste Key:");
		
		if (d==1)
		  {	dt=0;	}
		if (d==2)
		  {	dt=1;	}
		if (d==4)
		  {	dt=2;	}
		if (d==8)
		  {	dt=3;	}
		if (d==16)
		  {	dt=4;	}
		if (d==32)
		  {	dt=5;	}	
		if (d==64)
		  {	dt=6;	}	
		if ((d==1)||(d==2)||(d==4)||(d==8)||(d==16)||(d==32)||(d==64))
		  {
		    itoa(dt, Buffer, 10 );
		    lcd_printlc(4,13,Buffer);
		  }
		else
		  {
		    lcd_printlc(4,13,"---");
		  }
		_delay_ms(100);
      }
  }
