Go Down

Topic: motoro a pasos sin librerias (Read 507 times) previous topic - next topic

eber

Oct 27, 2017, 02:32 am Last Edit: Oct 27, 2017, 02:40 am by eber
Hola, no sé mucho de programación y tengo una tarea sobre programar un motor a pasos para que gire a la derecha, izquierda y paso a paso en ambos sentidos, también tengo que hacer que el motor gire en sentido al que giro un potenciometro, o sea que tiene que seguir el pot y ese es el problema, la verdad no tengo idea de cómo hacer esto. Todo esto se tiene que hacer sin librería porque así lo pide el profe. espero que me puedan ayudar

#include <LiquidCrystal.h>

LiquidCrystal lcd (53, 51, 43, 41, 39, 37);

const int push_1 = 6, push_2 = 5, push_3 = 3, push_4 = 4;

void potenciometro(){
  float estadoAnterior, estado, x, y, giro;
 
  estadoAnterior = analogRead(0);
  x = estadoAnterior * (5.0 / 1023);
  y = x;
  giro = x - y;
  //estado = analogRead(0) - estadoAnterior;

  if(giro != estadoAnterior){
    if(giro > estadoAnterior)
      giroreloj();
     
    if (giro < estadoAnterior)
      girocontrario();
  }
  Serial.print(giro);
}

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(push_1, INPUT);
  pinMode(push_2, INPUT);
  pinMode(push_3, INPUT);
  pinMode(push_4, INPUT);
  lcd.begin(16, 2);
  pantalla();
  Serial.begin(9600);
}

void loop() {
 
  int i;
  int edo1 = digitalRead(push_1);
  int edo2 = digitalRead(push_2);
  int edo3 = digitalRead(push_3);
  int edo4 = digitalRead(push_4);

 
  if(edo1 == HIGH){
    for(i = 0; i < 512; i++){
      giroreloj();
    }
    delay(1000);
  }

  if(edo2 == HIGH){
    for(; i > 0 ; i--){
      girocontrario();
    }
    delay(1000);
  }

  if(edo3 == HIGH){     //paso a paso
    do{
      giroreloj();
    }while( i > 512);
  }

  if(edo4 == HIGH){     //paso a paso
    do{
      girocontrario();
    }while( i < 512);
  }

  potenciometro();
}

void girocontrario(){
  paso1();
  paso2();
  paso3();
  paso4();
  paso5();
  paso6();
  paso7();
  paso8();
}

void giroreloj(){
  paso8();
  paso7();
  paso6();
  paso5();
  paso4();
  paso3();
  paso2();
  paso1();
}

void paso1(){
  digitalWrite(8, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(2);
}
void paso2(){
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(2);
}
void paso3(){
  digitalWrite(8, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(2);
}
void paso4(){
  digitalWrite(8, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  delay(2);
}
void paso5(){
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  delay(2);
}
void paso6(){
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  delay(2);
}

void paso7(){
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  delay(2);
}

void paso8(){
  digitalWrite(8, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  delay(2);
}

void pantalla(){
  lcd.setCursor(0, 0);
  lcd.print("1: D");
  lcd.setCursor(6, 0);
  lcd.print("2: L");
  lcd.setCursor(0, 1);
  lcd.print("3: p-p");
  lcd.setCursor(7, 1);
  lcd.print("4: POT");
}

gfvalvo

No technical questions via PM. They will be ignored. Post your questions in the forum so that all may learn.

Go Up