Projeto_Mecatronico_Team / Mbed 2 deprecated Projeto_Mecatronico

Dependencies:   mbed filesystem TextLCD

Fork of Projeto_Mecatronico by Fernando Sakabe

posicao.cpp

Committer:
ricardoparanhos
Date:
2022-06-19
Revision:
36:6e46a3e4df6c
Parent:
33:74bf0462ad96

File content as of revision 36:6e46a3e4df6c:

#include "posicao.h"
#include <iostream>


using namespace std;

DigitalIn enter_button(PA_12);
int posicoes[12][4] = {0};  //Matriz onde será alocado inicialmente as varáveis
int posicoes_enviar[4][12] = {0}; //Matriz onde será alocado as varáveis no final e que será mandada para a main
int i = 1; // contador relacionado as posicoes de PEGA e Solta
int b = 1;//Varável que faz o LCD printar apenas quando o valor de i muda
int v=0;
int t = 1;
int h=0;
bool l=1;
int qtd_ml = 1; // variável que guarda a cada iteração a quantidade de ml a ser colocada.
int m=0; //Variavel que faz o LCD printar apenas quando o qtd_ml muda
int sair = 0; //Variável que faz
char buffer[80]; //buffer onde variavel com frases a serem impressas no lcd está.
bool flag_ml=0;

void quantidade_de_ml(int x)
{
    flag_ml=0;
    wait(1);
    if(x>1) {//Só coloca ml se variavel for SOLTA, e não PEGA.
        qtd_ml=1;
        m=0;
        while(arrow_right_button == 1) {//Interação com usuário, importante.
            if(flag_ml==0) {
                mostrar_no_lcd("Aperte Sim para     definir a quantidadede ml");
                flag_ml=1;

            }
        }
        wait(0.5);
        while(arrow_right_button == 1) {
            if(qtd_ml!=m) {
                m=qtd_ml;
                sprintf(buffer,"Depositar %i ml?", qtd_ml ); //frase que indica quantos mls serão depositados


                mostrar_no_lcd(buffer);
            }

            if (arrow_up_button == 0) {
                qtd_ml++;
                wait(0.5);
            } else if (arrow_down_button ==0 && qtd_ml>1) {//não pode depositar menos de 1 ml
                qtd_ml--;
                wait(0.5);
            }

        }
        posicoes[x][3]=qtd_ml;
        wait(0.5);
    }
}

void SD()
{
    mostrar_no_lcd("Deseja Salvar       Posicoes no SD?");
    wait(1);

    while(l) {
        if (enter_button==0) {
            mostrar_no_lcd("Posicoes definidas com sucesso!");
            l=0;

        }
        if(arrow_right_button==0) {
            escrever_SD();
            mostrar_no_lcd("Posicoes definidas e salvas no SD. Sim para continuar.");

            l=0;
        }
    }
}

void setar_posicoes()

{
    mostrar_no_lcd_setar(i);
    while( i<10 && i>-1 && sair==0) {
        acionar_perifericos (1, 0);
        if(b!=i) {//Código que faz o LCD Printar apenas quando i for diferente de b, isto é, quando i mudar e b não. PAra não printar várias vezes ele faz o b ser igual a i.
            mostrar_no_lcd_setar(i);

            b=i;
        }
        if(arrow_left_button == 0 && v!=1) { //código que faz voltar as posições
            i--;
            v++;
        }
        if(arrow_right_button == 0) {
            if(t>i) {
                wait(0.5);
                posicionamento(i,i);//Pega as posições do proximo frasco
                t--;
            } else {
                wait(0.5);
                posicionamento(i,i-1); //pega posições de antes a partir do arrow_left_button

            }
            wait(0.5);
            quantidade_de_ml(i);
            wait(0.5);
            printf("%i \n",posicoes[i][2]);
            mostrar_no_lcd("Subindo Z..."); //sempre sobe para z
            subir_z(posicoes[i][2]);
            z_desliga();

            i++;
            t++;
            v=0;

        } else if(enter_button == 0 && i>2) {
            sair = 1;
            mostrar_no_lcd("Indo para home...");

            x_home(posicoes[i-1][0]);
            x_desliga();
            y_home(posicoes[i-1][1]); //termina ciclo
            y_desliga();
        }

    }

    for (int k = 0; k < 12; k++) {
        for (int g = 0; g < 4; g++) {
            posicoes_enviar[g][k] = posicoes[k][g];
        }
    }
    for(int x=0; x<12; x++) {
        for(int y=0; y<4; y++) {
            printf("%i",posicoes[x][y]);
            printf(";");
        }
        printf("\n");
    }
    printf("\n");

    for(int x=0; x<4; x++) {
        for(int y=0; y<12; y++) {
            printf("%i",posicoes_enviar[x][y]);
            printf(";");
        }
        printf("\n");
    }
    SD(); //entra em função se deseja ou não escrever posições no SD.


}