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.
Revision 0:1ff5140add8a, committed 2022-10-27
- Comitter:
- lucio_hallage
- Date:
- Thu Oct 27 21:11:36 2022 +0000
- Commit message:
- PI_FINAL code
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Oct 27 21:11:36 2022 +0000
@@ -0,0 +1,361 @@
+#include "mbed.h"
+#include <math.h>
+
+DigitalOut IN_1(D5);
+DigitalOut IN_2(D4);
+DigitalOut EN_12(D2);
+DigitalOut IN_3(A0);
+DigitalOut IN_4(A1);
+DigitalOut EN_34(A4);
+InterruptIn ign(D8);
+InterruptIn botao(PC_13); // definição do botão de usuário
+Serial pc(USBTX, USBRX);
+PwmOut saida1(D9);
+PwmOut saida2(D14);
+PwmOut saida3(PA_14);
+PwmOut saida4(D7);
+
+int tempo = 6000;
+int m;
+int valor_pot;
+unsigned int estado;
+void toggle(void);
+int ig = 0;
+int fase = 0;
+float leitura;
+float RPM;
+float RPM_medio;
+float ta;
+float av;
+
+Timer debounce;
+Timer debounce_real;
+
+void bot_pressed(void);
+
+int main() {
+ debounce.start();
+ debounce_real.start();
+ pc.baud(9600); // definição da taxa de transferencia de dados do conector USB
+ // 3 braços começam desacoplados
+ IN_1 = 0;
+ IN_2 = 0;
+ IN_3 = 0;
+ IN_4 = 0;
+ EN_12 = 0;
+ EN_34 = 0;
+ estado = -3;
+
+ botao.fall(&bot_pressed);
+
+ while (1) {
+ wait_us(1);
+ if (estado == -3) {
+ pc.printf("\n\rescolha o modo de operacao do carro!");
+ estado = -2;
+ }
+ if (estado == -2) {
+ // pc.printf("%d",estado);
+ char s = pc.getc();
+ // pc.printf("digite o número desejado");
+ // Se o comando for 1 = temos o estado ligado (enable)
+ if (s == '1' && estado == -2) {
+
+ pc.printf("estado 1\r\n");
+ estado = 1;
+ wait_us(1000);
+ }
+ // Se o comando for 6 = temos o estado desligado (disable)
+ if (s == '2' && estado == -2) {
+
+ pc.printf("estado 2\r\n");
+ estado = 3;
+
+ wait_us(1000);
+ }
+ // Se o comando for 2 = temos a alteração entre o perfil trapezoidal e o
+ // perfil "manual"
+ if (s == '3' && estado == -2) {
+ s = '\0';
+ estado = 5;
+ pc.printf("estado 3\r\n");
+ wait_us(1000);
+ }
+ // wait_us(1000);
+ }
+ if (estado == -1) {
+ pc.printf("\n\rcarro desligado! RPM = 0. Deslocamento linear: 0 mm");
+
+ for (int i = 0; i < 60; ++i) {
+ // sequencia de acionamento de cada braço com diferentes polaridades
+ // seguidas de desacoplamento, fazendo uma sequencia que permite que o
+ // motor funcione atráves de 6 passos step1
+ pc.printf("\n\rvoltando");
+
+ EN_12 = 1;
+ EN_34 = 0;
+ IN_1 = 1;
+ IN_2 = 0;
+
+ wait_us(tempo);
+
+ IN_1 = 0;
+ IN_2 = 1;
+
+ wait_us(tempo);
+ EN_12 = 0;
+ EN_34 = 1;
+ IN_3 = 1;
+ IN_4 = 0;
+
+ wait_us(tempo);
+ IN_3 = 0;
+ IN_4 = 1;
+ wait_us(tempo);
+ }
+ pc.printf("\n\rvoltou");
+
+ IN_1 = 0;
+ IN_2 = 0;
+ IN_3 = 0;
+ IN_4 = 0;
+ EN_12 = 0;
+ EN_34 = 0;
+ estado = 0;
+ }
+ if (estado == 1) { //
+ pc.printf("\n\rtemperatura: GELADO. RPM = 1200. Pressão: 0.6 bar. "
+ "Deslocamento linear: 10 mm");
+
+ for (int i = 0; i < 60; ++i) {
+ // sequencia de acionamento de cada braço com diferentes polaridades
+ // seguidas de desacoplamento, fazendo uma sequencia que permite que o
+ // motor funcione atráves de 6 passos step1
+ pc.printf("\n\rvoltando");
+
+ EN_12 = 1;
+ EN_34 = 0;
+ IN_1 = 1;
+ IN_2 = 0;
+
+ wait_us(tempo);
+
+ IN_1 = 0;
+ IN_2 = 1;
+
+ wait_us(tempo);
+ EN_12 = 0;
+ EN_34 = 1;
+ IN_3 = 1;
+ IN_4 = 0;
+
+ wait_us(tempo);
+ IN_3 = 0;
+ IN_4 = 1;
+ wait_us(tempo);
+ }
+ pc.printf("\n\rvoltou");
+
+ IN_1 = 0;
+ IN_2 = 0;
+ IN_3 = 0;
+ IN_4 = 0;
+ EN_12 = 0;
+ EN_34 = 0;
+ estado = 0;
+ ign.rise(&toggle);
+ av = RPM*leitura+4;
+
+
+ }
+
+ if (estado == 3) { //
+ pc.printf("\n\rtemperatura: QUENTE. RPM = 1000. Pressão: 0.2 bar. Deslocamento linear: 0 mm");
+
+ for (int i = 0; i < 60; ++i) {//dentro
+ // sequencia de acionamento de cada braço com diferentes polaridades
+ // seguidas de desacoplamento, fazendo uma sequencia que permite que o
+ // motor funcione atráves de 6 passos step1
+ pc.printf("\n\rvoltando");
+
+ EN_12 = 1;
+ EN_34 = 0;
+ IN_1 = 1;
+ IN_2 = 0;
+
+ wait_us(tempo);
+
+ IN_1 = 0;
+ IN_2 = 1;
+
+ wait_us(tempo);
+ EN_12 = 0;
+ EN_34 = 1;
+ IN_3 = 1;
+ IN_4 = 0;
+
+ wait_us(tempo);
+ IN_3 = 0;
+ IN_4 = 1;
+ wait_us(tempo);
+ }
+ pc.printf("\n\rvoltou");
+
+ for (int i = 0; i < 32; ++i) {//fora
+ pc.printf("\n\rfora");
+
+ // sequencia de acionamento de cada braço com diferentes polaridades
+ // seguidas de desacoplamento, fazendo uma sequencia que permite que o
+ // motor funcione atráves de 6 passos step1
+ EN_12 = 0;
+ EN_34 = 1;
+ IN_3 = 0;
+ IN_4 = 1;
+
+ wait_us(tempo);
+
+ IN_3 = 1;
+ IN_4 = 0;
+
+ wait_us(tempo);
+ EN_34 = 0;
+ EN_12 = 1;
+
+ IN_1 = 0;
+ IN_2 = 1;
+
+ wait_us(tempo);
+
+ IN_1 = 1;
+ IN_2 = 0;
+
+ wait_us(tempo);
+ }
+ IN_1 = 0;
+ IN_2 = 0;
+ IN_3 = 0;
+ IN_4 = 0;
+ EN_12 = 0;
+ EN_34 = 0;
+ estado = 0;
+ ign.rise(&toggle);
+ av = -3*pow(10,-6)*RPM*RPM+1.5*pow(10,-2)*RPM-2;
+
+ }
+
+ if (estado == 5) {
+ pc.printf("\n\rtemperatura: LIGARAM O AR. RPM = 1100. Pressão: 0.4 bar. "
+ "Deslocamento linear: 4 mm");
+ for (int i = 0; i < 60; ++i) {//dentro total
+ pc.printf("\n\rvoltando");
+
+ EN_12 = 1;
+ EN_34 = 0;
+ IN_1 = 1;
+ IN_2 = 0;
+
+ wait_us(tempo);
+
+ IN_1 = 0;
+ IN_2 = 1;
+
+ wait_us(tempo);
+ EN_12 = 0;
+ EN_34 = 1;
+ IN_3 = 1;
+ IN_4 = 0;
+
+ wait_us(tempo);
+ IN_3 = 0;
+ IN_4 = 1;
+ wait_us(tempo);
+ }
+ for (int i = 0; i < 24; ++i) {
+ pc.printf("\n\rfora");
+ // sequencia de acionamento de cada braço com diferentes polaridades
+ // seguidas de desacoplamento, fazendo uma sequencia que permite que o
+ // motor funcione atráves de 6 passos step1
+ EN_12 = 0;
+ EN_34 = 1;
+ IN_3 = 0;
+ IN_4 = 1;
+
+ wait_us(tempo);
+
+ IN_3 = 1;
+ IN_4 = 0;
+
+ wait_us(tempo);
+ EN_34 = 0;
+ EN_12 = 1;
+
+ IN_1 = 0;
+ IN_2 = 1;
+
+ wait_us(tempo);
+
+ IN_1 = 1;
+ IN_2 = 0;
+
+ wait_us(tempo);
+ }
+ pc.printf("\n\racabou");
+ IN_1 = 0;
+ IN_2 = 0;
+ IN_3 = 0;
+ IN_4 = 0;
+ EN_12 = 0;
+ EN_34 = 0;
+ estado = 0;
+ ign.rise(&toggle);
+ av = -2*pow(10,-6)*RPM*RPM+pow(10,-2)*RPM+2;
+ }
+}
+}
+
+void toggle() {
+ leitura = debounce.read();
+ if (ig==12){
+
+ RPM = 60/leitura;
+ ta= av*1000/(RPM*6);
+ wait_us((leitura*1000-ta)*1000);
+ if (fase==0){
+ saida1.period(leitura*4);
+ saida1.write(0.050f/4);
+ }
+ if (fase==1){
+ saida3.period(leitura*4);
+ saida3.write(0.050f/4);
+ }
+ if (fase==2){
+ saida4.period(leitura*4);
+ saida4.write(0.050f/4);
+ }
+ if (fase==3){
+ saida2.period(leitura*4);
+ saida2.write(0.050f/4);
+ }
+ printf("\n\rtempo:%f e rpm:%f",leitura, RPM);
+ ig=0;
+ debounce.reset();
+ fase++;
+
+ }
+ else{
+ ig++;
+
+ }
+ debounce.reset();
+ if (fase>3){
+ fase=0;
+ }
+
+}
+void bot_pressed() {
+ if (debounce_real.read_ms() > 250) {
+ estado = -3;
+ debounce_real.reset();
+ ign.rise(NULL);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Oct 27 21:11:36 2022 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file