Shish

Dependencies:   mbed USBDevice GLCD

main.cpp

Committer:
montie97
Date:
2021-05-06
Revision:
0:9ae27a35a771
Child:
1:a32ccf18194d

File content as of revision 0:9ae27a35a771:

#include "mbed.h"
#include "GLCD.h"
#include "GLCD.c"
#include "AsciiLib.c"
#include "HzLib.c"
#include "USBSerial.h"
#include "TouchPanel.h"
#include <vector>

//FUNZIONI GIORGIO
void readtouch();

//VARIABILI GIORGIO
Coordinate tocco;
int x,y,k,avg_x,avg_y,ready;

int startGame=0;
int isWritten=0;
int inferenceStarted=0;
uint8_t drawnPoints[28][28];
int threshold = 32;
USBSerial serial;

/*Buttons*/
typedef enum {space,infer,del} button;

/* Private function prototypes -----------------------------------------------*/                
void spaceText(int x1, int x2, int yText, int spessore, uint16_t color);
void clearPad(void);
void showCompression(void);
void clearBar(void);
void drawButtons(void);
void drawButton(button b, uint16_t color);
void start(void);
void drawTriangle(int posX, int posY, int lungMax);

int main() {
    LCD_Initialization();
    TP_Init();
    LCD_Clear(Blue2);
    
    clearBar();
    drawButtons();
    start();
    
    while(1){
        readtouch();
        serial.printf("%u %u\n", tocco.x, tocco.y);
        wait(1);
    }
}

/*******************************************************************************
* Function Name  : spaceText
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention      : None
*******************************************************************************/
void spaceText(int x1, int x2, int yText, int spessore, uint16_t color){ //Spazio di un unico colore
    int i;
    for(i=spessore;i>0;i--){
        LCD_DrawLine(x1,yText-i,x2,yText-i,color);
    }
    return;
}

/*******************************************************************************
* Function Name  : clearPad
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention      : None
*******************************************************************************/
void clearPad(){
    int i,j;
    for(i=0;i<224;i++){
        LCD_DrawLine(8,52+i,232,52+i,White);
    }
    for(i=0;i<28;i++) //also clear the matrix
        for(j=0;j<28;j++)
            drawnPoints[i][j]=0;
    
    return;
}

/*******************************************************************************
* Function Name  : showCompression
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention      : None
*******************************************************************************/
void showCompression(){
    int i,j;
    for(i=0;i<224;i++){ //clean the pad
        LCD_DrawLine(8,52+i,232,52+i,White);
    }
    for(i=0;i<28;i++)
        for(j=0;j<28;j++)
            if(drawnPoints[i][j]==1)
                LCD_SetPoint(i+110,j+150,Black);  
    
    return;
}

/*******************************************************************************
* Function Name  : clearBar
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention      : None
*******************************************************************************/
void clearBar(){
    int i;
    for(i=0;i<32;i++){
        LCD_DrawLine(8,10+i,232,10+i,White);
    }
    return;
}

/*******************************************************************************
* Function Name  : drawButton
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention      : None
*******************************************************************************/
void drawButton(button b, uint16_t color){
    int i;
    switch(b){
        case space: //Space Button
            spaceText(8,87,291,8,color); 
            GUI_Text(8, 291, (uint8_t *) "  Space   ", Blue, color,1);
            spaceText(8,87,291+16+8,8,color);
            break;
        case infer: //Infer Button
            for(i=0;i<32;i++){ 
                LCD_DrawLine(100,283+i,139,283+i,color);
            }
            drawTriangle(112,289,10);
            break;
        case del: //Delete Button
            spaceText(153,232,291,8,color); 
            GUI_Text(153, 291, (uint8_t *) "  Delete  ", Blue, color,1);
            spaceText(153,232,291+16+8,8,color);
            break;
        default:
            break;
    }
    return;
}

/*******************************************************************************
* Function Name  : drawButtons
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention      : None
*******************************************************************************/
void drawButtons(){
    drawButton(space,White);
    drawButton(infer,White);
    drawButton(del,White);
    return;
}

/*******************************************************************************
* Function Name  : drawTriangle
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention      : None
*******************************************************************************/
void drawTriangle(int posX, int posY, int lungMax){
    int i;
    uint16_t color=Green2;
    for(i=0;i<lungMax;i++){ //Direction EAST
            LCD_DrawLine(posX+5,posY+i+1,posX+5+i,posY+i+1,color);
    }
    for(i=0;i<lungMax-1;i++){
            LCD_DrawLine(posX+5,posY+lungMax+i+1,posX+5+(lungMax-2)-i,posY+lungMax+i+1,color);
    }
}

/*******************************************************************************
* Function Name  : start
* Description    : 
* Input          : None
* Output         : None
* Return         : None
* Attention      : None
*******************************************************************************/
void start(){
    //disable_timer(0);
    //reset_timer(0);
    
    clearPad();
    GUI_Text(22, 90, (uint8_t *) "Touch to", Black, White, 3);
    GUI_Text(32, 135, (uint8_t *)" start", Black, White, 3);
    GUI_Text(28, 185, (uint8_t *) "writing!", Black, White, 3);
    
    startGame=0;
    isWritten=0;
    inferenceStarted=0;
    //enable_timer(0);
    
    return;
}

// FUNZIONI GIORGIO

void readtouch(){
    if(Read_X()!=4095){
        wait(0.1);
        for(k=0; k<400;k++){
            x=Read_Y();
            y=Read_X();
            x=(x-300)*240/3900;
            y=(y-220)*320/3800;
            avg_x+=x;
            avg_y+=y;
        }
        avg_x=avg_x/400;
        avg_y=avg_y/400;
        tocco.x=avg_x+10;
        tocco.y=avg_y+19;
        ready=1;
    }
    else
        ready=0;
}