Ayuda con arduino robot de sumos URGE por favor

Iniciado por UsamaEK, 3 Octubre 2014, 16:38 PM

0 Miembros y 1 Visitante están viendo este tema.

UsamaEK

Hola, querria saber si alguien podria hacer un codigo con el lenguaje que usa arduino (derivacion de c++)para hacer un robot de sumo es para el colegio y urge un poco.
Lo que tiene que hacer el robot es lo siguiente que hace este video: https://www.youtube.com/watch?v=zW4fSSlaZ-8
que por los sensores detecte la linea blanca para que no se salga y que si ve un objetivo lo empuje hasta sacarlo del 'ring' sin que salga el. Ya se que la la mayoria del foro que saben programacion son hackers y que les gusta ayudar dando pistas para que los nobatos como yo aprendamos y la verdad lo agradezco mucho por que he aprendido muchas cosas en este foro pero es que esto es para el colegio y no tengo ni idea de arduino  si el lenguaje de arduiono no deberia estar en este subforo avisadme y gracias

engel lex

prohibido solicitar códigos hechos

si tienes una duda especifica sobre un tema puntual, eres libre de publicarla y dar más detalle... no se cuales son los robot sumos URGE, pero si das detalle se te puede ayudar
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

UsamaEK

Los robot de sumo son unos robot que funcionan con una placa de arduino. Tan solo tiene dos funciones:
1.- Detectar el color blanco para no tocarlo
2.- Empujar todo objeto que se encuentre dentro del radio de los sensores.
Eso es lo que debe hacer el codigo pero he buscado en el foro y no hay temas sobre el lenguaje de arduino se que es un derivado de lenguaje c++.

engel lex

no has conseguido nada específicamente sobre el robot, sus sensores y como usarlos? sabes algo de C para poder programar?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

UsamaEK

Sobre los sensores los tengo y se montarlos ya que sobre el tema del hardware  no tengo problemas el problema es que necesito saber el como hacer el codigo. Se algo de lenguaje C pero no mucho estoy apenas comenzando con el code blocs.He sacado algunos  codigos y los que he visto que parecen estar bien los he moificado  donde creia un fallo el codigo que he usado es este:

void setup() {

void setup() {

{
pinMode (motorR1, OUTPUT);
pinMode (motorR2, OUTPUT);
pinMode (motorL1, OUTPUT);
pinMode (motorL2, OUTPUT);
pinMode (sensFder, INPUT);
pinMode (sensFizq, INPUT);
pinMode (sensTder, INPUT);
pinMode (sensTizq, INPUT);
}


}

void loop() {
{
float buf1, buf2, valord, valort;
valord=analogRead(sensDel);
valort=analogRead(sensTras);
buf1=valord*500/1024;
buf2=valort*500/1024;

if(buf1 >= 480)
{
atras();
izquierda();
delay(400);
atras();
}


if(buf2 >= 480)
{
adelante();
izquierda();
delay(400);
adelante();
}

if(digitalRead (sensFder)==HIGH )
{
golpeFder();
}

if(digitalRead (sensFizq)==HIGH)
{
golpeFizq();
}

if(digitalRead (sensTder)==HIGH)
{
golpeTder();
}

if(digitalRead (sensTizq)==HIGH)
{
golpeTizq();
}

}

int adelante()
{
digitalWrite (motorR1, LOW);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, LOW);
}

int atras()
{
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, LOW);
digitalWrite (motorL1, LOW);
digitalWrite (motorL2, HIGH);
}

int izquierda()
{
digitalWrite (motorR1, LOW);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, LOW);
digitalWrite (motorL2, HIGH);
delay(100);
}

int derecha()
{
digitalWrite (motorR1, HIGH); //L
digitalWrite (motorR2, LOW);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, LOW);//L
delay(100);
}

int golpeFder()
{
atras();
delay(1000);
derecha();
delay(300);
adelante();
}

int golpeFizq()
{
atras();
delay(1000) ;
izquierda();
delay(300);
adelante();
}

int golpeTder()
{
adelante();
delay(1000);
izquierda();
delay(300);
atras();
}

int golpeTizq()
{
adelante();
delay(1000);
derecha();
delay(300);
atras();
}

Y el erro que me da es este:
Arduino: 1.5.8 (Windows 7), Placa:"Arduino Uno"

sketch_oct03b.ino: In function 'void setup()':
sketch_oct03b.ino:4:10: error: 'motorR1' was not declared in this scope
sketch_oct03b.ino:5:10: error: 'motorR2' was not declared in this scope
sketch_oct03b.ino:6:10: error: 'motorL1' was not declared in this scope
sketch_oct03b.ino:7:10: error: 'motorL2' was not declared in this scope
sketch_oct03b.ino:8:10: error: 'sensFder' was not declared in this scope
sketch_oct03b.ino:9:10: error: 'sensFizq' was not declared in this scope
sketch_oct03b.ino:10:10: error: 'sensTder' was not declared in this scope
sketch_oct03b.ino:11:10: error: 'sensTizq' was not declared in this scope
sketch_oct03b.ino: In function 'void loop()':
sketch_oct03b.ino:20:19: error: 'sensDel' was not declared in this scope
sketch_oct03b.ino:21:19: error: 'sensTras' was not declared in this scope
sketch_oct03b.ino:42:17: error: 'sensFder' was not declared in this scope
sketch_oct03b.ino:47:17: error: 'sensFizq' was not declared in this scope
sketch_oct03b.ino:52:17: error: 'sensTder' was not declared in this scope
sketch_oct03b.ino:57:17: error: 'sensTizq' was not declared in this scope
sketch_oct03b.ino:65:1: error: a function-definition is not allowed here before '{' token
sketch_oct03b.ino:73:1: error: a function-definition is not allowed here before '{' token
sketch_oct03b.ino:81:1: error: a function-definition is not allowed here before '{' token
sketch_oct03b.ino:90:1: error: a function-definition is not allowed here before '{' token
sketch_oct03b.ino:99:1: error: a function-definition is not allowed here before '{' token
sketch_oct03b.ino:108:1: error: a function-definition is not allowed here before '{' token
sketch_oct03b.ino:117:1: error: a function-definition is not allowed here before '{' token
sketch_oct03b.ino:126:1: error: a function-definition is not allowed here before '{' token
sketch_oct03b.ino:132:1: error: expected '}' at end of input
Error de compilación

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.



engel lex

usa las etiquetas GeSHi cuando publiques codigo (usa lenguaje C)


el error que te da eso bien te lo dice :P

primero

sketch_oct03b.ino:4:10: error: 'motorR1' was not declared in this scope
sketch_oct03b.ino:5:10: error: 'motorR2' was not declared in this scope
sketch_oct03b.ino:6:10: error: 'motorL1' was not declared in this scope
sketch_oct03b.ino:7:10: error: 'motorL2' was not declared in this scope
sketch_oct03b.ino:8:10: error: 'sensFder' was not declared in this scope
sketch_oct03b.ino:9:10: error: 'sensFizq' was not declared in this scope
sketch_oct03b.ino:10:10: error: 'sensTder' was not declared in this scope
sketch_oct03b.ino:11:10: error: 'sensTizq' was not declared in this scope


es decir en la linea 5 usas
pinMode (motorR1, OUTPUT);

pero, en que pin está motorR1, es decir, no le estás dando un numero que lo guíe, primero debes definir todas esas variables con numero reales, ej si motorR1 es pin 1

int motorR1 = 1;

el segundo error (que hace que se lancen los otros es
void loop() {
{


esa segunda llave abierta "{" genera los conflictos

y tambien la doble declaracion de setup corrige eso e intenta nuevamente
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

UsamaEK

Engel lex gracias a tus consejos ya he sacado un codigo que esta verificado y compilado ahora tan solo lo debere usar en la placa este lunes y disfrutar, ya que teoricamente funciona. Lo paso por si a alguien quiere darme otra idea, ya funciona pero el ser humano busca la perfeccion inexistente.


int motorR1 = 3;
int motorR2 = 4;
int motorL1 = 5;
int motorL2 = 6;
int sensFder = 7;
int sensFizq = 8;
int sensTder = 9;
int sensTizq = 10;
int sensDel = 0;
int sensTras = 1;



void setup() {

pinMode (motorR1, OUTPUT);
pinMode (motorR2, OUTPUT);
pinMode (motorL1, OUTPUT);
pinMode (motorL1, OUTPUT);
pinMode (sensFder, INPUT);
pinMode (sensFizq, INPUT);
pinMode (sensTder, INPUT);
pinMode (sensTizq, INPUT);
}


void loop() {


  float buf1, buf2, valord, valort;
  valord = analogRead(sensDel);
  valort = analogRead(sensTras);
  buf1 = valord * 500 / 1024;
  buf2 = valort * 500 / 1024;

  if (buf1 >= 480)
  {
    atras();
    izquierda();
    delay(400);
    atras();
  }


  if (buf2 >= 480)
  {
    adelante();
    izquierda();
    delay(400);
    adelante();
  }

  if (digitalRead (sensFder) == HIGH )
  {
    golpeFder();
  }

  if (digitalRead (sensFizq) == HIGH)
  {
    golpeFizq();
  }

  if (digitalRead (sensTder) == HIGH)
  {
    golpeTder();
  }

  if (digitalRead (sensTizq) == HIGH)
  {
    golpeTizq();
  }

}

int adelante()
{
  digitalWrite (motorR1, LOW);
  digitalWrite (motorR2, HIGH);
  digitalWrite (motorL1, HIGH);
  digitalWrite (motorL2, LOW);
}

int atras()
{
  digitalWrite (motorR1, HIGH);
  digitalWrite (motorR2, LOW);
  digitalWrite (motorL1, LOW);
  digitalWrite (motorL2, HIGH);
}

int izquierda()
{
  digitalWrite (motorR1, LOW);
  digitalWrite (motorR2, HIGH);
  digitalWrite (motorL1, LOW);
  digitalWrite (motorL2, HIGH);
  delay(100);
}

int derecha()
{
  digitalWrite (motorR1, HIGH); //L
  digitalWrite (motorR2, LOW);
  digitalWrite (motorL1, HIGH);
  digitalWrite (motorL2, LOW);//L
  delay(100);
}

int golpeFder()
{
  atras();
  delay(1000);
  derecha();
  delay(300);
  adelante();
}

int golpeFizq()
{
  atras();
  delay(1000) ;
  izquierda();
  delay(300);
  adelante();
}

int golpeTder()
{
  adelante();
  delay(1000);
  izquierda();
  delay(300);
  atras();
}

int golpeTizq()
{
  adelante();
  delay(1000);
  derecha();
  delay(300);
  atras();
}


PD: Te vuelvo a dar las gracias.

Bundor

Si quieres pulir un poco mas, la función delay intenta evitarla, la razón es que paraliza todo el programa y podrías ejecutar otras cosas y ser mas veloz.

Para sustituirlo bastaría con esto:

long interval = 500; //aqui pones los milisegundos

void loop(){

if(currentMillis - previousMillis > interval) {
           previousMillis = currentMillis;   
           accion>>>poner acciones
    }
}