void GLCD_Rectangle(unsigned int x, unsigned int y, unsigned int b, unsigned int a) { unsigned int j; // zmienna pomocnicza // rysowanie linii pionowych (boki) for (j = 0; j < a; j++) { GLCD_SetPixel(x, y + j, color); GLCD_SetPixel(x + b - 1, y + j, color); } // rysowanie linii poziomych (podstawy) for (j = 0; j < b; j++) { GLCD_SetPixel(x + j, y, color); GLCD_SetPixel(x + j, y + a - 1, color); } }
void GLCD_Circle(unsigned int cx, unsigned int cy ,unsigned int radius) { int x, y, xchange, ychange, radiusError; x = radius; y = 0; xchange = 1 - 2 * radius; ychange = 1; radiusError = 0; while(x >= y) { GLCD_SetPixel(cx+x, cy+y, color); GLCD_SetPixel(cx-x, cy+y, color); GLCD_SetPixel(cx-x, cy-y, color); GLCD_SetPixel(cx+x, cy-y, color); GLCD_SetPixel(cx+y, cy+x, color); GLCD_SetPixel(cx-y, cy+x, color); GLCD_SetPixel(cx-y, cy-x, color); GLCD_SetPixel(cx+y, cy-x, color); y++; radiusError += ychange; ychange += 2; if ( 2*radiusError + xchange > 0 ) { x--; radiusError += xchange; xchange += 2; } } }
void GLCD_DrawSelection(int row, int col) { int w, h; for (w = 0; w < LETTERDIM + 6; w++) { for (h = 0; h < LETTERDIM + 6; h++) { if (w == 0 || h == 0 || w == LETTERDIM + 5 || h == LETTERDIM + 5) GLCD_SetPixel(w + cols[col] - 3, h + rows[row] - 3, Red); } } }
void GLCD_Line(int X1, int Y1,int X2,int Y2) { int CurrentX, CurrentY, Xinc, Yinc, Dx, Dy, TwoDx, TwoDy, TwoDxAccumulatedError, TwoDyAccumulatedError; Dx = (X2-X1); // obliczenie sk³adowej poziomej Dy = (Y2-Y1); // obliczenie sk³adowej pionowej TwoDx = Dx + Dx; // podwojona sk³adowa pozioma TwoDy = Dy + Dy; // podwojona sk³adowa pionowa CurrentX = X1; // zaczynamy od X1 CurrentY = Y1; // oraz Y1 Xinc = 1; // ustalamy krok zwiêkszania pozycji w poziomie Yinc = 1; // ustalamy krok zwiêkszania pozycji w pionie if(Dx < 0) // jesli sk³adowa pozioma jest ujemna { Xinc = -1; // to bêdziemy siê "cofaæ" (krok ujemny) Dx = -Dx; // zmieniamy znak sk³adowej na dodatni TwoDx = -TwoDx; // jak równie¿ podwojonej sk³adowej } if (Dy < 0) // jeœli sk³adowa pionowa jest ujemna { Yinc = -1; // to bêdziemy siê "cofaæ" (krok ujemny) Dy = -Dy; // zmieniamy znak sk³adowej na dodatki TwoDy = -TwoDy; // jak równiez podwojonej sk³adowej } GLCD_SetPixel(X1,Y1, color); // stawiamy pierwszy krok (zapalamy pierwszy piksel) if ((Dx != 0) || (Dy != 0)) // sprawdzamy czy linia sk³ada siê z wiêcej ni¿ jednego punktu ;) { // sprawdzamy czy sk³adowa pionowa jest mniejsza lub równa sk³adowej poziomej if (Dy <= Dx) // jeœli tak, to idziemy "po iksach" { TwoDxAccumulatedError = 0; // zerujemy zmienn¹ do // ruszamy w drogê { CurrentX += Xinc; // do aktualnej pozycji dodajemy krok TwoDxAccumulatedError += TwoDy; // a tu dodajemy podwojon¹ sk³adow¹ pionow¹ if(TwoDxAccumulatedError > Dx) // jeœli TwoDxAccumulatedError jest wiêkszy od Dx { CurrentY += Yinc; // zwiêkszamy aktualn¹ pozycjê w pionie TwoDxAccumulatedError -= TwoDx; // i odejmujemy TwoDx } GLCD_SetPixel(CurrentX,CurrentY, color);// stawiamy nastêpny krok (zapalamy piksel) }while (CurrentX != X2); // idziemy tak d³ugo, a¿ osi¹gniemy punkt docelowy } else // w przeciwnym razie idziemy "po igrekach" { TwoDyAccumulatedError = 0; do { CurrentY += Yinc; TwoDyAccumulatedError += TwoDx; if(TwoDyAccumulatedError>Dy) { CurrentX += Xinc; TwoDyAccumulatedError -= TwoDy; } GLCD_SetPixel(CurrentX,CurrentY, color); }while (CurrentY != Y2); } } }
// Main function int main (void) { // Local variable definations emxArray_uint8_T *xaxis; emxArray_uint8_T *yaxis; emxArray_uint8_T *norm_xaxis_filt; emxArray_uint8_T *norm_yaxis_filt; uint16_T count; uint8_T xaxis2,yaxis2; long j = 0; int again = 1; char letter; char letterstr[10]; int i=0; letterstr[i] = '\0'; // Variable Initialisation for(j=0;j<MAX_VALUE;j++) { xdata[j] = 0; ydata[j] = 0; } // Function Initialisation PINSEL2 &= ~((1<<2)|(1<<3)); GLCD_Initalize(); //Initialize the LCD Init_UART(); InitADC(); // Welcome message GLCD_ClearScreen(); GLCD_GoTo(10,4); GLCD_WriteString("Intelligent e-book"); // for(j=0;j<999999;j++); delay_ms(2000); // Calibration //Left bottom GLCD_ClearScreen(); GLCD_GoTo(10,0); GLCD_WriteString("Calibration"); GLCD_GoTo(10,4); GLCD_WriteString("Touch the point"); GLCD_GoTo(0,7); GLCD_WriteString("o"); do { xaxis1 = Read_xaxis(); yaxis1 = Read_yaxis(); if(xaxis1<10) xaxis1 = 0; if(yaxis1<10) yaxis1 = 0; }while(xaxis1==0 && yaxis1==0); for(j=0;j<25;j++) capture(); x1 = xaxis1; y1 = yaxis1; GLCD_GoTo(10,5); GLCD_WriteString("Stored"); delay_ms(1000); //Right top GLCD_ClearScreen(); GLCD_GoTo(10,0); GLCD_WriteString("Calibration"); GLCD_GoTo(10,4); GLCD_WriteString("Touch the point"); GLCD_GoTo(120,0); GLCD_WriteString("o"); do { xaxis1 = Read_xaxis(); yaxis1 = Read_yaxis(); if(xaxis1<10) xaxis1 = 0; if(yaxis1<10) yaxis1 = 0; }while(xaxis1==0 && yaxis1==0); for(j=0;j<25;j++) capture(); x2 = xaxis1; y2 = yaxis1; GLCD_GoTo(10,5); GLCD_WriteString("Stored"); delay_ms(1000); while(again==1) { again = 0; // Capturing xaxis and yaxis GLCD_ClearScreen(); GLCD_GoTo(10,0); GLCD_WriteString("Intelligent e-book"); GLCD_GoTo(12,4); GLCD_WriteString("Waiting for input"); do { xaxis1 = Read_xaxis(); yaxis1 = Read_yaxis(); if(xaxis1<10) xaxis1 = 0; if(yaxis1<10) yaxis1 = 0; }while(xaxis1==0 && yaxis1==0); xyelem = 0; count = 0; GLCD_ClearScreen(); GLCD_GoTo(0,0); // Eliminate first 25 samples for(j=0;j<25;j++) capture(); while(count!=250) { capture(); if(xaxis1!=0 && yaxis1!=0 && count==0) { // xaxis2 = (uint8_T)(((xaxis1-80)*255)/730); // yaxis2 = (uint8_T)(((yaxis1-100)*255)/650); xaxis2 = (uint8_T)(((xaxis1-x1)*255)/(x2-x1)); yaxis2 = (uint8_T)(((yaxis1-y1)*255)/(y2-y1)); count = 0; xdata[xyelem] = xaxis2; ydata[xyelem] = yaxis2; xyelem = xyelem + 1; GLCD_SetPixel(xaxis2/2,255-(yaxis2/4),1); if(xyelem>MAX_VALUE - 1) { GLCD_ClearScreen(); GLCD_GoTo(10,0); GLCD_WriteString("Intelligent e-book"); GLCD_GoTo(10,4); GLCD_WriteString("Overflow!!!"); while(1); } } else if(xaxis1!=0 && yaxis1!=0) { xyelem = xyelem - 2; // Eliminate first 25 samples for(j=0;j<25;j++) capture(); count = 0; } else { count = count + 1; } // delay(1000); } GLCD_ClearScreen(); GLCD_GoTo(10,0); GLCD_WriteString("Intelligent e-book"); GLCD_GoTo(0,1); GLCD_WriteString(letterstr); //GLCD_GoTo(10,4); //GLCD_WriteString("Scanning ended"); //delay_ms(500); // Transmitting data to PC // transmit(); // Remove noise remove_noise(); // Allocating space for pointers xaxis = emxCreateWrapper_uint8_T(xdata,1,xyelem); //xdata1 yaxis = emxCreateWrapper_uint8_T(ydata,1,xyelem); //ydata1 emxInit_uint8_T(&norm_xaxis_filt, 2); emxInit_uint8_T(&norm_yaxis_filt, 2); /* GLCD_ClearScreen(); GLCD_GoTo(10,0); GLCD_WriteString("Intelligent e-book"); GLCD_GoTo(0,2); GLCD_WriteString("Step1"); GLCD_GoTo(37,2); GLCD_WriteString("In"); */ // for(j=0;j<999999;j++); step1(xaxis, yaxis, norm_xaxis_filt, norm_yaxis_filt); // GLCD_ClearScreen(); // GLCD_GoTo(10,0); // GLCD_WriteString("Intelligent e-book"); // GLCD_GoTo(54,2); // GLCD_WriteString("Out"); // for(j=0;j<999999;j++); emxDestroyArray_uint8_T(xaxis); emxDestroyArray_uint8_T(yaxis); // GLCD_ClearScreen(); // GLCD_GoTo(10,0); // GLCD_WriteString("Intelligent e-book"); // GLCD_GoTo(0,3); // GLCD_WriteString("Step2"); // GLCD_GoTo(37,3); // GLCD_WriteString("In"); // for(j=0;j<999999;j++); // char_bin is stored in column first fashion... each column vector are concatenated step2(norm_xaxis_filt, norm_yaxis_filt, char_bin); // GLCD_ClearScreen(); // GLCD_GoTo(10,0); // GLCD_WriteString("Intelligent e-book"); // GLCD_GoTo(54,3); // GLCD_WriteString("Out"); // for(j=0;j<999999;j++); emxFree_uint8_T(&norm_xaxis_filt); emxFree_uint8_T(&norm_yaxis_filt); // GLCD_ClearScreen(); // GLCD_GoTo(10,0); // GLCD_WriteString("Intelligent e-book"); // GLCD_GoTo(0,4); // GLCD_WriteString("Step3"); // GLCD_GoTo(37,4); // GLCD_WriteString("In"); // for(j=0;j<999999;j++); for(j=0;j<10;j++) char_vec[j] = 1; step3(char_bin, char_vec); // GLCD_ClearScreen(); // GLCD_GoTo(10,0); // GLCD_WriteString("Intelligent e-book"); // GLCD_GoTo(54,4); // GLCD_WriteString("Out"); // for(j=0;j<999999;j++); for(j=0;j<26;j++) char_vec1[j] = char_vec[j]; // Feeding char_vec to trained neural network char_recog_nn(char_vec1,Y); letter = character(); letterstr[i] = letter; letterstr[i+1] = '\0'; // GLCD_ClearScreen(); // GLCD_GoTo(10,0); // GLCD_WriteString("Intelligent e-book"); // GLCD_GoTo(0,6); // GLCD_WriteString("Letter is: "); GLCD_GoTo(0,1); GLCD_WriteString(letterstr); GLCD_GoTo(0,7); GLCD_WriteString("Continue"); do { xaxis1 = Read_xaxis(); yaxis1 = Read_yaxis(); if(xaxis1<10) xaxis1 = 0; if(yaxis1<10) yaxis1 = 0; }while(xaxis1==0 && yaxis1==0); again = 1; i = i + 1; /* GLCD_ClearScreen(); GLCD_GoTo(10,0); GLCD_WriteString("Intelligent e-book"); GLCD_GoTo(20,4); GLCD_WriteString("Restarting."); delay_ms(200); GLCD_WriteString("."); delay_ms(200); GLCD_WriteString("."); delay_ms(200); GLCD_WriteString("."); */ delay_ms(400); } while(1); }