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
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
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++.
no has conseguido nada específicamente sobre el robot, sus sensores y como usarlos? sabes algo de C para poder programar?
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.
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
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.
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
}
}