desktop

Arduino, 3 entradas 1 salida

Para antirebote te digo lo que tiene que hacer, y luego intentas replicarlo (asi de paso aprendes y no solo copia y pega).
Debes discriminar cuándo se presiona el boton (sentencia "IF"), dentro de la sentencia, tienes dos opciones, o pones un retardo muy pequeño (no recomendable), o pones un "loop" que lea un "true" tanto mientras el pulsador aun sigue presionado como tambien una variable que cuente un determinado tiempo (ésto para que no sea infinito y no pueda salir mas, en caso de problemas), luego viene el resto de código.

Toda esta explicacion tiene espacio en solo 3 lineas de codigo
 
¿Quien ha dicho que el pulsador da rebotes?
Lo mismo no da y no hace falta.

Bueno, en realidad lo de los rebotes solo tiene importancia cuando tanto el uno como el cero ejecutan partes de código que se está ejecutando a mucha velocidad. Es el caso de contar pulsaciones. Pero si la pulsación ejecuta una rutina ‘larga’ no pasa nada si esta se dispara desde la detección del primer instante, pues el resto sencillamente se ignora, ni se va a leer. Digamos que no se leen pulsadores en reposo.
Distinto es el caso de que quieras discriminar distintos tipos de pulsación -manual- como corta, larga, doble o triple, etc., que van bien para controlar varias acciones con un solo pulsador. Dejo aparte las soluciones para el filtrado del ruido.
 
@Gasparv lo del control lo hago por que si no lo tengo, no se porque, se queda encendida la salida, de esta forma me aseguro que hasta que no entra en el "if" la salida es bajo
@Scooter con respecto al antirrebote es por que he observado que cuando pulso varias veces el pulsador seguidas el led "salida_presencia_1" se ilumina levemente y además si después de estas pulsaciones seguidas lo dejo pulsado, el temporizador se activa mucho antes de los 2s.
Tal vez tenga que rehacer el tema del temporizador o tal vez con el antirrebote se solucione!!!
Os agradezco todo esto porque de esta forma me hacéis pensar.
 
Bueno después de haber vuelto a mirarme videos y foros he cambiado la programación, ya no tengo rebotes y sigue haciendo lo que debe.
En breve os pediré ayuda para sacar esta información por rs232 y poderlo leer por hyperterminal, para el futuro mandarlo aun puerto del gps.

Muestro solo lo cambiado en loop antes he dado de alta otras variables.


Código:
void loop() {
  
  // tratado de la presencia//
   estado_presencia_1 = digitalRead(presencia_1);                         
  if (estado_presencia_1 == HIGH && T_inicio_puls_pres == 0)             
      {T_inicio_puls_pres = millis();}                                  
  if (millis() - T_inicio_puls_pres >= 200 && estado_presencia_1 == LOW) T_inicio_puls_pres=0 ;  
  if (T_inicio_puls_pres != 0)
      {if (millis() - T_inicio_puls_pres >= 2000){digitalWrite(salida_presencia_1, HIGH);variable_salida_presencia_1 = 1;} }
      else {digitalWrite(salida_presencia_1, LOW);variable_salida_presencia_1 = 0;}
 
Minimo cambia ésto;
C++:
estado_presencia_1 = digitalRead(presencia_1);                        
  if (estado_presencia_1 == HIGH && T_inicio_puls_pres == 0)
Por ésto;
C++:
  if (digitalRead(presencia_1) && T_inicio_puls_pres == 0)

Asi, puedes simplificar mas todo y sin necesidad de llenar de variables.

En el formateo elige "C++"
 
Hola a todos.
¿Podéis indicarme si puedo trabajar con el puerto serie usb y los dos pines rx-tx a la vez?
es decir si yo quiero mostrar en el monitor serie, del programa de arduino, el número que me genera el contador del programa y a la vez mandarlo por los pines RX-TX al puerto com de un gps
Un saludo
 
Hola a todos.
¿Podéis indicarme si puedo trabajar con el puerto serie usb y los dos pines rx-tx a la vez?
es decir si yo quiero mostrar en el monitor serie, del programa de arduino, el número que me genera el contador del programa y a la vez mandarlo por los pines RX-TX al puerto com de un gps
Un saludo
Eso ya lo estás haciendo ahora.
En el TX puedes poner más gente a escuchar
A hablar por RX no porque si hablan varios no se entienden.
 
Imaginemos que lo tengo alimentado por el conector correspondiente de 9v, el usb desconectado, conector los cables Gnd, rx y tx de la placa con con db9 del ordenador ¿Puedo hacer esto? Y si se puede, a través del programa hyperterminal u otro ¿ver lo que envió?

Edito:

Siento dar información por cuenta gotas, el com al que lo conecto se entiende de la siguiente forma:
STX = '\x002';
ETX = '\x0';
\x002 El texto que deseo \x0 me muestra en la pantalla del gps "El texto que deseo"
¿Cómo debería de enviárselo desde el arduino?
 
Última edición:
Si conectas TX y Rx al DB9 del ordenador quemarás el Arduino y/o el ordenador.
Necesitas un adaptador de niveles RS232.
Perderás el USB.
Por eso me gustan los leonardo-micro-promicro. Tienen USB y además puerto serie.
 
Hola a todos, sigo probando y no saco nada desde la placa arduino.
Aquí abajo os muestro que desde este programa le lanzo al gps, cualquier cosa que vaya entre \x002 y \x0 y en la pantalla del gps me lo muestra, conecto Gnd + Tx del ordendor y Gnd + Rx del gps y perfecto!!!.
Tenéis alguna idea como hacerlo a través de la salida tx del arduino??

1620135888039.png
 
Si estás usando RS232 debes saber que funciona con +/- 12 V, mientras que ARDUINO usa 0-5 V. Por lo tanto, necesitas una interfaz de pasa de 5V a +/- 12V
Me suena un integrado muy común MAX232
1620137084790.png
 
Atrás
Arriba