Go Down

Topic: Como decidir cuando y como mover motores con la Shield V2 (Read 64 times) previous topic - next topic

ArduGabs2

Buenas! Tengo un proyecto; un pequeño robot de dos ruedas controlado por el Motor Shield V2. Quiero que se mueva una determinada distancia segun segun los estados de dos sensores infrarrojos, logra hacerlo pero no de la forma correcta. Quisiera ayuda para determinar cual es el problema
Code: [Select]

#include <Wire.h>
#include <Adafruit_MotorShield.h> //lubreria para el motor shield V2
#include "utility/Adafruit_MS_PWMServoDriver.h"
int leer = 24;
int leer2 = 25;


Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // se usara el shield
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2);
Adafruit_DCMotor *myOtherMotor2 = AFMS.getMotor(3);
Adafruit_DCMotor *myOtherMotor3 = AFMS.getMotor(4);
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(leer, INPUT);
  pinMode(leer2, INPUT);

  myMotor->setSpeed(255);         
  myMotor->run(FORWARD);
  myMotor->run(RELEASE);
  myOtherMotor->setSpeed(255);     
  myOtherMotor->run(FORWARD);
  myOtherMotor->run(RELEASE); //                                               |
  myOtherMotor2->setSpeed(255);//                                              |
  myOtherMotor2->run(FORWARD);//                                               |
  myOtherMotor2->run(RELEASE);//                                               |
  myOtherMotor3->setSpeed(255); //                                             |
  myOtherMotor3->run(FORWARD);            //                                   |
  myOtherMotor3->run(RELEASE);
}

void loop() {
  int v1 = digitalRead(leer);
  int v2 = digitalRead(leer2);
  if (v1 == LOW && v2 == LOW) {
    delay(2000);
    Avance ();
    delay(4000);
    Stop();
    delay(4000);
    Reversa();
    delay(4000);

  }
  else if (v1 == HIGH && v2 == HIGH) {
    delay(2000);
    Reversa();
    delay(4000);
    Stop();
    delay(4000);
    Avance();
  }
  else  {
    Stop();
  }
}
void Avance () {
  myMotor -> run(FORWARD);
  myMotor -> setSpeed(255);
  myOtherMotor -> run(FORWARD);
  myOtherMotor -> setSpeed(255);
  myOtherMotor2 -> run(FORWARD);
  myOtherMotor2 -> setSpeed(255);
  myOtherMotor3 -> run(FORWARD);
  myOtherMotor3 -> setSpeed(255);
}
void Reversa() {
  myMotor -> run(BACKWARD);
  myMotor -> setSpeed(255);
  myOtherMotor -> run(BACKWARD);
  myOtherMotor -> setSpeed(255);
  myOtherMotor2 -> run(BACKWARD);
  myOtherMotor2 -> setSpeed(255);
  myOtherMotor3 -> run(BACKWARD);
  myOtherMotor3 -> setSpeed(255);
}
void giroIzq() {
  myMotor -> run(FORWARD);
  myMotor -> setSpeed(255);
  myOtherMotor -> run(FORWARD);
  myOtherMotor -> setSpeed(125);
  myOtherMotor2 -> run(FORWARD);
  myOtherMotor2 -> setSpeed(125);
  myOtherMotor3 -> run(FORWARD);
  myOtherMotor3 -> setSpeed(255);
}
void giroDer() {
  myMotor -> run(FORWARD);
  myMotor -> setSpeed(125);
  myOtherMotor -> run(FORWARD);
  myOtherMotor -> setSpeed(255);
  myOtherMotor2 -> run(FORWARD);
  myOtherMotor2 -> setSpeed(255);
  myOtherMotor3 -> run(FORWARD);
  myOtherMotor3 -> setSpeed(125);
}
void Stop() {
  myMotor -> run(RELEASE);
  myMotor -> setSpeed(0);
  myOtherMotor -> run(RELEASE);
  myOtherMotor -> setSpeed(0);
  myOtherMotor2 -> run(RELEASE);
  myOtherMotor2 -> setSpeed(0);
  myOtherMotor3 -> run(RELEASE);
  myOtherMotor3 -> setSpeed(0);
}
void Stop2() {
  myMotor -> run(RELEASE);

  myOtherMotor -> run(RELEASE);

  myOtherMotor2 -> run(RELEASE);

  myOtherMotor3 -> run(RELEASE);
}


surbyte

Describe mejor la situacion de lo que hace y de lo que quieres que haga.

O si no alcanza un video corto ayudaría con lo que hace y tu explica con palabras que quisieras que haga.

Go Up