arduino error exit status 1 'comparar' was not declared in this scope

hola buenas noches necesito ayuda con este error alli les dejo mi programación

exit status 1
'comparar' was not declared in this scope
// pin del reseptor 11
#include <VirtualWire.h>
byte message [VW_MAX_MESSAGE_LEN];
byte messageLength = VW_MAX_MESSAGE_LEN ;
int boton_a = 8;
void setup (){
pinMode(boton_a,OUTPUT);
Serial.begin(9600);
vw_setup(2000);
vw_rx_start();
}
void loop () {
if ( vw_get_message(message, &messageLength)){
 if (comparar("000")==0){
digitalRead (boton_a, HIGH);}  
} 
char comparar(char  *cadena){
for(int i = 0; i<messagelength; i++) 
if (message[i] ! = cadena [i])
{
return 1;
}
{ 
return 0;
}
}  
}

missing }

void loop() {
  if (vw_get_message(message, &messageLength)) {
    if (comparar("000") == 0) {
      digitalRead(boton_a, HIGH);
    }
  }
}

Hola,

Al loop le falta una } para cerrarlo.

El segundo returt del método comparar esta fuera del método.
No puedes tener instrucciones sueltas.

gracias ya corregir lo que me dijeron y me sigue saliendo el mismo error que hago

Hola,

La verdad es que tú código esta plagado de errores.
Por otro lado, por favor pega el código nuevo en la nueva respuesta que pongas y no edites el del primer post, ya que aparte de generar confusión no se si has solucionado correctamente lo sugerido.
Para mi que en el loop sigue faltando una llave de cierre}

Luego tú declaras.
byte messageLength = VW_MAX_MESSAGE_LEN ; con mayuscula en Length pero luego usas.
for(int i = 0; i<messagelength; i++) con minuscula en Length, eso es un error este lenguaje es sensible a las mayusculas y minusculas int Nombre es diferente a int nombre, las tomaria como dos variables diferentes.

f (message ! = cadena )
{
return 1;
}
{
return 0;
}

le falta el else

if (message ! = cadena )
{
return 1;
}
else
{
return 0;
}
for(int i = 0; i<messagelength; i++)

le falta la llave de apertura
El metodo char comparar(char *cadena) espera recibir un char, tú le envias comparar("000") que es una cadena, personalmente yo creo que esta mal, quizad funcione pero no es correcto.
Corrige y postea el código nuevo y seguimos repasanda.
Indexa bien el código y sera mas facil ver si estan todas las llaves.
Usa </> arriba a la izquierda para incluir el código entre etiquetas code para que se vea mejor.

andress para comenzar bienvenido al foro Arduino.
Por esta vez, yo he editado tu código porque ya habías respondido pero no le prestaste atención a mi mensaje privado.

Dos consejos:

  1. Intenta ser ordenado en tus códigos. Un código sin identación, si dejar espacios puede ser legible para ti pero si vienes a un foro y pides ayuda debes tratar de que los demas te entendamos.
    Si tu te hubieras tomado el tiempo de ir ordenando cada paso, verías muchos de los errores del código que has presentado.
  2. Lee las normas del foro. Códigos y errores van con etiquetas </>

Aca te dejo una guia

Lee las Normas del foro
Luego ve a More (abajo a la derecha), click, luego Modify y estas en modo EDICION.
Si tienes que editar un código -> Selecciona todo el código y click en </> arriba del emoticon.
**Si tienes que editar un enlace -> Selecciona el enlace. Copialo al portapapeles. Click en el eslabón (ver abajo) y sigue los pasos que habras visto al leer las normas. **

gracias y disculpen por mis errores.
todavía no e podido solucionar el problema y ya hice lo que me dijeron que podrá ser. lo que deseo realizar es un carro que lo pueda mover atra vez de radio frecuencia 433mhz con un Joystick Shield que me recomiendan hacer.

Hola,
Si quieres que te sigamos ayudando por favor pon el código que tienes actualmente para poder revisarlo.

lo que debería hacer es que el joystick shield tiene 4 botones y el joystick con los botones debería prender leds y con el joystick manejar el carro.

miren esta es la programación del emisor del carro con el joystick shield

#include <VirtualWire.h>

int boton_a = 2 ;
int boton_b = 3 ;
int boton_c = 4 ;
int boton_d = 5  ;


const byte eje_x = 0 ;
const byte eje_y = 1 ;



void setup () {
Serial.begin(9600);
vw_setup(2000);
pinMode (boton_a,INPUT);
pinMode (boton_b,INPUT);
pinMode (boton_c,INPUT);
pinMode (boton_d,INPUT);
}
void loop (){
  int rango_x = ( analogRead (eje_x));
  int rango_y = ( analogRead (eje_y));

  if ( digitalRead(boton_a)==LOW){
    send("000");  }

else  if ( digitalRead(boton_b)==LOW){
    send("001");  }

else  if ( digitalRead(boton_c)==LOW){
    send("002");  }

    else  if ( digitalRead(boton_d)==LOW){
    send("003");  }

else  if (rango_x<=50){
    send("007");  }

else  if (rango_x>=900){
    send("008");  }

else  if (rango_y<=50){
    send("009");  }

else  if (rango_y>=900){
    send("010");  }

    else {
      send("999"); }

void send (char *message)
{
  vw_send((uint8_t *)message, strlen(message));
  vw_wait_tx();   
  serial.println(message); 

    
}
  }

y esta es la parte del receptor

#include <VirtualWire.h>
byte message [VW_MAX_MESSAGE_LEN];
byte messagelength = VW_MAX_MESSAGE_LEN ;
int boton_a = 8;
int boton_b = 9;
int boton_c = 10;
int boton_d = 12;


int ENA = 2 ;
int IN1 = 3 ;
int IN2 = 4 ;
int IN3 = 7 ;
int IN4 = 6 ;
int ENB = 5 ;
void setup (){
pinMode(boton_a,OUTPUT);
pinMode(boton_b,OUTPUT);
pinMode(boton_c,OUTPUT);
pinMode(boton_d,OUTPUT);  

pinMode(ENA,OUTPUT);  
pinMode(IN1,OUTPUT);
pinMode(INT2,OUTPUT);
pinMode(INT3,OUTPUT);
pinMode(INT4,OUTPUT);
pinMode(ENB,OUTPUT);
Serial.begin(9600);
vw_setup(2000);
vw_rx_start();
}
void loop () {
if ( vw_get_message(message, &messagelength)){
 if (comparar("000")==0){
digitalRead (boton_a, HIGH);}  
} 


else if (comparar("001") == 0){
  digitalRead (boton_b, HIGH);}

  else if (comparar("002") == 0){
  digitalRead (boton_c, HIGH);}

  else if (comparar("003") == 0){
  digitalRead (boton_d, HIGH);}




//IZQUIERDA
else if (comparar("007") == 0){
  digitalRead (IN1, LOW);
  digitalRead (IN2, HIGH);
  digitalRead (IN3, LOW);
  digitalRead (IN4, HIGH);
  digitalRead (ENA, 500);
  digitalRead (ENB, 500);}


//DERECHA
else if (comparar("008") == 0){
  digitalRead (IN1, HIGH);
  digitalRead (IN2, LOW);
  digitalRead (IN3, HIGH);
  digitalRead (IN4, LOW);
  digitalRead (ENA, 500);
  digitalRead (ENB, 500);}


//ATRAS
else if (comparar("009") == 0){
  digitalRead (IN1, HIGH);
  digitalRead (IN2, LOW);
  digitalRead (IN3, LOW);
  digitalRead (IN4, HIGH);
  digitalRead (ENA, 500);
  digitalRead (ENB, 500);}



//ADELANTE 
else if (comparar("010") == 0){
  digitalRead (IN1, LOW);
  digitalRead (IN2, HIGH);
  digitalRead (IN3, HIGH);
  digitalRead (IN4, LOW);
  digitalRead (ENA, 500);
  digitalRead (ENB, 500);}
  
  
  
//APAGADO
else if (comparar("999") == 0){
  digitalRead (IN1, HIGH);
  digitalRead (IN2, LOW);
  digitalRead (IN3, LOW);
  digitalRead (IN4, HIGH);
  digitalRead (ENA, 0);
  digitalRead (ENB, 0);
 }
char comparar(char  *cadena){
for(int i = 0; i<messagelength; i++) 
if (message[i] ! = cadena [i])
{
return 1;
}
else
{ 
return 0;
}
}  
}

Hola,
En la parte del receptor té sigue faltando un } en el loop y te sobra } en el metodo comparar.

Dentro de loop no puede ir ningun metodo, loop ya es un metodo por si solo.
Por ejemplo esto es incorrecto.

void loop () 
{
  // Programa principal
  void comparar()
  {
    //Código del metodo
  }
}

Esto es correcto.

void loop () 
{
  // Programa principal
comparar() // Llamo al metodo comparar.
}
void comparar()
{
  //Código del metodo
}

Tú declaras.

int IN1 = 3 ;
int IN2 = 4 ;
int IN3 = 7 ;
int IN4 = 6 ;

y luego usas

pinMode(INT2,OUTPUT);
pinMode(INT3,OUTPUT);
pinMode(INT4,OUTPUT);

Te sobra la T al usar la variable pinMode(IN2,OUTPUT), en las tres variables que he puesto.

digitalRead (boton_a, HIGH); Es una lectura y solo admite el argumento del numero de pin por lo que lo correcto es digitalRead (boton_a); Los tienes todos mal.
En if (message ! = cadena ) esta separado ! = no se si es error al copiar y pegar o realmente lo tienes así, si lo tienes así lo tienes que juntar o dara error al compilar !=

Parte del emisor,
Mismo problema de cierre de {} al loop le falta } y al metodo send le sobra}, por lo que el metodo send se encuentra dento del loop y eso es incorrecto.

serial.println(message); del metodo send la primera S es en mayuscula. Serial.println(message);

Creo que es todo, soluciona los problemas y vuelve a pegar el código para echarle un vistazo.