/* ATB_Grapik_Bus_Prg_1.c Created: 20.05.2016 10:16:34 Author : AS */ 

/*************************************************************************
* Titel:    ATB Graphig Bus Prg 1
* Autor:    Joachim seeger  h.j.seeger@web.de
* File:     1.0   30.05.2016
* Software: AVR-GCC 3.4.3 / Atmel Studio 7
* Target:   AVR Atmel ATmega 1284p und eDIP128
* Usage:    
* I2C Routinen von Peter Fleury 
**************************************************************************/

/*  Abgestimmt auf meine Hardware P30 (Board 1), NT2, D5 mit eDIP128 - I2C Anzeige
	Adressen: BA0-L, BA1-L, BA2-L, SA0-H, SA1-H, SA2-H ergibt Adresse 1 - 0x1e, Adresse 2 0x1f  
	Verbindung über I2C Bus, Stecker nach RN-Norm, Aufbau mit Modularen Board 
	Frequenz und Angaben in der main.h, Erklärung in der eDIP128.h    */	
		
		#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>
		#include "string.h"
		#include "eDIP128.h"
		
////////////////////////////////////////////////////////////////////////////////////////////////

int main(void)
  {
	cli();                     				// Interrupts deaktiviert
	i2c_init();                				// Starte I2C Bus
	_delay_ms(100);		      				// Warte 2ms
	Graphik_loeschen();	// ok Display löschen - alles
	_delay_ms(500);
	Graphik_Cursor(0);						// Cursor aus=0, ein=1
	while(1)
	  {	
		Graphik_loeschen();	// ok Display löschen - alles
		
		///////////// Bild 1 Demo Anzeige
		Graphik_Rechteck(0,0,127,63);		// ok min x1=0, y1=0 max x2=127, y2=63
		Graphik_Rechteck(0,0,5,5);			// Rechteck von bis
		Graphik_Rechteck(122,0,127,5);	
		Graphik_Rechteck(0,58,5,63);	
		Graphik_Rechteck(122,58,127,63);
		Graphik_Auswahl_Font(5);		
		Graphik_Text_ausgabe_L(19,10,"Demo Board");			
		Graphik_Auswahl_Font(6);			// Auswahl Schrift
		Graphik_Text_ausgabe_L(11,27,"eDIP 128");			
		Graphik_Auswahl_Font(4);
		Graphik_Text_ausgabe_L(80,53,"(Bild 1)");
			_delay_ms(5000);
		Graphik_loeschen();					// ok Display löschen - alles
		
		///////////// Bild 2 Unterschiedliche Fonts (Schriftarten) //////////////////////
		Graphik_Rechteck(0,0,127,63);		// ok min x1=0, y1=0 max x2=127, y2=63
		Graphik_Font_Zoom(1,1);
		Graphik_Auswahl_Font(4);	
		Graphik_Text_ausgabe_L(2,3,"(Bild 2)");
		Graphik_Auswahl_Font(1);		
		Graphik_Text_ausgabe_L(3,26,"Test 1");
		Graphik_Auswahl_Font(2);		
		Graphik_Text_ausgabe_L(37,13,"Test 2");
		Graphik_Auswahl_Font(3);		
		Graphik_Text_ausgabe_L(3,11,"Nr 3");
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(40,3,"Test 4");
		Graphik_Auswahl_Font(5);		
		Graphik_Text_ausgabe_L(28,22,"Test 5");
		Graphik_Auswahl_Font(6);		
		Graphik_Text_ausgabe_L(6,33,"Nr 6");
		Graphik_Auswahl_Font(7);		
		Graphik_Text_ausgabe_L(82,3,"7");
			_delay_ms(5000);
		Graphik_loeschen();	
		
		///////////////   Bild 3 Schriftbearbeitung
		Graphik_Rechteck(0,0,127,63);		// ok min x1=0, y1=0 max x2=127, y2=63
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(2,3,"(Bild 3)");
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(41,3,"Text ori Font 4");
		Graphik_Auswahl_Font(4);
		Graphik_Font_Zoom(2,2);			
		Graphik_Text_ausgabe_L(3,20,"Zoom 2,2");
		Graphik_Font_Zoom(1,1);
		Graphik_Font_Winkel(1);
		Graphik_Auswahl_Font(5);	
		Graphik_Text_ausgabe_L(97,58,"Font 5");
		Graphik_Font_Zoom(1,1);
		Graphik_Font_Winkel(0);
			_delay_ms(5000);
		Graphik_loeschen();	
		
	    //////////  Bild 4 Anzeige Figuren
		Graphik_Rechteck(0,0,127,63);				// min x1=0, y1=0 max x2=127, y2=63
		Graphik_Rechteck(10,10,37,25);	
		Graphik_Rechteck(20,15,47,30);	
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(60,25,"(Bild 4)");
		Graphik_Gerade(5,5,85,5);					// Gerade von x1,y1 zu x2,y2
		Graphik_Gerade_weiter(70,15);				// Gerade weiter zu x,y
		Graphik_Gerade_weiter(90,8);	
		Graphik_Gerade_weiter(110,25);	
		Graphik_Bereich_Muster(5,42,25,58,18);		// Bereich mit Muster füllen
		Graphik_Box_zeichnen(30,42,50,58,9);		// Box mit Muster füllen
		Graphik_Rahmen_zeichnen(55,42,75,58,3);		// Rahmen zeichnen ohne Muster
		Graphik_Rahmenbox_zeichnen(80,42,100,58,8);	// ok Rahmen zeichnen Muster füllen
			_delay_ms(5000);
		Graphik_loeschen();							// Display löschen - alle
		
		///////// Bild 5 Bargraph Anzeige
		Graphik_Rechteck(0,0,127,63);				// min x1=0, y1=0 max x2=127, y2=63
		Graphik_Auswahl_Font(5);		
		Graphik_Text_ausgabe_L(5,4,"Bargraph Anzeige");
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(90,53,"(Bild 5)");
		Graphik_Bargraph_R(1,10,20,105,35,0,100,1,1);	// Nr,x1,y1,x2,y2,Anfang,Ende,Strichbreite,Muster Füllung
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(7,41,"(0%)");		
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(85,41,"(100%)");
			_delay_ms(1000);
		Graphik_Bargraph_aktuell(1,20);				// Nr, Angabe in %
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(42,41,"(20%)");
			_delay_ms(1000);
		Graphik_Bargraph_aktuell(1,40);				// Nr, Angabe in %
		Graphik_Auswahl_Font(4);	
		Graphik_Text_ausgabe_L(42,41,"(40%)");
			_delay_ms(1000);
		Graphik_Bargraph_aktuell(1,60);				// Nr, Angabe in %
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(42,41,"(60%)");
			_delay_ms(1000);
		Graphik_Bargraph_aktuell(1,80);				// Nr, Angabe in %
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(42,41,"(80%)");
			_delay_ms(1000);
		Graphik_Bargraph_aktuell(1,100);			// Nr, Angabe in %
		Graphik_Auswahl_Font(4);		
		Graphik_Text_ausgabe_L(41,41,"(100%)");
			_delay_ms(3000);
		Graphik_loeschen();	// ok Display löschen - alles
		
		/////////////////////////  Bild 6 Menue
		Graphik_Font_Winkel(1);
		Graphik_Auswahl_Font(4);
		Graphik_Text_ausgabe_L(107,58,"(Bild 6)");
		Graphik_Font_Zoom(1,1);
		Graphik_Font_Winkel(0);
		Graphik_Menue_Font(3);		// Menue Font (Schrift)
		Graphik_Menue_zeichnen(5,5,1,"Demo 1|Demo 2|Demo 3|Versuch 123");
			_delay_ms(5000);
		Graphik_Menue_weiter();		
			_delay_ms(3000);
		Graphik_Menue_weiter();		
			_delay_ms(3000);
		Graphik_Menue_weiter();		
			_delay_ms(3000);
		Graphik_Menue_zurueck();	
			_delay_ms(3000);
		Graphik_Menue_zurueck();	
			_delay_ms(5000);
		Graphik_loeschen();	// ok Display löschen - alles
		
		//////////////////////////////////////////////////////////////////////////////
		/////////////   Mögliche Befehle
		
		// Graphik_Cursor(1);						// Cursor aus=0, ein=1									
		// Graphik_Cursor_Position(1,1);			// Cursor Position max x=16 y=8							
		// Graphik_Blinken(0);						// Blinken Display aus=0, ein=1, 2=inv 3=Phase			
		// Graphik_Punkt(96,39);					// Ausgabe eines Punktes an x, y						
		// Graphik_Punkt_Groesse(1,1);				// allgemein für alle x, y								
		// Graphik_Gerade(5,15,72,42);				// Gerade von x1,y1 zu x2,y2							
		// Graphik_Gerade_weiter(90,35);			// Gerade weiter zu x,y									
		// Graphik_Text_ausgabe_Z(41,41,"(100%)");	// Textausgabe zentriert								
		// Graphik_Text_ausgabe_R(41,41,"(100%)");	// Textausgabe rechts									
		// Graphik_Text_ausgabe_L(41,41,"(100%)");	// Textausgabe links									
		// Graphik_Auswahl_Font(int8_t f);			// Auswahl Schrift										
		// Graphik_Font_Winkel(int8_t w);			// Winkel Schrift										
		// Graphik_Font_Zoom(int8_t z1, int8_t z2);	// Vergrösserung Schrift							    
		
		// Graphik_Bereich_invertieren(18,15,24,27);// Bereich invertieren blinken							
		// Graphik_Bereich_fuellen(12,12,34,34);	// Bereich fuellen nicht blinken						
		// Graphik_Bereich_loeschen(10,10,94,54);	// Bereich loeschen										
		// Graphik_Bereich_Muster(35,12,95,28,12);	// Bereich mit Muster füllen								
		
		// Graphik_Rechteck(0,0,127,63);			// min x1=0, y1=0 max x2=127, y2=63						
		
		// Graphik_Beleuchtung(1);					// Beleuchtung 1=ein 0=aus								
		// Graphik_Helligkeit(100);					// Helligkeit von 0 bis 100%								
		// Graphik_Info(void);						// Anzeige Software Version	und mehr					
		// Graphik_Version(void);					// Anzeige Version										
		
		// Graphik_loeschen(void);					// alles löschen												
		// Graphik_invertieren(void);				// alles invertieren										
		
		// Graphik_Box_zeichnen(35,12,95,28,9);			// Box mit Muster füllen									
		// Graphik_Rahmen_zeichnen(35,12,95,28,8);		// Rahmen zeichnen ohne Muster						
		// Graphik_Rahmenbox_zeichnen(35,12,95,28,8);	// ok Rahmen zeichnen Muster füllen					
		
		// Graphik_Bargraph_R(1,10,40,75,55,25,100,1,1);	// Nr,x1,y1,x2,y2,Anfang,Ende,Strichbreite,Muster Füllung nach rechts	
		// Graphik_Bargraph_L(1,10,40,75,55,25,100,1,1);	// Nr,x1,y1,x2,y2,Anfang,Ende,Strichbreite,Muster Füllung nach links	
		// Graphik_Bargraph_O(1,10,40,75,55,25,100,1,1);	// Nr,x1,y1,x2,y2,Anfang,Ende,Strichbreite,Muster Füllung nach oben		
		// Graphik_Bargraph_U(1,10,40,75,55,25,100,1,1);	// Nr,x1,y1,x2,y2,Anfang,Ende,Strichbreite,Muster Füllung nach unten	
		// Graphik_Bargraph_aktuell(1,70);					// Nr Bargraph, Angabe in %										
		
		// Graphik_Menue_zeichnen(int8_t x1, int8_t y1, int8_t a1, char * Text);	// Ausgabe Menue Inhalt und Rahmen		
		// Graphik_Menue_weiter(void);						// Menue Balken nach unten - weiter		
		// Graphik_Menue_zurueck(void);						// Menue Balken nach oben - zurück		
		// Graphik_Menue_Font(int8_t f);					// Auswahl Schrift Menue				

		_delay_ms(500);	
	} 
  }
		 
			