#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
}