Usart Plot "C"

Başlatan mihri, 01 Ekim 2009, 19:32:35

mihri

Seri porttan gönderilen verilerle grafik çizmeye yararan program.

usart_plot.c
//////////////////////////////////////////////////////////
//														//
// YAxisText Y ekseni etiketi.							//
// XAxisText X ekseni etiketi.							//
// Title Grafik başlığı.								//
// XAxis, YAxis değerleri ekran görüntüsünde max 		//
// eksen uzunluklarını belirtir.						//
// Hazırlanan kütüphanede giriş datasi int tipi 		//
// değişken katarı olmak zorunda. Diğer tip veriler 	//
// için kod modifiye edilebilir.						//
// Kod Hi-Tech derleyicisinde test edildi.				//
// Grafiğin anlaşılır olması için seri port monitöründe //
// seçilen font Courier New olmalıdır.					//
// Örnek;												//
// UsartPlot(int_data,"V-t Grafigi","V","t");			//
//														//
///////////////////// Mihri-2009 /////////////////////////

#define YAxis 32 //Y eksen uzunluğu
#define XAxis 64 //X eksen uzunluğu

#define Grid 1 //1 Grid olsun, 0 Grid olmasın 
#define FillLine 1 //1 grafik noktalarının altını çizgiyle doldurur
#define Sign 'M' //Grafiği oluşturan işaret

void UsartPlot(int Data1[],const char *Title,const char *XAxisText,const char *YAxisText); // prototip tanımlama

void UsartPlot(int Data1[],const char *Title,const char *XAxisText,const char *YAxisText)
{
	int PosYAxis;
	int NegYAxis;
	int MaxVal=0;
	int MinVal=0;
	int ScaledNegData;
	int ScaledPosData;
	float Scale;
	
	for(int i=0;i<XAxis;i++)	//Girilen data dizisinde Max ve min değerleri bul
	{
		if(Data1[i]>MaxVal)
			MaxVal=Data1[i];
		if(Data1[i]<MinVal)
			MinVal=Data1[i];	
	}
	
	Scale=((float)(MaxVal-MinVal))/YAxis;	//Çizim ölçeğini hesapla
	if(Scale<1) 
		Scale=1;
	PosYAxis=(int)((float)MaxVal/Scale)+2;	//Max pozitif y eksenini hesapla
	NegYAxis=(int)((float)MinVal/Scale)-3;	//Min negatif y eksenini hesapla
	
	printf("\n\r//---------- USART PLOT V1.0 ----------//");
	printf("\n\r > Title : %s",Title);
	printf("\n\r > Max %s =%4d",YAxisText,MaxVal);
	printf("\n\r > Min %s =%4d",YAxisText,MinVal);
	printf("\n\r > Scale =1/%d",(int)Scale);
	printf("\n\r//-------- DESIGNED BY MIHRI %c --------//\n\r",169);	
	
	for(int y=PosYAxis;y>NegYAxis;y--)	//Y eksenini tara
	{
		if((y==PosYAxis))	//Y ekseninin başına etiketi yaz
			printf("\n\r    +Y=%s",YAxisText);
			
		for(int x=0;x<XAxis;x++)	//X eksenini tara
		{
		
			if(x==0)	//Y eksen değerlerini hesapla ve yaz
				printf("\n\r%+5d|",(int)(Scale*y));

			ScaledNegData=(int)((float)Data1[x]/Scale-0.9);
			ScaledPosData=(int)((float)Data1[x]/Scale+0.9);
			
			if(y==0)	// Y=0 ekseninde 0'a eşit olan noktalara işaret yaz
			{			// 0'a eşit olmayan yerlere çizgi çek
				if((0==ScaledPosData)&&(0==ScaledNegData))
					printf("%c",Sign);	
				else
					printf("-");
					
				if(x==(XAxis-1))	//X ekseninin etiketini yaz
					printf("-> X=%s",XAxisText);	
			}
			else if((y>0)&&(y==ScaledPosData))	//Y'nin 0'dan büyük değerleri için 
				printf("%c",Sign);							//X'e karşılık gelen noktalara çizim işareti yaz
			else if((y<0)&&(y==ScaledNegData))	//Y'nin 0'dan küçük değerleri için 
				printf("%c",Sign);							//X'e karşılık gelen noktalara çixim işareti yaz
			else	//(X,Y) kordinatlarına denk gelen data değeri yoksa diğer işlemleri uygula
			{
				#if (FillLine==1)	//İşaret noktasının altı çizgi ile doldurulsun

					if((y>0)&&(y<ScaledPosData))
						printf("|");
					else if((y<0)&&(y>ScaledNegData))
						printf("|");
					else	// İşaret noktası ve altındaki çizgiler hariç çizim alanı
					{
						#if(Grid==1)	//Çizim alanında grid olsun
							printf(".");
						#else
							printf(" ");
						#endif
					}
				#else	// İşaret noktasının altı çizgi ile doldurulmasın
					#if(Grid==1)	//Çizim alanında grid olsun
						printf(".");
					#else
						printf(" ");
					#endif
				#endif
				
				
			}			
		}
		
		if(y==-1)	//X eksen uzunluğunu yaz
		{
			printf("   X Lenght=%d",XAxis);
		}
		
		if(y==(NegYAxis+1))	//Y ekseni negatif değer etiketini yaz
			printf("\n\r    -Y=%s",YAxisText);
	}
	printf("\n\r");
}



Örnek çıktı.
//---------- USART PLOT V1.0 ----------//
 > Title : Giris Sinyali Grafigi
 > Max Volt = 128
 > Min Volt =-128
 > Scale =1/8
//-------- DESIGNED BY MIHRI © --------//

    +Y=Volt
 +144|................................................................
 +136|................................................................
 +128|.......MMM.............................MMM......................
 +120|......M|||M...........................M|||M.....................
 +112|.....M|||||M.........................M|||||M....................
 +104|.....|||||||.........................|||||||....................
  +96|....M|||||||M.......................M|||||||M...................
  +88|....|||||||||.......................|||||||||...................
  +80|....|||||||||.......................|||||||||...................
  +72|...M|||||||||M.....................M|||||||||M..................
  +64|...|||||||||||.....................|||||||||||..................
  +56|...|||||||||||....................M|||||||||||..................
  +48|..M|||||||||||M...................||||||||||||M.................
  +40|..|||||||||||||...................|||||||||||||.................
  +32|..|||||||||||||...................|||||||||||||.................
  +24|.M|||||||||||||M.................M|||||||||||||M................
  +16|.|||||||||||||||.................|||||||||||||||................
   +8|.|||||||||||||||.................|||||||||||||||................
   +0|M---------------M---------------M---------------M----------------> X=Zaman
   -8|.................|||||||||||||||.................|||||||||||||||   X Lenght=64
  -16|.................|||||||||||||||.................|||||||||||||||
  -24|.................M|||||||||||||M.................M|||||||||||||M
  -32|..................|||||||||||||...................|||||||||||||.
  -40|..................|||||||||||||...................|||||||||||||.
  -48|..................M|||||||||||M...................||||||||||||M.
  -56|...................|||||||||||....................M|||||||||||..
  -64|...................|||||||||||.....................|||||||||||..
  -72|...................M|||||||||M.....................M|||||||||M..
  -80|....................|||||||||.......................|||||||||...
  -88|....................|||||||||.......................|||||||||...
  -96|....................M|||||||M.......................M|||||||M...
 -104|.....................|||||||.........................|||||||....
 -112|.....................M|||||M.........................M|||||M....
 -120|......................M|||M...........................M|||M.....
 -128|.......................MMM.............................MMM......
 -136|................................................................
 -144|................................................................
    -Y=Volt

//---------- USART PLOT V1.0 ----------//
 > Title : FFT Katsayilarinin Gercel Kismi
 > Max k*Cos(Faz) =  31
 > Min k*Cos(Faz) = -13
 > Scale =1/1
//-------- DESIGNED BY MIHRI © --------//

    +Y=k*Cos(Faz)
  +33|................................................................
  +31|..............................................................M.
  +30|..............................................................|.
  +28|..............................................................|.
  +27|..............................................................|.
  +26|..M...........................................................|.
  +24|..|...........................................................|.
  +23|..|...........................................................|.
  +22|..|...........................................................|.
  +20|..|...........................................................|.
  +19|..|...........................................................|.
  +17|..|...........................................................|.
  +16|..|...........................................................|.
  +15|..|...........................................................|.
  +13|..|...........................................................|.
  +12|..|...........................................................|.
  +11|..|...........................................................|.
   +9|..|...........................................................|.
   +8|..|.......................................................M...|.
   +6|..|.......................................................|...|.
   +5|..|...M...................................................|...|.
   +4|..|...|...................................................|...|.
   +2|..|...|..........M...M...........................M...M....|...|.
   +1|..|...|....M...M.|.M.|...M............M...MM...M.|.M.|...M|...|.
   +0|M---M--MM---MM--M---M-MMM-M-MM--M---M--MM---MM--M---M--MM---MM---> X=Faz
   -1|.|.M.|...M|...|...|........M..|M.||M.|...M....|...|...|....M...M   X Lenght=64
   -2|.M...M....|...|...|...........|..M|..M........|...|...|.........
   -4|..........|...|...|...........|...|...........|...M...|.........
   -5|..........|...|...|...........|...|...........|.......|.........
   -6|..........|...M...|...........|...|...........|.......M.........
   -8|..........|.......|...........|...|...........|.................
   -9|..........M.......|...........|...|...........|.................
  -11|..................M...........|...M...........|.................
  -12|..............................|...............M.................
  -13|..............................M.................................
  -15|................................................................
    -Y=k*Cos(Faz)

//---------- USART PLOT V1.0 ----------//
 > Title : FFT Katsayilarinin Sanal Kismi
 > Max k*Sin(Faz) =4052
 > Min k*Sin(Faz) =-4050
 > Scale =1/253
//-------- DESIGNED BY MIHRI © --------//

    +Y=k*Sin(Faz)
+4557|................................................................
+4304|................................................................
+4051|..............................................................M.
+3797|..............................................................|.
+3544|..............................................................|.
+3291|..............................................................|.
+3038|..............................................................|.
+2785|..............................................................|.
+2531|..............................................................|.
+2278|..............................................................|.
+2025|..............................................................|.
+1772|..............................................................|.
+1519|..............................................................|.
+1265|..............................................................|.
+1012|..............................................................|.
 +759|..............................................................|.
 +506|..............................................................|.
 +253|..............................................................|.
   +0|MM-MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-M-> X=Faz
 -253|..|.............................................................   X Lenght=64
 -506|..|.............................................................
 -759|..|.............................................................
-1012|..|.............................................................
-1265|..|.............................................................
-1519|..|.............................................................
-1772|..|.............................................................
-2025|..|.............................................................
-2278|..|.............................................................
-2531|..|.............................................................
-2785|..|.............................................................
-3038|..|.............................................................
-3291|..|.............................................................
-3544|..|.............................................................
-3797|..|.............................................................
-4051|..M.............................................................
-4304|................................................................
    -Y=k*Sin(Faz)

//---------- USART PLOT V1.0 ----------//
 > Title : FFT Katsayilari
 > Max Genlik = 126
 > Min Genlik =   0
 > Scale =1/3
//-------- DESIGNED BY MIHRI © --------//

    +Y=Genlik
 +133|................................................................
 +129|................................................................
 +126|..M...........................................................M.
 +122|..|...........................................................|.
 +118|..|...........................................................|.
 +114|..|...........................................................|.
 +110|..|...........................................................|.
 +106|..|...........................................................|.
 +102|..|...........................................................|.
  +98|..|...........................................................|.
  +94|..|...........................................................|.
  +90|..|...........................................................|.
  +86|..|...........................................................|.
  +82|..|...........................................................|.
  +78|..|...........................................................|.
  +74|..|...........................................................|.
  +70|..|...........................................................|.
  +66|..|...........................................................|.
  +63|..|...........................................................|.
  +59|..|...........................................................|.
  +55|..|...........................................................|.
  +51|..|...........................................................|.
  +47|..|...........................................................|.
  +43|..|...........................................................|.
  +39|..|...........................................................|.
  +35|..|...........................................................|.
  +31|..|...........................................................|.
  +27|..|...........................................................|.
  +23|..|...........................................................|.
  +19|..|...........................................................|.
  +15|..|...........................................................|.
  +11|..|...........................................................|.
   +7|..|...........................................................|.
   +3|..|...........................................................|.
   +0|MM-MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-M-> X=Faz
   -3|................................................................   X Lenght=64
   -7|................................................................
    -Y=Genlik
[/font]
"Eppur si muove!"

teknikelektronikci

cok güzel paylasim tesekürler fakat sorum bu kod glcd icin değilmi? c den pek anlamam o yüzden soruyorum
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

sigmoid

glcd için değil. Seri porttan bilgisayara gönderiyor, sizde hyperterminal gibi bir programda sonuçları görebilirsiniz.

birkaç kod değişikliği ile glcdye de uyarlanabilinir.