¿como cambiar la dirección de motor dc con un botón (SOLUCIONADO)


hola hola



les cuento me encontre con este código que controla un  dc motor  con un potenciometro, va muy bien con mi proyecto


1 potenciometro
1 boton
1 dc motor
1 l298n
1 12v bateria



code: [select]

  


int ledpin =  13;    // led connected digital pin 13
int pwmpin = 11;     // pwm motor driver (/d2 pin pin on mc338870 motor board)
int motorpin1 = 7;   // motor pin 1 (in1 on mc338870 motor board)
int motorpin2 = 8;   // motor pin 2 (in2 on mc338870 motor board)
int pot = 0;        // potentiometer pin on analog input 0
                    //leave d1 , /fs , /fb unconnceted
                    //connect en +5v on arduino board
int val;
// setup() method runs once, when sketch starts

 void setup()   {    
  pinmode(reversapin, output);
  pinmode(buttonr, input);
  digitalwrite(reversapin,low);
  
            
  pinmode(ledpin, output); // initialize digital pin output:
  pinmode(pwmpin, output); // initialize digital pin output:
  pinmode(motorpin1, output); // initialize digital pin output:
  pinmode(motorpin2, output); // initialize digital pin output:
  serial.begin(9600);
}





// loop() method runs on , on again,
// long arduino has power

void loop()                    
{


 //read serial port
 val = analogread(pot);
 val = map(val,0,1023,-255,255);
 serial.println(val);
 if (val >= 0)
   {
    digitalwrite(ledpin,high);
    digitalwrite(motorpin1,low);
    digitalwrite(motorpin2,high);
    analogwrite(pwmpin,val);
   }
   else
   {
    val *= -1;
    digitalwrite(ledpin,low);
    digitalwrite(motorpin1,high);
    digitalwrite(motorpin2,low);
    analogwrite(pwmpin,val);
   }
   delay(100);
}


hace que el motor funcione como un servo controlado por un potenciometro (en el centro del potenciometro = el motor se detiene. hacia la derecha = el motor gira la derecha y viceversa) lo unico que le tengo que agregar es un botón que invierta la dirección del potenciometro una vez que sea pulsado ya intente de varias formas agregando un código como este:



code: [select]

int buttonr = 4;    
int reversapin =  5;      
int buttonstate = low;        

void setup() {
 
  pinmode(reversapin, output);
  pinmode(buttonr, input);
  digitalwrite(reversapin,low);
}

void loop() {
  
  while(digitalread(buttonr) == low);
  buttonstate = digitalread (reversapin);
  digitalwrite(reversapin,!buttonstate);
  while(digitalread(buttonr) == high);
  
}




pero no me va  y no encuentro un buen ejemplo, ¿alguna idea como le puede hacer?

aqui esta mi pobre intento

code: [select]
int revers =5;
int ledpin =  13;    // led connected digital pin 13
int pwmpin = 11;     // pwm motor driver (/d2 pin pin on mc338870 motor board)
int motorpin1 = 7;   // motor pin 1 (in1 on mc338870 motor board)
int motorpin2 = 8;   // motor pin 2 (in2 on mc338870 motor board)
int pot = 0;        // potentiometer pin on analog input 0
                    //leave d1 , /fs , /fb unconnceted
                    //connect en +5v on arduino board
int val;
// setup() method runs once, when sketch starts

 void setup()   {        
  pinmode(revers, input);      
  pinmode(ledpin, output); // initialize digital pin output:
  pinmode(pwmpin, output); // initialize digital pin output:
  pinmode(motorpin1, output); // initialize digital pin output:
  pinmode(motorpin2, output); // initialize digital pin output:
  digitalwrite(revers,high);
  
   serial.begin(9600);
}

// loop() method runs on , on again,
// long arduino has power

void loop()                    
{
 //read serial port
 val = analogread(pot);
 val = map(val,0,1023,-255,255);
 serial.println(val);
 if (val >= 0)
  
 if (digitalread (revers)== high)
 {
  digitalwrite(ledpin,high);
    digitalwrite(motorpin1,low);
    digitalwrite(motorpin2,high);
    analogwrite(pwmpin,val);
   }
   else
   {
    val *= -1;
    digitalwrite(ledpin,low);
    digitalwrite(motorpin1,high);
    digitalwrite(motorpin2,low);
    analogwrite(pwmpin,val);
   }
   delay(100);

  
  
}



de antemano, gracias por su tiempo!

disculpen por las molestias  ya lo logre   :smiley-sweat:  :smiley-sweat:  :smiley-sweat:  :smiley-sweat:    :smiley-sweat:  :smiley-sweat:  :smiley-sweat:




code: [select]
/*
 motor driver board mc338870
 
 changes speed , direction of rotation of dc motor based on the
 input potentiometer.
 
 for schematics , info refer here :https://chalmersphyscomp10.wordpress.com/2010/08/26/arduino-driving-a-motor-with-pololu-mc33887-motor-driver/
 http://chalmersphyscomp10.wordpress.com/2010/08/26/arduino-driving-a-motor-with-pololu-mc33887-motor-driver/
 
 the code written farshid jafari harandi,
 (c) spekel, spekel.se
 
 */
int revers =5;
int ledpin =  13;    // led connected digital pin 13
int pwmpin = 11;     // pwm motor driver (/d2 pin pin on mc338870 motor board)
int motorpin1 = 7;   // motor pin 1 (in1 on mc338870 motor board)
int motorpin2 = 8;   // motor pin 2 (in2 on mc338870 motor board)
int pot = 0;        // potentiometer pin on analog input 0
                    //leave d1 , /fs , /fb unconnceted
                    //connect en +5v on arduino board
int val;
// setup() method runs once, when sketch starts

 void setup()   {         
  pinmode(revers, input);       
  pinmode(ledpin, output); // initialize digital pin output:
  pinmode(pwmpin, output); // initialize digital pin output:
  pinmode(motorpin1, output); // initialize digital pin output:
  pinmode(motorpin2, output); // initialize digital pin output:
  digitalwrite(revers,high);
   
   serial.begin(9600);
}

// loop() method runs on , on again,
// long arduino has power

void loop()                     
{
 //read serial port
 val = analogread(pot);
 val = map(val,0,1023,-255,255);
 serial.println(val);
 
  if (digitalread (revers)== high){
 if (val >= 0)
 
     {
  digitalwrite(ledpin,high);
    digitalwrite(motorpin1,low);
    digitalwrite(motorpin2,high);
    analogwrite(pwmpin,val);
     }
   else
   {
    val *= -1;
    digitalwrite(ledpin,low);
    digitalwrite(motorpin1,high);
    digitalwrite(motorpin2,low);
    analogwrite(pwmpin,val);
   }
  }
  if (digitalread (revers)== low)
 
  {
   if (val >= 0)
 
 {
  digitalwrite(ledpin,high);
    digitalwrite(motorpin1,high);
    digitalwrite(motorpin2,low);
    analogwrite(pwmpin,val);
   }
   else
   {
    val *= -1;
    digitalwrite(ledpin,low);
    digitalwrite(motorpin1,low);
    digitalwrite(motorpin2,high);
    analogwrite(pwmpin,val);
   }
 
  }
   
   delay(100);

 
   
}


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > ¿como cambiar la dirección de motor dc con un botón (SOLUCIONADO)


arduino

Comments

Popular posts from this blog

Error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode - Raspberry Pi Forums

class MPU6050 has no member named begin

missing filename after '-o'