#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Dichiarazione delle costanti per il display I2C
#define I2C_ADDR 0x27 // Indirizzo I2C del display
#define LCD_COLS 16   // Numero di colonne del display
#define LCD_ROWS 2    // Numero di righe del display

// Dichiarazione dei pin per l'ingresso CW
#define CW_PIN 2 // Pin digitale per l'ingresso CW

// Variabili globali
volatile bool cwFlag = false; // Flag per indicare la presenza di un carattere CW
String cwString = "";         // Stringa per memorizzare il carattere CW

// Inizializzazione del display I2C
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLS, LCD_ROWS);

// Funzione di interrupt per rilevare il carattere CW
void cwInterrupt() {
  if (digitalRead(CW_PIN) == HIGH) {
    cwFlag = true;
  }
}

void setup() {
  // Configurazione del pin CW come input
  pinMode(CW_PIN, INPUT);

  // Inizializzazione del display I2C
  lcd.begin(LCD_COLS, LCD_ROWS);
  lcd.clear();

  // Inizializzazione della comunicazione I2C
  Wire.begin();

  // Impostazione della velocità di trasmissione I2C (opzionale)
  Wire.setClock(400000);

  // Configurazione dell'interrupt per il rilevamento del carattere CW
  attachInterrupt(digitalPinToInterrupt(CW_PIN), cwInterrupt, RISING);
}

void loop() {
  if (cwFlag) {
    // Aggiungi il carattere CW alla stringa
    char cwChar = getCWCharacter();
    cwString += cwChar;

    // Aggiorna il display con la nuova stringa CW
    lcd.setCursor(0, 0);
    lcd.print("CW: " + cwString);

    // Reset del flag
    cwFlag = false;
  }
}

char getCWCharacter() {
  // Effettua il rilevamento del carattere CW
  // Puoi personalizzare questa funzione per adattarla alle tue esigenze
  // Ad esempio, puoi utilizzare una libreria CW o un algoritmo per decodificare il segnale CW in caratteri
  
  // In questo esempio, il carattere CW viene letto direttamente dal pin CW_PIN
  // Ad esempio, se si utilizza un pulsante come ingresso CW, si può leggere lo stato del pulsante e corrispondere ad un carattere specifico
  
  return 'A'; // Restituisce un carattere di esempio
}