Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: UsamaEK en 3 Octubre 2014, 16:38 pm



Título: Ayuda con arduino robot de sumos URGE por favor
Publicado por: UsamaEK en 3 Octubre 2014, 16:38 pm
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


Título: Re: Ayuda con arduino robot de sumos URGE por favor
Publicado por: engel lex en 3 Octubre 2014, 17:28 pm
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


Título: Re: Ayuda con arduino robot de sumos URGE por favor
Publicado por: UsamaEK en 3 Octubre 2014, 18:55 pm
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++.


Título: Re: Ayuda con arduino robot de sumos URGE por favor
Publicado por: engel lex en 3 Octubre 2014, 19:04 pm
no has conseguido nada específicamente sobre el robot, sus sensores y como usarlos? sabes algo de C para poder programar?


Título: Re: Ayuda con arduino robot de sumos URGE por favor
Publicado por: UsamaEK en 3 Octubre 2014, 19:36 pm
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.




Título: Re: Ayuda con arduino robot de sumos URGE por favor
Publicado por: engel lex en 3 Octubre 2014, 19:46 pm
usa las etiquetas GeSHi cuando publiques codigo (usa lenguaje C)


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

primero

Código:
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
Código
  1. 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

Código
  1. int motorR1 = 1;

el segundo error (que hace que se lancen los otros es
Código
  1. void loop() {
  2. {

esa segunda llave abierta "{" genera los conflictos

y tambien la doble declaracion de setup corrige eso e intenta nuevamente


Título: Re: Ayuda con arduino robot de sumos URGE por favor
Publicado por: UsamaEK en 3 Octubre 2014, 20:29 pm
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.
Código:

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.


Título: Re: Ayuda con arduino robot de sumos URGE por favor
Publicado por: Bundor en 18 Octubre 2014, 04:43 am
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:

Código
  1. long interval = 500; //aqui pones los milisegundos
  2.  
  3. void loop(){
  4.  
  5. if(currentMillis - previousMillis > interval) {
  6.           previousMillis = currentMillis;  
  7.           accion>>>poner acciones
  8.    }
  9. }