Hola comunidad de arduino en español, estoy trabajando en un proyecto para medir voltaje y frecuencia, tengo 2 arduinos conectados por I2C entre si, con uno controlo la pantalla y con el otro mido frecuencia, por el momento solo he logrado medir frecuencia usando un detector de cruce por cero "H11AA1", y lo muestro por el monitor serial del ide de arduino, la cuestión es que ese valor de frecuencia lo quiero emplear para mostrarlo en una pantalla LCD Touch 320x240qvt, la cuál estoy controlando con otro arduino MEGA que es el maestro del sistema, y envío los datos del arduino ESCLAVO (Con el que estoy midiendo frecuencia) al maestro, pero no logro poder imprimir el valor correcto en la pantalla, sino que se imprimen valores entre 0 y 255, he estado investigando en cómo enviar datos enteros por protocolo I2C entre arduino, pero no logro hacer que funcione y aparezcan los datos tal y como los veo por el monitor serie, de antemano muchas gracias por leerme y si alguién puede ayudarme estaría muy agradecido con esa persona.
adjunto la imagen en la cuál el código de la izquierda es el mestro y el de la derecha es el esclavo:
https://1drv.ms/u/s!AoWVYNNzZXkmtDsu3jJPqm3TvNj7
Código del arduino maestro:
#include <UTFT.h> //Librería UTFT para dibujar la pantalla
#include <URTouch.h> //Librería par el Touch
#include <Wire.h> //Librería para Comunicación I2C
extern uint8_t BigFont[];
UTFT myGLCD (ILI9341_16,38,39,40,41); //Declaramos el controlador de nuestra pantalla
int frecuencia = 0 ;
void setup() {
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setFont(BigFont);
myGLCD.fillScr(VGA_WHITE);
Wire.begin(1);
}
void loop() {
Wire.requestFrom(1,2);
while(Wire.available()){
frecuencia = int(Wire.read()); //Transformamos el tipo byte a int
myGLCD.setColor(VGA_BLACK);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("FRECUENCIA:", 10, 140, 0);
myGLCD.setColor(VGA_RED);
myGLCD.printNumF(frecuencia, 1, 190, 140);
myGLCD.print("Hz", 270, 140, 0);
}
}
Código del arduino esclavo el que mide frecuencia:
#include <Wire.h>
int contador = 0;
void setup(){
Wire.begin(1);
Serial.begin(9600); //iniciamos comunicacion serial
pinMode(2, INPUT);
attachInterrupt(0, periodo, RISING);
Wire.onRequest(requestEvent);
}
void loop(){
delay(480);
Serial.println(contador);
contador = 0;
}
void requestEvent(){
Wire.write(contador);
}
void periodo(){
contador++;
}
link del video de como aparecen los datos en la pantalla Touch: