Contestar una llamada telefónica con RN-52 y Arduino Mega 2560

Vengo de Stackoverflow y necesito orientación.

Mi objetivo : transmitir melodías (completado) y responder/finalizar llamadas a través de la RN-52 (no completado)

Mi problema : me estoy confundiendo con las funciones RX/TX/CTS/RTS del RN-52 ( hoja de datos ).

He intentado : Conectar el RX y TX del RN52 al TX y RX del Mega 2560 (pines 0 y 1) para iniciar UART sin embargo, cuando intento enviar el comando al Cmódulo, no ocurre nada (eso debería decirle al RN52 para contestar la llamada).

Tal vez : mi problema es poner el RN52 en modo de comando, pero tengo GPIO9 conectado a tierra (ponerlo bajo lo convierte en modo de comando).

Tal vez : ¿No estoy enviando el comando correctamente? Yo Serial.println("C");solía

Espero que mi pregunta y lucha sea clara. Cualquier material de lectura que me dirija en la dirección correcta sería muy apreciado. Me encantaría hacer que esto funcione, pero me encantaría aprender cómo funciona aún más. ¡Gracias de antemano y feliz año nuevo!

Enlace útil: https://learn.sparkfun.com/tutorials/rn-52-bluetooth-hookup-guide/c

EDITAR (diagrama, información adicional)

Aquí está mi código para usar dos botones para responder o rechazar una llamada.

#include <SoftwareSerial.h>//not sure if this is needed...read about it during a tutorial?

const int answerButton = 52; //button to answer
const int endButton = 53; //button to end

void setup(){
  Serial.begin(9600); //start talking to RN52
  pinMode(answerButton,INPUT); //set buttons to input
  pinMode(endButton,INPUT); 
}
void loop(){
  int answer = digitalRead(answerButton); //read the state of the buttons
  int endCall = digitalRead(endButton);

  if (answer == 1){ //if depressed, print C (command to answer the call)
    Serial.print("C");
    delay(2000);
  }
  if (endCall == 1){ //if depressed, print E (command to end/reject call) 
    Serial.print("E");
    delay(2000);
  }
  delay(1);//for stability...although I'm not entirely sure this is needed :)
}

Cuando uso esto, veo que el LED RX se ilumina, sin embargo, la llamada no se responde. Y desafortunadamente no puedo conectarme a la serie RN52 para ver lo que dice a través de CoolTerm al mismo tiempo ya que Arduino está usando la conexión (lea sobre eso en este foro).

GPIO7 NO está conectado a nada (solo abierto).

El RN52 está conectado a tierra y transmite melodías correctamente a través de Bluetooth en mi iPhone. SIN EMBARGO, se menciona la conexión a tierra o el envío de una señal en GPIO2 en la hoja de datos (tabla 1-3), pero no puedo comprender lo que dicen que hacer... esto podría ser parte de mi problema.

AÑADIR ESQUEMA (increíble, ¡no tenía idea de que podía hacer esto! Lo siento, ¡lo incluiré en todas las publicaciones futuras!)

esquemático

simular este circuito : esquema creado con CircuitLab

¿Puede editar un diagrama de circuito y un ejemplo mínimo de la fuente de su programa (boceto)? ¿Usted establece la velocidad de serie? ¿GPIO7 es bajo o alto? ¿Parpadea un LED TX? Conectaste GND? ...
Ok, ¡se ha hecho la edición! Espero que esta información adicional ayude.
¿Podría agregar un esquema simple que muestre las conexiones entre el Arduino y el RN-52? Esto contribuiría en gran medida a aclarar lo que ha hecho.
Bien, lo siento. No tenía idea de que esta función estaba aquí, la usaré en el futuro, ¡muy útil! @RedGrittyBrick, diagrama de circuito agregado.

Respuestas (2)

  Serial.begin(9600); //start talking to RN52

Creo que necesita bajar GPIO7 para establecer la velocidad en 9600.

De la hoja de datos

GPIO7 Conducir este pin bajo establece la tasa de baudios de UART en 9600. Por defecto, el pin es alto con una velocidad de transmisión de 115.200.

¡Estás en lo correcto! Supongo que no tener que bajar GPIO7 cuando me comunico a través de la PC me hizo pensar que no era necesario. Pero hacerlo me permitió usar Serial.println("C");y aceptar una llamada entrante. Ahora tendré que echarle un vistazo a este asunto del "apretón de manos". ¡Gracias por la ayuda! Te votaré una vez que alcance las 15 repeticiones. ¡Salud!
También creo que println imprime \r\ny solo necesita \r"Cada comando termina con el retorno de carro (\ r)". cita de la página 19 de dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/Bluetooth/…

Muy bien, he estado usando mucho el RN-52 últimamente, así que tengo algunas cosas:

  1. Supongo que en realidad no sé la respuesta a esta pregunta, pero ¿no se supone que no debes usar un dispositivo de 5 V para comunicarte a través de UART con un dispositivo de 3,3 V? Seguro que podría alimentar el RN-52 con el Arduino Mega SOLAMENTE conectando el suministro de 3.3V al RN-52, pero si va a usar el UART para enviar comandos desde un Arduino al RN-52, no ¿Necesitas un Arduino de 3,3 V? Eso es exactamente lo que uso con el RN-52. Yo uso Arduino Pro Micro 3.3V/8MHz de SparkFun. Me quedaría con esa porque no necesitas molestarte con una placa de conexión FTDI; ¡simplemente conecte un cable USB directamente en él!

  2. Puedo controlar el RN-52 con esta configuración, y siempre he usado una velocidad de transmisión de 115200 sin tocar ninguno de los pines GPIO. Te sugiero que hagas lo mismo.

  3. Como todavía no lo he visto discutido aquí, es posible que esté usando la línea serial incorrecta en el Arduino Mega, ¡que no debería usar de todos modos! Por ejemplo, mi Arduino Pro Micro particular tiene dos líneas seriales diferentes. Serial.begin(115200)y Serial.println("C")corresponden a la comunicación USB del dispositivo con la computadora. Serial1.begin(115200)y Serial1.println("C")aplicar a los pines TX y RX que están realmente conectados al RN-52. Tendría que mirar las líneas seriales específicas del Mega, o cualquier Arduino que termine usando, para descubrir cómo inicializar correctamente la línea de comunicación serial correcta.

Mira esto este video :

¡Gracias por esta información! Si bien obtengo la mayor parte, no estoy muy seguro de por qué no encendería el RN52 con 3.3v del Arduino. Leeré sobre el Pro Micro que vinculaste anteriormente. He tenido éxito al comunicarme con el RN52, sin embargo, solo puedo enviar 1 comando... probablemente debido a que el RX/TX no está conectado al Arduino (gracias por el enlace del video, lo vi y compré los suministros). Re n.° 3: Creo que tiene razón sobre el uso de la línea serial incorrecta... Voy a probar el ajuste esta noche. Gracias de nuevo por su conocimiento, informaré los resultados. ¡Salud!
Solo por curiosidad: ¿qué micrófono estás usando para RN-52?