Centro de Controle de Motores

Dependencies:   TextLCD mbed

Revision:
4:3bc68a7b299d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/moto_passo_v2.txt	Thu Dec 01 19:39:01 2022 +0000
@@ -0,0 +1,180 @@
+/*******************************************
+Motor de Passo
+*******************************************/
+#include "mbed.h"
+
+Serial envia(PC_10, PC_11);
+Serial pc(USBTX, USBRX);
+
+// variáveis
+int estado = 0;
+float tempo;
+char ligar = 'a';
+char desligar = 'b';
+char men_rec;
+
+// motor de passo
+DigitalOut EN_A(D2);
+DigitalOut IN1_A(D5);
+DigitalOut IN2_A(D4);
+DigitalOut EN_B(A4);
+DigitalOut IN1_B(A0);
+DigitalOut IN2_B(A1);
+
+// entradas
+InterruptIn ena_all(D11);
+InterruptIn enable(PB_6);
+DigitalIn dir(D9);
+AnalogIn POT(A5);
+
+// debouncing
+Timer debounce;
+
+
+void muda_en(){
+    if (debounce.read_ms()>200){
+        estado=!estado;
+    }
+    debounce.reset();
+}
+
+
+void muda_all(){
+    //men_rec = envia.getc();
+    if (debounce.read_ms()>200){
+        if (estado == 1 || men_rec == 'c'){ // ou
+            estado = 0;
+            envia.printf("%c", desligar);
+        }
+        else{
+            estado = 1;
+            envia.printf("%c", ligar);
+        }
+    }
+    debounce.reset();
+}
+
+void queda(){
+    debounce.reset();
+}
+
+void RX_interrupt(){
+    while (envia.readable()){
+        men_rec = envia.getc();
+    }
+}
+
+int main(){    
+    enable.rise(&muda_en);
+    ena_all.rise(&muda_all);
+    debounce.start();
+    envia.baud(9600);
+    envia.attach(&RX_interrupt, Serial::RxIrq);
+    
+    // configurações iniciais
+    EN_A = 0; 
+    EN_B = 0; 
+    IN1_A = 0;
+    IN2_A = 0;
+    IN1_A = 0;
+    IN1_B = 0;
+
+    while(1) {
+        //men_rec = envia.getc();
+        
+        if (estado == 1){
+            if (POT.read()>0.1f){
+                tempo = 0.005+(0.050*POT.read());
+            
+                //SENTIDO HORÁRIO     
+                if (dir.read() == 0){
+            
+                    // passo 0
+                    EN_A = 1;
+                    IN1_A = 1;
+                    IN2_A = 0;
+                    EN_B = 0;
+                    IN1_B = 1;
+                    IN2_B = 0;
+                    wait(tempo);
+                    
+                    // passo 1
+                    EN_A = 0;
+                    IN1_A = 0;
+                    IN2_A = 1;
+                    EN_B = 1;
+                    IN1_B = 1;
+                    IN2_B = 0;
+                    wait(tempo);
+           
+                    // passo 2
+                    EN_A = 1;
+                    IN1_A = 0;
+                    IN2_A = 1;
+                    EN_B = 0;
+                    IN1_B = 0;
+                    IN2_B = 1;
+                    wait(tempo);
+                    
+                    // passo 3
+                    EN_A = 0;
+                    IN1_A = 1;
+                    IN2_A = 0;
+                    EN_B = 1;
+                    IN1_B = 0;
+                    IN2_B = 1;
+                    wait(tempo);
+                }
+                
+                //SENTIDO ANTI-HORÁRIO
+                else if (dir.read() == 1){ 
+                
+                    // passo 0
+                    EN_A = 1;
+                    IN1_A = 1;
+                    IN2_A = 0;
+                    EN_B = 0;
+                    IN1_B = 1;
+                    IN2_B = 0;
+                    wait(tempo);
+                    
+                    // passo 1 ("passo 3")
+                    EN_A = 0;
+                    IN1_A = 1;
+                    IN2_A = 0;
+                    EN_B = 1;
+                    IN1_B = 0;
+                    IN2_B = 1;
+                    wait(tempo);
+                    
+                    // passo 2
+                    EN_A = 1;
+                    IN1_A = 0;
+                    IN2_A = 1;
+                    EN_B = 0;
+                    IN1_B = 0;
+                    IN2_B = 1;
+                    wait(tempo);
+                   
+                    // passo 3 ("passo 1")
+                    EN_A = 0;
+                    IN1_A = 0;
+                    IN2_A = 1;
+                    EN_B = 1;
+                    IN1_B = 1;
+                    IN2_B = 0;
+                    wait(tempo);
+                 }
+            }
+        }
+        
+        else{
+            EN_A = 0;
+            EN_B = 0;
+            IN1_A = 0;
+            IN2_A = 0;
+            IN1_A = 0;
+            IN1_B = 0;
+        }
+    }
+}      
\ No newline at end of file