Hello, I have a big problem with my code: when it is verificating, it a pperas the following message "a function-definition is not allowed here before '{' token" and it marks " void loop()". And I have no idea why it isn't working.
Hope you can help me (:
Here you have the code. The mistake is at the end (It is indicated with a comment)
/*
EL PROGRAMA !
*/
//servo
#include <Servo.h>
Servo servo1, servo2, servo3, servo4, servo5 ;
//motorreductor
const int a = 7;
const int b = 8;
const int c = 10;
int limit = 0;
//Bluetooth
char valor; //caracter recebido por bluetooth
//FUNCIONS
//servo
void servo1f() //función del servo1
{
String estado; //cmo sta en cada servo, para que no de error de que se repite. así solo existe aquí
delay(30); //que se espera un poquitín
while (Serial.available()) //si está conectado el bluetooth
{
char c = Serial.read(); //Lee el dato entrante y lo almacena en una variable tipo char
estado += c; //Crea una cadena tipo String con los datos entrantes ... que acumule las c
}
if (estado.length() > 0) //Se verifica que la cadena tipo String tenga un largo mayor a cero
{
servo1.write(estado.toInt()); //Manda al servo el dato en forma de entero (int)y así lo ejecuta
estado = ""; //Limpia la variable para poder leer posteriormente nuevos datos
}
}
void servo2f() //función del servo1
{
String estado; //cmo sta en cada servo, para que no de error de que se repite. así solo existe aquí
delay(30); //que se espera un poquitín
while (Serial.available()) //si está conectado el bluetooth
{
char c = Serial.read(); //Lee el dato entrante y lo almacena en una variable tipo char
estado += c; //Crea una cadena tipo String con los datos entrantes ... que acumule las c
}
if (estado.length() > 0) //Se verifica que la cadena tipo String tenga un largo mayor a cero
{
servo2.write(estado.toInt()); //Manda al servo el dato en forma de entero (int)y así lo ejecuta
estado = ""; //Limpia la variable para poder leer posteriormente nuevos datos
}
}
void servo3f() //función del servo1
{
String estado; //cmo sta en cada servo, para que no de error de que se repite. así solo existe aquí
delay(30); //que se espera un poquitín
while (Serial.available()) //si está conectado el bluetooth
{
char c = Serial.read(); //Lee el dato entrante y lo almacena en una variable tipo char
estado += c; //Crea una cadena tipo String con los datos entrantes ... que acumule las c
}
if (estado.length() > 0) //Se verifica que la cadena tipo String tenga un largo mayor a cero
{
servo3.write(estado.toInt()); //Manda al servo el dato en forma de entero (int)y así lo ejecuta
estado = ""; //Limpia la variable para poder leer posteriormente nuevos datos
}
}
void servo4f() //función del servo1
{
String estado; //cmo sta en cada servo, para que no de error de que se repite. así solo existe aquí
delay(30); //que se espera un poquitín
while (Serial.available()) //si está conectado el bluetooth
{
char c = Serial.read(); //Lee el dato entrante y lo almacena en una variable tipo char
estado += c; //Crea una cadena tipo String con los datos entrantes ... que acumule las c
}
if (estado.length() > 0) //Se verifica que la cadena tipo String tenga un largo mayor a cero
{
servo4.write(estado.toInt()); //Manda al servo el dato en forma de entero (int)y así lo ejecuta
estado = ""; //Limpia la variable para poder leer posteriormente nuevos datos
}
}
void servo5f() //función del servo1
{
String estado; //cmo sta en cada servo, para que no de error de que se repite. así solo existe aquí
delay(30); //que se espera un poquitín
while (Serial.available()) //si está conectado el bluetooth
{
char c = Serial.read(); //Lee el dato entrante y lo almacena en una variable tipo char
estado += c; //Crea una cadena tipo String con los datos entrantes ... que acumule las c
}
if (estado.length() > 0) //Se verifica que la cadena tipo String tenga un largo mayor a cero
{
servo5.write(estado.toInt()); //Manda al servo el dato en forma de entero (int)y así lo ejecuta
estado = ""; //Limpia la variable para poder leer posteriormente nuevos datos
}
}
//funcions del motorreductor
void stopf()
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
}
void esquerraf()
{
delay (10);
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
// si no puede girar más
limit = digitalRead(4); //leer qué dice el botón
if(limit == HIGH) { // si el botón esta apretado
digitalWrite(a,LOW); //girar en el sentido contrario
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
delay(100); //durante el siguiente t (calcular cuanto!!!)
stopf(); //después, parar el motor
}
//else {
//}
}
void dretaf()
{
delay (10);
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
//si no puede girar más
limit = digitalRead(4); //leer qué dice el botón
if(limit == HIGH) { // si el botón esta apretado
digitalWrite(a,HIGH); //girar en el sentido contrario
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
delay(100); //durante el siguiente t (calcular cuanto!!!)
stopf(); //después, parar el motor
}
//funcions autoprogramades
void recollirf() //funcion posicion recogida
{
//primer s'encongeix el braç (servos)
delay(500);
servo1.write();
delay(500);
servo2.write();
delay(500);
servo3.write();
delay(500);
servo4.write();
delay(500);
servo5.write();
//el motor ha de colocar el braç en alguna direcció?
//
//ara es fa que torni a pujar(motor1)
}
void autoof() //funcion posicion más usada
{
delay(500);
servo1.write()
// pue tmb tendré que aprender a hacerlo
}
void setup() {
//setup servos
servo1.attach(3); //servo1 connectat al pin digital 3
servo2.attach(5); //servo1 connectat al pin digital 5
servo3.attach(6); //servo1 connectat al pin digital 3
servo4.attach(9); //servo1 connectat al pin digital 3
servo5.attach(11); //servo1 connectat al pin digital 3
//setup motorreductor
pinMode(7, OUTPUT); // indica que he connectat els cables necessaris del microcontrolador
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
digitalWrite(a,LOW); // inicialment el motor està apagat
digitalWrite(b,LOW);
digitalWrite(c, LOW);
// polsador
pinMode(4,INPUT);
//setup mòdul bluetooth
Serial.begin(9600);
}
//programa principal
void loop() { // THE MISTAKE IS HERE
if (Serial.available()) //Si el puerto serie (Bluetooth) está disponible
{
valor = Serial.read(); //Lee el dato entrante via Bluetooth
if (valor == 'A') //Si el dato entrante es una A
{
servo1f(); //Llama la función que controla el giro del servo1
}
if (valor == 'B') //Si el dato entrante es una B
{
servo2f(); //Llama la función que controla el giro del servo2
}
if (valor == 'C') //Si el dato entrante es una C
{
servo3f(); //Llama la función que controla el giro del servo3
}
if (valor == 'D') //Si el dato entrante es una D
{
servo4f(); //Llama la función que controla el giro del servo4
}
if (valor == 'E') //Si el dato entrante es una E
{
servo5f(); //Llama la función que controla el giro del servo5
}
if (valor == 'R') //Si el dato entrante es rec
{
recollirf(); //Llama la función que ejecuta la posición de recogido
}
if (valor == 'O') //Si el dato entrante es autoo
{
autoof(); //Llama la función autoof
}
if (valor == 'S') //Si el dato entrante es stop
{
stopf(); //Llama la función stopf
}
if (valor == 'Y') //Si el dato entrante es esquerra
{
esquerraf(); //Llama la función esquerraf
}
if (valor == 'X') //Si el dato entrante es autoo
{
dretaf(); //Llama la función dretaf
}
}
}