diff --git a/imageProcessing/Interface/test.png b/imageProcessing/Interface/test.png new file mode 100644 index 0000000..68b7bff Binary files /dev/null and b/imageProcessing/Interface/test.png differ diff --git a/interface/Aker/Aker.pro b/interface/Aker/Aker.pro index b6e76fb..9e418bd 100644 --- a/interface/Aker/Aker.pro +++ b/interface/Aker/Aker.pro @@ -64,3 +64,5 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin RESOURCES += \ resources.qrc + +DISTFILES += diff --git a/interface/Aker/Aker.pro.user b/interface/Aker/Aker.pro.user index 930d293..02882aa 100644 --- a/interface/Aker/Aker.pro.user +++ b/interface/Aker/Aker.pro.user @@ -1,10 +1,10 @@ - + EnvironmentId - {360926d0-14ca-4415-9b3b-b1666c5c5f86} + {d40eca0a-e6b7-47c3-a6e9-7974ea86adcb} ProjectExplorer.Project.ActiveTarget @@ -59,14 +59,14 @@ ProjectExplorer.Project.Target.0 - Desktop - Desktop - {5c32a2d9-ed2e-44a4-bbe3-cea0423e77f0} + Desktop Qt 5.7.0 GCC 64bit + Desktop Qt 5.7.0 GCC 64bit + qt.57.gcc_64_kit 0 0 0 - /home/tiago/Aker/interface/build-Aker-Desktop-Debug + /home/rodrigo/Desktop/Rodrigo/zenith/Aker/interface/build-Aker-Desktop_Qt_5_7_0_GCC_64bit-Debug true @@ -126,7 +126,7 @@ true - /home/tiago/Aker/interface/build-Aker-Desktop-Release + /home/rodrigo/Desktop/Rodrigo/zenith/Aker/interface/build-Aker-Desktop_Qt_5_7_0_GCC_64bit-Release true @@ -186,7 +186,7 @@ true - /home/tiago/Aker/interface/build-Aker-Desktop-Profile + /home/rodrigo/Desktop/Rodrigo/zenith/Aker/interface/build-Aker-Desktop_Qt_5_7_0_GCC_64bit-Profile true @@ -304,13 +304,13 @@ Aker - Qt4ProjectManager.Qt4RunConfiguration:/home/tiago/Aker/interface/Aker/Aker.pro + Qt4ProjectManager.Qt4RunConfiguration:/home/rodrigo/Desktop/Rodrigo/zenith/Aker/interface/Aker/Aker.pro true Aker.pro false - /home/tiago/Aker/interface/build-Aker-Desktop-Debug + /home/rodrigo/Desktop/Rodrigo/zenith/Aker/interface/build-Aker-Desktop_Qt_5_7_0_GCC_64bit-Debug 3768 false true diff --git a/interface/Aker/Aker.pro.user.360926d b/interface/Aker/Aker.pro.user.360926d new file mode 100644 index 0000000..930d293 --- /dev/null +++ b/interface/Aker/Aker.pro.user.360926d @@ -0,0 +1,336 @@ + + + + + + EnvironmentId + {360926d0-14ca-4415-9b3b-b1666c5c5f86} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {5c32a2d9-ed2e-44a4-bbe3-cea0423e77f0} + 0 + 0 + 0 + + /home/tiago/Aker/interface/build-Aker-Desktop-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + /home/tiago/Aker/interface/build-Aker-Desktop-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + /home/tiago/Aker/interface/build-Aker-Desktop-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Aker + + Qt4ProjectManager.Qt4RunConfiguration:/home/tiago/Aker/interface/Aker/Aker.pro + true + + Aker.pro + false + + /home/tiago/Aker/interface/build-Aker-Desktop-Debug + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/interface/Aker/Blank.txt b/interface/Aker/Blank.txt new file mode 100644 index 0000000..c1b4616 --- /dev/null +++ b/interface/Aker/Blank.txt @@ -0,0 +1 @@ +12371269362631263982686891839663891639812639812639812639821639866982196832618698269382186938184168439469156765932646324832894639846234936238493824689326496834682346983289463489329846326823684698326832469832468324682399648623463264898362468236848623468326868346836868264832684682368468324683268326846823684326868248664868326x \ No newline at end of file diff --git a/interface/Aker/Images/left-border.png b/interface/Aker/Images/left-border.png index 62b65fa..be72421 100644 Binary files a/interface/Aker/Images/left-border.png and b/interface/Aker/Images/left-border.png differ diff --git a/interface/Aker/get_img.py b/interface/Aker/get_img.py deleted file mode 100644 index e69de29..0000000 diff --git a/interface/Aker/mm.cpp b/interface/Aker/mm.cpp index a86253f..68a077d 100644 --- a/interface/Aker/mm.cpp +++ b/interface/Aker/mm.cpp @@ -1,14 +1,156 @@ #include "mm.h" +#include #include "ui_mm.h" +#include -MM::MM(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MM) -{ - ui->setupUi(this); +#include +#include +#include +#include +#include + +#define portname "/dev/ttyUSB0" + +MM::MM(QWidget *parent):QMainWindow(parent), ui(new Ui::MM){ + + QTimer *mainTimer = new QTimer(this); + connect(mainTimer, &QTimer::timeout, [=]() { + int fd = ::open(portname, O_RDWR | O_NOCTTY | O_SYNC); + set_interface_attribs (fd, B115200, 0); + printf("Updating...\n"); + // set no blocking + //set_blocking (fd, 0); + if(fd>=0){ + QTimer::singleShot(1000,this,[=](){ + updateVals(fd); + ::close(fd); + }); + }else{ + //printf("error %d opening\n", errno); + } + }); + mainTimer->start(2000); + + + + ui->setupUi(this); + connect(ui->actionBack, &QAction::triggered, [=]() { + parentWidget()->show(); + this->close(); + }); +} + +void MM::updateVals(int fd){ + //package data; + char buff[21]; + char data[4][6]; + + memset(buff,0,sizeof(buff)); + memset(data,0,sizeof(data)); + + ::read(fd,&buff,20); + + if(buff[0]!='\0'){ + printf("\n|%s|\n",buff); + for(int i=0;i<4;i++){ + ::memcpy(data[i],&buff[5*i],5); + //printf("-%s-",data[i]); + } + + ui->val0->display(data[0]); + ui->val1->display(data[1]); + ui->val2->display(data[2]); + ui->val3->display(data[3]); + } } -MM::~MM() -{ - delete ui; +int MM::set_interface_attribs (int fd, int speed, int parity){ + struct termios tty; + memset (&tty, 0, sizeof tty); + if (tcgetattr (fd, &tty) != 0){ + return -1; + } + + cfsetospeed (&tty, speed); + cfsetispeed (&tty, speed); + + tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; // 8-bit chars + // disable IGNBRK for mismatched speed tests; otherwise receive break + // as \000 chars + tty.c_iflag &= ~IGNBRK; // disable break processing + tty.c_lflag = 0; // no signaling chars, no echo, + // no canonical processing + tty.c_oflag = 0; // no remapping, no delays + tty.c_cc[VMIN] = 0; // read doesn't block + tty.c_cc[VTIME] = 5; // 0.5 seconds read timeout + + tty.c_iflag &= ~(IXON | IXOFF | IXANY);// shut off xon/xoff ctrl + + tty.c_cflag |= (CLOCAL | CREAD); // ignore modem controls, + // enable reading + tty.c_cflag &= ~(PARENB | PARODD);// shut off parity + tty.c_cflag |= parity; + tty.c_cflag &= ~CSTOPB; + tty.c_cflag &= ~CRTSCTS; + + if (tcsetattr (fd, TCSANOW, &tty) != 0){ + return -1; + } + return 0; +} + +void MM::set_blocking (int fd, int should_block){ + struct termios tty; + memset (&tty, 0, sizeof tty); + if (tcgetattr (fd, &tty) != 0){ + return; + } + + tty.c_cc[VMIN] = should_block ? 1 : 0; + // 0.5 seconds read timeout + tty.c_cc[VTIME] = 5; + + if (tcsetattr (fd, TCSANOW, &tty) != 0){ + return; + } +} + +MM::~MM(){ + delete ui; +} + +void MM::on_sendComm_clicked(bool checked){ + QList allButtons = ui->comandos->findChildren(); + char comm[4]; + + memset(comm,255,sizeof(comm)-1); + comm[3]='\0'; + printf("%s\n",comm); + + int n; + + for(n=0;nisChecked()){ + break; + } + } + + if(n!=allButtons.size()){ + printf("Button: %d\n",n); + int fd = ::open(portname, O_RDWR | O_NOCTTY | O_SYNC); + comm[0]=('\0'+n); + printf("%s\n",comm); + ::write(fd,comm,sizeof(comm)); + ::close(fd); + } + if(n==1){ + system("python ../get_adc.py"); + }else if(n==3){ + }if(n==5){ + system("python ../get_img.py"); + system("python ../interface.py"); + }); + } + + } diff --git a/interface/Aker/mm.h b/interface/Aker/mm.h index 1a2450b..ac0e941 100644 --- a/interface/Aker/mm.h +++ b/interface/Aker/mm.h @@ -9,14 +9,23 @@ class MM; class MM : public QMainWindow { - Q_OBJECT + Q_OBJECT public: - explicit MM(QWidget *parent = nullptr); - ~MM(); + void on_sendComm_clicked(); + int set_interface_attribs (int fd, int speed, int parity); + void set_blocking (int fd, int should_block); + explicit MM(QWidget *parent = nullptr); + ~MM(); +public slots: + void updateVals(int fd); + +private slots: + void on_sendComm_clicked(bool checked); private: - Ui::MM *ui; + Ui::MM *ui; + }; #endif // MM_H diff --git a/interface/Aker/mm.ui b/interface/Aker/mm.ui index 125e915..0029fe1 100644 --- a/interface/Aker/mm.ui +++ b/interface/Aker/mm.ui @@ -6,25 +6,502 @@ 0 0 - 800 - 600 + 1225 + 668 Aker System - Mission Monitor - + + + + + + + 1 + + + 0 + + + 1 + + + 0 + + + 0 + + + + + + 1 + 0 + + + + + 380 + 256 + + + + image: url(:/resources/Images/Logo.png); +border:0px; + + + QFrame::StyledPanel + + + QFrame::Raised + + horizontalSpacer_2 + horizontalSpacer + + + + + + Qt::Horizontal + + + + 300 + 20 + + + + + + + + Qt::Horizontal + + + + 300 + 20 + + + + + + + + 0 + + + + + 0 + + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 0, 0, 128); + + + + + -1.000000000000000 + + + + + + + + 1 + 1 + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 255, 255, 220); +font: 36pt "Ubuntu Condensed"; + + + Tensão Charger + + + + + + + + 1 + 1 + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 0, 0, 128); + + + + 5 + + + QLCDNumber::Filled + + + -1.000000000000000 + + + + + + + + 1 + 1 + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 255, 255, 220); +font: 36pt "Ubuntu Condensed"; + + + 1 + + + Tensão Bateria + + + Qt::AutoText + + + + + + + + 1 + 1 + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 255, 255, 220); +font: 36pt "Ubuntu Condensed"; + + + + Tensão Painel 2 + + + true + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 0 + 1 + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 255, 255, 220); +font: 36pt "Ubuntu Condensed"; + + + Tensão Painel 1 + + + + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 0, 0, 128); + + + + -1.000000000000000 + + + + + + + + 1 + 1 + + + + + 0 + 0 + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 0, 0, 128); + + + + false + + + 5 + + + -1.000000000000000 + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 225 + 20 + + + + + + + + 0 + + + + + + 1 + 0 + + + + + 0 + 50 + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 255, 255, 220); +font: 42pt "Ubuntu Condensed"; + + + Comandos + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + border:1px solid rgba(255, 255, 255, 50); +color:rgba(255, 255, 255, 220); +font: 36pt "Ubuntu Condensed"; + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + color:rgba(255, 255, 255, 220); +font: 32pt "Ubuntu Condensed"; + + + Lançar Antena + + + + + + + + 0 + 0 + + + + color:rgba(255, 255, 255, 220); +font: 32pt "Ubuntu Condensed"; + + + Determinação de Atitude + + + + + + + + 0 + 0 + + + + color:rgba(255, 255, 255, 220); +font: 32pt "Ubuntu Condensed"; + + + Estabilização + + + + + + + + 0 + 0 + + + + Apontamento + + + + + + + + 0 + 0 + + + + color:rgba(255, 255, 255, 220); +font: 32pt "Ubuntu Condensed"; + + + Ler Parâmetros Elétricos + + + + + + + + 0 + 0 + + + + color:rgba(255, 255, 255, 220); +font: 32pt "Ubuntu Condensed"; + + + Imageamento + + + + + + + + + + + 0 + 0 + + + + + 0 + 42 + + + + color:rgba(255, 255, 255, 220); +font: 32pt "Ubuntu Condensed"; + + + Send + + + + + + + + + 0 0 - 800 - 22 + 1225 + 20 + + + color:rgb(255, 255, 255); + + + Help + + + + + + + Back + + diff --git a/interface/Aker/resources.qrc b/interface/Aker/resources.qrc index e6abc50..9222a1c 100644 --- a/interface/Aker/resources.qrc +++ b/interface/Aker/resources.qrc @@ -3,6 +3,7 @@ Images/Logo.png Images/cubesat.png Images/balloon.png + Images/left-border.png diff --git a/interface/get_adc.py b/interface/get_adc.py new file mode 100644 index 0000000..31e1f8c --- /dev/null +++ b/interface/get_adc.py @@ -0,0 +1,31 @@ +import socket + + +fileName="../adc_cv.dat" +#MASTER +socket_host="172.20.10.7" +socket_port=32001 + +# Creates socket +s = socket.socket() + +# Connect +s.connect((socket_host, socket_port)) +# Send start message +s.send("Start message".encode()) + +# Opens the file to write +with open(fileName, 'wb') as f: + print('File openned') + while True: + print('Receiving...') + data = s.recv(1024) + if not data: + break + # Escreve dados + f.write(data) + +f.close() +print('Receiving done') +s.close() +print('Closing connection') \ No newline at end of file diff --git a/interface/get_img.py b/interface/get_img.py new file mode 100644 index 0000000..1add7c8 --- /dev/null +++ b/interface/get_img.py @@ -0,0 +1,31 @@ +import socket + + +fileName="../captura.jpg" +#MASTER +socket_host="172.20.10.7" +socket_port=32001 + +# Creates socket +s = socket.socket() + +# Connect +s.connect((socket_host, socket_port)) +# Send start message +s.send("Start message".encode()) + +# Opens the file to write +with open(fileName, 'wb') as f: + print('File openned') + while True: + print('Receiving...') + data = s.recv(1024) + if not data: + break + # Escreve dados + f.write(data) + +f.close() +print('Receiving done') +s.close() +print('Closing connection') \ No newline at end of file diff --git a/interface/Aker/interface.py b/interface/interface.py similarity index 95% rename from interface/Aker/interface.py rename to interface/interface.py index 1d93da1..b93b3b4 100644 --- a/interface/Aker/interface.py +++ b/interface/interface.py @@ -71,6 +71,9 @@ def configureMenu(): btUnsupervised = tk.Button(menu, text='Manual', command=lambda:raise_frame(manual), width=20) btUnsupervised.place(relx=0.50, rely = 0.7 ,anchor = tk.CENTER) + + btUnsupervised = tk.Button(menu, text='Posicionar', command=lambda:raise_frame(getPosFrame), width=20) + btUnsupervised.place(relx=0.50, rely = 0.8 ,anchor = tk.CENTER) btExit = tk.Button(menu, text='SAIR', command=lambda:sair(), width=20) btExit.place(relx=0.50, rely = 0.9 ,anchor = tk.CENTER) @@ -155,6 +158,8 @@ def get_click(event,x,y,flags,param): if event == cv2.EVENT_LBUTTONDBLCLK: mouseX=x mouseY=y + print(mouseX) + print(mouseY) def order_points(pts): # initialzie a list of coordinates that will be ordered @@ -252,7 +257,7 @@ def configureCrop(): image = [] clone = [] -mode_DEBUG=0 +mode_DEBUG=1 def selectImagesForDB(textImages): global imgFiles @@ -559,7 +564,7 @@ def firstKmeansAllAtrib(db, imgBGR): X_train = db.iloc[:, :].values canais = [0,1,2] - num_clusters = 7 + num_clusters = 9 km = KMeans(n_clusters=num_clusters) km.fit(X_train) @@ -1044,13 +1049,13 @@ def selectImageSup(textChooseImage): text = filedialog.askopenfilename(title = "Escolha a imagem",filetypes = (("png files","*.png"),("jpg files","*.jpg"),("jpeg files","*.jpeg"),("all files","*.*"))) print(text[-4:]) print(text[-4:] == ".png") - if(text[-4:] == ".png" or text[-4:] == ".jpg" or text[-5:] == ".jpeg"): - print("aqui") - textChooseImage['text'] = text - supImgFile = text - else: - print("aqui2") - textChooseImage['text'] = 'Arquivo escolhido não é imagem' + #if(text[-4:] == ".png" or text[-4:] == ".jpg" or text[-5:] == ".jpeg"): + print("aqui") + textChooseImage['text'] = text + supImgFile = text + #else: + #print("aqui2") + #textChooseImage['text'] = 'Arquivo escolhido não é imagem' #Avisar do erro @@ -1304,6 +1309,8 @@ def classifyCenters(num_clusters,txtLabel): prop = float(img.shape[0])/img.shape[1] imgResized = cv2.resize(img,(720,int(prop*720))) + + cv2.imshow('Image',imgResized) cv2.moveWindow('Image',670,0) @@ -1388,7 +1395,82 @@ def configureManual(): #Fim da Area do MANUAL# ####################### +def posicionamento(coordenadas): + global supImgFile + i=0 + while(coordenadas[i]!=','): + i+=1 + realX=float(coordenadas[:i-1]) + realY=float(coordenadas[i+1:]) + + file=open(supImgFile,"r") + line=file.readline() + + i=0 + j=0 + while(line[i]!='('): + i+=1 + while(line[j]!=','): + j+=1 + sizeX=int(line[i+1:j-1]) + i=0 + while(line[i]!=')'): + i+=1 + sizeY=int(line[j+1:i]) + print(sizeY) + print(realY) + + prop=[float(realX/sizeX),float(realY/sizeY)] + + output=open("poscs.txt","w+") + + line=file.readline() + while(line!=""): + i=0 + j=0 + while(line[i]!='='): + i+=1 + while(line[j]!=','): + j+=1 + sizeX=float(line[i+2:j]) + + while(line[j]!='='): + j+=1 + sizeY=float(line[j+1:]) + print(prop) + print(sizeY) + + output.write("X=") + output.write(str(sizeX*prop[0])) + output.write(" Y=") + output.write(str(sizeY*prop[1])) + output.write("\n") + + line=file.readline() + + +def configurePos(): + text1 = tk.Label(getPosFrame, text = "Supervisionado", font='Helvetica 18 bold').place(relx=0.5,y=15,anchor = tk.CENTER) + + textSupImage = tk.Label(getPosFrame, text = supImgFile, wraplength=(largura - 20)) + textSupImage.place(relx=0.5,rely=0.25,anchor = tk.CENTER) + + btSelectImageSup = tk.Button(getPosFrame, text='Selecionar Focos', command=lambda:selectImageSup(textSupImage), width=20) + btSelectImageSup.place(relx=0.50, rely = 0.3 ,anchor = tk.CENTER) + + textTransf = tk.Label(getPosFrame, text = 'Tamanho (x,y)', wraplength=(largura - 20)) + textTransf.place(relx=0.5,rely=0.42, anchor = tk.CENTER) + + btGetPos = tk.Button(getPosFrame, text='Posições', command=lambda:posicionamento(E1.get()), width=10) + btGetPos.place(relx=0.5, rely = 0.65 ,anchor = tk.CENTER) + + E1 = tk.Entry(getPosFrame, bd =2) + E1.place(relx=0.5, rely = 0.50 ,anchor = tk.CENTER) + + btBack = tk.Button(getPosFrame, text='Voltar ao menu', command=lambda:raise_frame(menu), width=20) + btBack.place(relx=0.50, rely = 0.9 ,anchor = tk.CENTER) + ##################### # MAIN # @@ -1410,9 +1492,10 @@ def configureManual(): supervised = tk.Frame(window,width=largura, height=altura) auto = tk.Frame(window,width=largura, height=altura) manual = tk.Frame(window,width=largura, height=altura) +getPosFrame = tk.Frame(window,width=largura, height=altura) # Gruda os frames para que todos fechem juntos -for frame in (menu, crop, createDatabase, supervised, auto, manual): +for frame in (menu, crop, createDatabase, supervised, auto, manual, getPosFrame): frame.grid(row=0, column=0, sticky='news') #Configura todos os frames @@ -1422,6 +1505,7 @@ def configureManual(): configureSupervised() configureAuto() configureManual() +configurePos() #Inicia no frame do MENU raise_frame(menu)