Estoy usando un acelerómetro que usa comunicación serial en Arduino (UART), deseo transmitir los datos a un módulo bluetooth (blusmirf gold) usando I2C y finalmente leerlos desde mi aplicación de Android.
Puedo detectar la lectura correcta del acelerómetro, también puedo transmitir los datos a través de bluetooth. Sin embargo, cuando pongo estas dos cosas juntas, solo transmite una vez y deja de transmitir cualquier cosa después.
¿Hay alguien que pueda ayudarme con esto? ¡Gracias de antemano!
/*Conexión de hardware: Arduino --------------- ruptura MMA8452Q 3,3 V --------------- 3,3 V TIERRA --------------- TIERRA SDA (A4) --\/330 ohmios\/-- SDA SCL (A5) --\/330 ohmios\/-- SCL */ #include <Wire.h> // Debe incluir la biblioteca Wire para I2C #include <SFE_MMA8452Q.h> // Incluye la biblioteca SFE_MMA8452Q #include <Evento.h> #include <Temporizador.h> #include<stdlib.h> #include <SoftwareSerial.h> int bluetoothTx = 16; // pin TX-O de bluetooth mate, Arduino A2,16 int bluetoothRx = 17; // Pin RX-I de bluetooth mate, Arduino A3,17 aceleración MMA8452Q; SoftwareSerial bluetooth (bluetoothTx, bluetoothRx); // para comunicación entre ATMEGA 328 y BlueSMiRF Gold int Inicio_Pero =4; int LED_init =7; int LED_inicio =8; intx[20]; int y[20]; int suma=0; entero suma1=0; flotar comenzar_val1; flotar comenzar_val2; tipo int; int inicio_ref1; int inicio_ref2; punto_inicio flotante; flotar force_sum; flotar force_value1 ; flotar force_value2; valor_voltaje flotante; valor de carácter[10]; valor de carácter2[10]; // tomar la lectura del sensor y convertirla al valor de fuerza y transmitir configuración vacía () { retraso (300); Serie .begin(9600); // Comenzar el monitor serial a 57600bps Serial .println("lalalalalalalalalaaaaaaaaaaaaaa"); // bluetooth.println("¡Código de prueba MMA8452Q!"); retraso (200); Alambre.begin(); retraso (100); Serial .println("lalalalalalalaalssssssss"); accel.init(); Serial .println("lalalaal"); //retraso(2000); bluetooth.begin(9600); // El Bluetooth Mate por defecto es de 115200bps pinMode(Inicio_Pero,ENTRADA); pinMode(LED_inicio, SALIDA); pinMode(LED_init, SALIDA); escritura digital (LED_init, 1); escritura digital (LED_inicio, 0); analogReference(INTERNAL);//establece la referencia de salida analógica en 3,3 V en lugar de 5 V, ya que el voltaje de salida de los sensores es pequeño //Tomar varias lecturas sin carga para decidir qué relación entre el voltaje y la fuerza está siguiendo el sensor x[0]=lectura analógica(1); retraso (100); x[1]=lectura analógica(1); retraso (100); suma+=x[1]; x[2]=lectura analógica(1); retraso (100); suma+=x[2]; x[3]=lectura analógica(1); retraso (100); suma+=x[3]; x[4]=lectura analógica(1); retraso (100); suma+=x[4]; x[5]=lectura analógica(1); retraso (100); suma+=x[5]; x[6]=lectura analógica(1); retraso (100); suma+=x[6]; x[7]=lectura analógica(1); retraso (100); suma+=x[7]; x[8]=lectura analógica(1); retraso (100); suma+=x[8]; x[9]=lectura analógica(1); retraso (100); suma+=x[9]; x[10]=lectura analógica(1); retraso (100); suma+=x[10]; comienzo_val1=suma/10; y[0]=lectura analógica(0); retraso (100); y[1]=lectura analógica(0); retraso (100); suma1+=y[1]; y[2]=lectura analógica(0); retraso (100); suma1+=y[2]; y[3]=lectura analógica(0); retraso (100); suma1+=x[3]; y[4]=lectura analógica(0); retraso (100); suma1+=x[4]; y[5]=lectura analógica(0); retraso (100); suma1+=x[5]; y[6]=lectura analógica(0); retraso (100); suma1+=x[6]; y[7]=lectura analógica(0); retraso (100); suma1+=x[7]; y[8]=lectura analógica(0); retraso (100); suma1+=x[8]; y[9]=lectura analógica(0); retraso (100); suma1+=x[9]; y[10]=lectura analógica(0); retraso (100); suma1+=x[10]; comenzar_val2=suma1/10; escritura digital (LED_init, 0); escritura digital (LED_inicio, 1); Serial .println("lalalalalalalalala"); } bucle vacío () { mientras(1) { Serial .println ("oi"); accel.read(); Serie .println("aa"); // int xAceleración = acel.cx*100; int yAceleración = acel.cy*100; int total =xAceleración+yAceleración; Serial .print("ACC"); Serie .println(total); //bluetooth.imprimir("ACCB"); //bluetooth.println(total); //retraso(15); int start_ref1=(analogRead(1)); int start_ref2=(analogRead(0)); force_value1=(start_ref1-begin_val1)/25; si (fuerza_valor1 <= 0) { fuerza_valor1=0.0; } si (fuerza_valor1> = 25) { fuerza_valor1=fuerza_valor1*0.8; } force_value2=(start_ref2-begin_val2)/5; si (fuerza_valor2 <= 0) { fuerza_valor2=0.0; } si (fuerza_valor2> = 25) { fuerza_valor2=fuerza_valor2*0.8; } force_sum=(force_value1+force_value2)*0.8; dtostrf(force_sum,3,2,valor); Cadena str(valor); cadena="N"+cadena; retraso (20); //Serial.print("forzar"); //Serial.println(str); bluetooth.print("FORCEB"); bluetooth.println(str); retraso (500); } }
Parece que tiene un error en su firmware (programa). Lo que quiero decir es que ejecutas "Enviar lo que sea al módulo bluetooth" una vez y luego no otra vez.
Debería verse algo como esto en su programa:
while(1) // Forever and ever since 1 won't change.
{
Read whatever from accelorometer();
return xy;
Transmit to bluetooth(xy);
}
geométrico
ricardo
bazinga woo