ayudaaaaa por favor de dios

hola muy buenas noches a todos , me e vuelto loco intentando desifrar por que mi codigo esta mal y pido ayuda por favor , resulta que tengo este codigo
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

Servo microservo9g;

#define SS_PIN 10
#define RST_PIN 9
// modulo RC522
MFRC522 mfrc522(SS_PIN, RST_PIN);

// Leds indicadores acesso liberado o negado
int led_liberado = 4;
int led_negado = 7;
int TriggerPin = 6; // declaramos la palabra trigger como un tipo entero y al mismo tiempo reemplaza al pin 9
int EchoPin = 5; // declaramos la palabra echo como un tipo entero y al mismo tiempo reemplaza al pin 8
char st[20];
float distancia;
long tiempo;

void setup()
{

pinMode(led_liberado, OUTPUT);
pinMode(led_negado, OUTPUT);
// Define el puerto 3 para el servo
microservo9g.attach(3);
// Move o servo para a posicao inicial (cancela fechada)

microservo9g.write(80);
// Inicia a serial
Serial.begin(9600);
// Inicia SPI bus
SPI.begin();
// Inicia MFRC522
mfrc522.PCD_Init();
//Mensajes iniciales en el monitor de serie
Serial.println("Aproxime su tarjeta del lector ...");
Serial.println();
pinMode(2,INPUT);
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
}

void loop()
{

// Espera la aproximación de la tarjeta
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Selecciona uno de los cartones
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
// UID de muestra para serial
Serial.print("UID da tag :");
String conteudo= "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte*, HEX);*
conteudo.concat(String(mfrc522.uid.uidByte < 0x10 ? " 0" : " "));
conteudo.concat(String(mfrc522.uid.uidByte*, HEX));*
}
Serial.println();
Serial.print("Mensagem : ");
conteudo.toUpperCase();
// Prueba si se ha leído la tarjeta1
if (conteudo.substring(1) == "21 D5 0F 1A")
{
// Levanta a cancela e acende o led verde
microservo9g.write(-90);
digitalWrite(led_liberado, HIGH);
Serial.println("Tarjeta1 - Acceso liberado!");
Serial.println();
/* SESSSSOR */
digitalWrite(TriggerPin, HIGH); //se envía un pulso para activar el sensor
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
// medimos el pulso de respuesta
tiempo = (pulseIn(EchoPin, HIGH)/2);
// dividido por 2 por que es el
// tiempo que el sonido tarda
// en ir y en volver
// ahora calcularemos la distancia en cm
// sabiendo que el espacio es igual a la velocidad por el tiempo
// y que la velocidad del sonido es de 343m/s y que el tiempo lo
// tenemos en millonesimas de segundo
distancia = float(tiempo * 0.0343);
Serial.print("Distancia: "); // imprime la distancia en el Monitor Serie
Serial.println(distancia);
if (distancia >= 10)
{
microservo9g.write(80);
digitalWrite(led_liberado, LOW);
delay(1500);
}
}
//Prueba si la tarjeta2 se lee
if (conteudo.substring(1) == "5C 70 B9 79")
{
Serial.println("Tarjeta2 - Acceso denegado !!");
Serial.println();
// Pisca o led vermelho
for (int i= 1; i<5 ; i++)
{
digitalWrite(led_negado, HIGH);
delay(200);
digitalWrite(led_negado, LOW);
delay(200);
}
}
delay(1000);
}
pero donde se supone esta la condicion para que mi servomotor baje es esta
if (distancia >= 10)
{
microservo9g.write(80);
digitalWrite(led_liberado, LOW);
delay(1500);
}
aora resultaa cuando lo compilo , nunca se cumple esa condicion y si sube mi servo pero no baja , alguien podria ayudarme por favor

Hola,

aora resultaa cuando lo compilo , nunca se cumple esa condicion y si sube mi servo pero no baja , alguien podria ayudarme por favor

¿Que condición no se cumple? me imagino que la tercera ya que hablas algo de que no se mueve el servo.
¿Que se espera que contenga conteudo?, ¿por que usas substring? substring es base cero, por lo que tu comparación desecha el primer caracter del string ¿es eso lo que se pretende?
Podrias hacer esta prueba, metodo de depuración

Serial.print(conteudo.substring(1));
// Prueba si se ha leído la tarjeta1
if (conteudo.substring(1) == "21 D5 0F 1A")
{

y dinos que aparece en el monitor serie.

Por cierto, seria buena idea que editaras tu post y usaras las etiquetas de código para poner el código. Con que seleciones el codigo y pulses el botoncito </> es suficiente.

a por cierto, creo y por eso lo pongo aparte ya que no estoy seguro al no haber usado un servo nunca, que nuestro arduino no entiende -90º, el angulo de giro del servo sera de 0 a 180, por lo que si tu lo moviste 80º "microservo9g.write(80);" para recuperarlo sera "microservo9g.write(0);" y no microservo9g.write(-90);

rodripelto:
Hola,
¿Que condición no se cumple? me imagino que la tercera ya que hablas algo de que no se mueve el servo.
¿Que se espera que contenga conteudo?, ¿por que usas substring? substring es base cero, por lo que tu comparación desecha el primer caracter del string ¿es eso lo que se pretende?
Podrias hacer esta prueba, metodo de depuración

Serial.print(conteudo.substring(1));

// Prueba si se ha leído la tarjeta1
if (conteudo.substring(1) == "21 D5 0F 1A")
{



y dinos que aparece en el monitor serie.

Por cierto, seria buena idea que editaras tu post y usaras las etiquetas de código para poner el código. Con que seleciones el codigo y pulses el botoncito </> es suficiente.

a por cierto, creo y por eso lo pongo aparte ya que no estoy seguro al no haber usado un servo nunca, que nuestro arduino no entiende -90º, el angulo de giro del servo sera de 0 a 180, por lo que si tu lo moviste 80º "microservo9g.write(80);" para recuperarlo sera "microservo9g.write(0);" y no microservo9g.write(-90);

ante mano amigo muchas gracias por contestar mi post , ya e solucionado mi problema solo tenia una estructura de control mal

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

Servo microservo9g;

#define SS_PIN 10
#define RST_PIN 9
// modulo RC522
MFRC522 mfrc522(SS_PIN, RST_PIN);

// Leds indicadores acesso liberado o negado
int led_liberado = 4;
int led_negado = 7;
int TriggerPin = 6; // declaramos la palabra trigger como un tipo entero y al mismo tiempo reemplaza al pin 9
int EchoPin = 5; // declaramos la palabra echo como un tipo entero y al mismo tiempo reemplaza al pin 8
char st[20];
float distancia;
long tiempo;
int condicion=5;

void setup()
{

pinMode(led_liberado, OUTPUT);
pinMode(led_negado, OUTPUT);
// Define el puerto 3 para el servo
microservo9g.attach(3);
// Move o servo para a posicao inicial (cancela fechada)

microservo9g.write(80);
// Inicia a serial
Serial.begin(9600);
// Inicia SPI bus
SPI.begin();
// Inicia MFRC522
mfrc522.PCD_Init();
//Mensajes iniciales en el monitor de serie
Serial.println("Aproxime su tarjeta del lector ...");
Serial.println();
pinMode(2,INPUT);
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
}

void loop()
{

// Espera la aproximación de la tarjeta
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Selecciona uno de los cartones
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
// UID de muestra para serial
Serial.print("UID da tag :");
String conteudo= "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte < 0x10 ? " 0" : " ");
_ Serial.print(mfrc522.uid.uidByte*, HEX);_
_ conteudo.concat(String(mfrc522.uid.uidByte < 0x10 ? " 0" : " "));
conteudo.concat(String(mfrc522.uid.uidByte, HEX));
}
Serial.println();
Serial.print("Mensagem : ");
conteudo.toUpperCase();*_

* // Prueba si se ha leído la tarjeta1*
* if (conteudo.substring(1) == "21 D5 0F 1A")*
* {*

* // Levanta a cancela e acende o led verde*
* microservo9g.write(-90);*
* digitalWrite(led_liberado, HIGH);
_ Serial.println("Tarjeta1 - Acceso liberado!");
Serial.println();
do*

* {
/ SESSSSOR /
digitalWrite(TriggerPin, HIGH); //se envía un pulso para activar el sensor*

* delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
// medimos el pulso de respuesta*

* tiempo = (pulseIn(EchoPin, HIGH)/2);*_

* // dividido por 2 por que es el*
* // tiempo que el sonido tarda*
* // en ir y en volver*
* // ahora calcularemos la distancia en cm*
* // sabiendo que el espacio es igual a la velocidad por el tiempo*
* // y que la velocidad del sonido es de 343m/s y que el tiempo lo*
* // tenemos en millonesimas de segundo*

_ distancia = float(tiempo * 0.0343);//0.0343_
* Serial.print("Distancia: "); // imprime la distancia en el Monitor Serie*
* Serial.println(distancia);*

* if (distancia >= 9)*
* {*
* break;*
* }else*
* {*
* Serial.print("esperando a que el usuario pase ");*
* delay(2000);*
* }*

* }while(condicion==5);*

* microservo9g.write(80);*
* digitalWrite(led_liberado, LOW);*

* }*

* //Prueba si la tarjeta2 se lee*
* if (conteudo.substring(1) == "5C 70 B9 79")*
* {*
* Serial.println("Tarjeta2 - Acceso denegado !!");*
* Serial.println();*
* // Pisca o led vermelho*
* for (int i= 1; i<5 ; i++)*
* {*
* digitalWrite(led_negado, HIGH);
_ delay(200);_
digitalWrite(led_negado, LOW);
_ delay(200);*_

* }*

* }*
* delay(1000);*
}[/quote]
mi proyecto se encarga como ves de realizar un sistema de acceso veicular utilizando la tecnologia rfid , y sensores ultrasonicos en mi caso ,la funcion era que cuando el auto se encontrara en el rango definido por mi la pluma no bajara y evitara golpear al auto , en esa condicion es donde tenia mal , asi que realize esta modificacion
if (conteudo.substring(1) == "21 D5 0F 1A")
* {*

* // Levanta a cancela e acende o led verde*
* microservo9g.write(-90);*
* digitalWrite(led_liberado, HIGH);
_ Serial.println("Tarjeta1 - Acceso liberado!");
Serial.println();
do*

* {
/ SESSSSOR /
digitalWrite(TriggerPin, HIGH); //se envía un pulso para activar el sensor*

* delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
// medimos el pulso de respuesta*

* tiempo = (pulseIn(EchoPin, HIGH)/2);*_

* // dividido por 2 por que es el*
* // tiempo que el sonido tarda*
* // en ir y en volver*
* // ahora calcularemos la distancia en cm*
* // sabiendo que el espacio es igual a la velocidad por el tiempo*
* // y que la velocidad del sonido es de 343m/s y que el tiempo lo*
* // tenemos en millonesimas de segundo*

_ distancia = float(tiempo * 0.0343);//0.0343_
* Serial.print("Distancia: "); // imprime la distancia en el Monitor Serie*
* Serial.println(distancia);*

* if (distancia >= 9)*
* {*
* break;*
* }else*
* {*
* Serial.print("esperando a que el usuario pase ");*
* delay(2000);*
* }*

* }while(condicion==5);*

* microservo9g.write(80);*
* digitalWrite(led_liberado, LOW);*

* }*
la cual me permite que el usuario aunque se quede en midio de la pluma , la pluma nunca baje asta que el sensor no detecte objetos delante de el