Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed filesystem TextLCD
Fork of Projeto_Mecatronico by
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.
}
