Hola no se si me puedan ayudar estoy usando un modulo rf 433 para comunicar 2 arduinos
Lo que trato de hacer es que de un lado usando un sensor resistivo cuando marque una cierta presion mande un pulso desde el emisor
Y del otro lado en el receptor cada vez que llegue el el mensaje o pulso un contador lo registe y llegando a 10 re reinicie
Mi problema esque ya comprobe que estan conectados pero cuando hago las presiones no manda nada
Estoy mas que seguro que tengo algun error de acomodo en mi programacion o simplemente esta mal jaja
Gracias por la ayuda de antemano les dejo las programaciones
//emisor
#include <RH_ASK.h>
#include <SPI.h>
RH_ASK rf_driver;
#define Sensor A0
void setup(){
rf_driver.init();
}
void loop() {
int n=Sensor;
if (n>=740){
const char *msg = "1";
rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
}
else{
while (analogRead(Sensor) > 740) {} // Espera a una nueva presion
while (analogRead(Sensor) < 750) {}
}
}
Parto de la suposición que los comandos de envio y recepcion son correctos , lo siento no tengo ese modulo ni usado nunca esa libreria.
Programa emisor:
¿donde lees el sensor para ejecutar el if o el else?. ¿Con esto?
int n=Sensor;
Con eso solo almacenas en "n" el valor de la variable sensor, que la tienes definida antes del setup como A0 , 14 si no recuerdo mal, luego nunca ejecutaras la tranmision y estaras perdida por los while del else.
Esa linea debe decir:
int n = analogRead(Sensor);
Ahora si se efectuara la transmision cuando n sea mayor que 740, pero puedes tener el mismo problema que tenias en el otro hilo, si esa transmision es rapida puedes tener varias lecturas y transmisiones con una sola pulsacion ya que no se ejecutan los while del else.
Yo reestructuraría el codigo de la siguiente forma:
//emisor
#include <RH_ASK.h>
#include <SPI.h>
RH_ASK rf_driver;
#define Sensor A0
const char *msg = "1";
void setup() {
rf_driver.init();
}
void loop() {
while (analogRead(Sensor) < 750) {}// Espera a una nueva presion
while (analogRead(Sensor) > 740) {} //Espera a que pase la presion
// Ya no hace falta el if, si se ha llegado a este punto se ha producido
// una presion y ha terminado, por lo tanto se transmite directamente el evento
rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
// se reinicia el loop y a esperar una nueva presion.
}
Programa receptor:
No le veo nada raro y deberia mostrar corectamente un numero de cero a 9 seguido de "/10 grapas." y eso me hace dudar de lo que realmente quieres. Si realmente lo que quieres es contabilizar el numero total de grapas / 10 , no deberias resetar la variable " contador " y usar un "loop" similar a este:
Se refiere a x grapas de un total de 10, no a x/10 grapas.
Ejemplo análogo: "Página 1/10" que es equivalente a "Página 1 de 10" y se interpreta como "Página 1 de un total de 10 páginas"
@ayaxstr , esos while() bloquean la ejecución del programa y solo te van a servir mientras no se te ocurra querer hacer otra tarea durante esa espera. Tenlo en cuenta.
No pense en eso, si es asi el codigo del receptor para mi no deberia causar problemas.
No necesariamente, observa que no cierro los while con " ; " los termino con " { } " . Se puede meter algo entre ellos . ¿ Algun pitido en el segundo o leer un boton en el primero por ejemplo ?
Algo simple por supuesto ya que la prioridad es leer las grapas.
saludos.
Estas dos lineas bloquean el uso del AD porque le dicen que todo lo que esta por debajo de 750 no haga nad y todo lo que esta por encima de 740 tampoco
Ambas restricciones hacen que no salgan nunca de ahi.
Ahora supongamos que tienes una presión > 750 asi que se queda en el primer loop y luego sale cuando sea menor a 740 y de nuevo se quedará hasta que valga 740 o mayor
Finalmente debería mostrar presiones mayores a 740.
Hola gracias a todos por la ayuda
Ya estan conectados y comprobe las lecturas y todo bien hasta ahi
Pero no logro contabilice de 1 o en 1 porque aun no se como medir la presion
Ademas de que hace no mucho mi sensor empieza a marcame presiones altas cuando no lo apretad y bajas cuando si por eso trate de poner asi los numero
Este es el codigo emisor que llevo hasta ahora
Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>
while (analogRead(Sensor)<750){}
While(analogRead(Sensor)>760{}
además While no existe es while
asi que ni siquiera es un código que compila.
Pero de nuevo quitalo porque no sirven esas dos lineas de código y no hacen nada.
Además eso que has puesto es solo el setup() y el resto?
Una disculpa no vi bien el programa y no sabia como subirlo bien desde mi cel asi esta el emisor y el receptor aun sigue como la parte de arriba
Gracias por las notas
Cuando no estaba usando el fr433 y lo tenia en una sola programacion ese era mi antirrebote para que yo al apretar solo me mandara una medida y con eso contabilizarla pero aqui ya no me esta funcionando igual
Hola gracias a todos por la ayuda ya se resolvio el problema de la comunicacion y todo del reseptor
Ahorita nadamas estoy buscando un antirrebote para que aunque lo mantenga apretado solo mande una señal hasta que lo vuelva a apretar @anon90500195 el antirrebote para el programa pasado no me ayudo mucho aqui andamos aun investigando cualquier otra aportacion se los agradesco de antemano
Nobes en si un antirrebote a lo que me refiero si no o mismo que me explicabas en el problema anterio que me marque una presion y que cuando eso pase y suelte me marque 1 y espere otra señal y cuando aprete otra vez marque 2 cuando lo suelte