RadioPascal — Arduino Nano simulation

Radio 48-863MHz

An interactive Arduino Nano circuit simulation you can run free in your browser on Velxio, by pascalyon.

Components

Sketch code

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

LiquidCrystal_I2C lcd(0x27, 20, 4);

// Définition des broches
const int analogPin = A0;   // Entrée du signal
const int pinFonction1 = 8;  // Broche pour la fonction 1
const int pinFonction2 = 9;  // Broche pour la fonction 2
const int pinFonction3 = 10; // Broche pour la fonction 3

int ancienneFonction = -1; // Pour détecter le changement de fonction et rafraîchir l'écran

void setup() {
  Wire.begin(); // Initialisation obligatoire du port Qwiic
  
  lcd.init();
  lcd.backlight();

  // Configuration des broches du sélecteur en entrée avec résistance de pull-up interne
  // (Le sélecteur doit relier la broche choisie au GND)
  pinMode(pinFonction1, INPUT_PULLUP);
  pinMode(pinFonction2, INPUT_PULLUP);
  pinMode(pinFonction3, INPUT_PULLUP);


}

void loop() {
  // 1. Détection de la fonction sélectionnée (Logique inversée à cause du PULLUP)
  int fonctionActive = 1; // Par défaut, fonction 1 si rien n'est connecté
  
  if (digitalRead(pinFonction1) == LOW) fonctionActive = 1;
  else if (digitalRead(pinFonction2) == LOW) fonctionActive = 2;
  else if (digitalRead(pinFonction3) == LOW) fonctionActive = 3;

  // 2. Si l'utilisateur change de fonction, on nettoie les lignes variables
  if (fonctionActive != ancienneFonction) {
    lcd.setCursor(0, 1);
    lcd.print("                    "); // Efface la ligne du nom
    lcd.setCursor(0, 2);
    lcd.print("                    "); // Efface la ligne du résultat
    ancienneFonction = fonctionActive;
  }

  // 3. Lecture filtrée de l'entrée analogique A0 (Anti-clignotement)
  long sommeSignal = 0;
  const int nbLectures = 16;
  for (int i = 0; i < nbLectures; i++) {
    sommeSignal += analogRead(analogPin);
    delay(1); 
  }
  int signalStabilise = sommeSignal / nbLectures;

  // 4. Calculs mathématiques selon la fonction active
  float resultat = 0.0;
  String nomFonction = "";

  switch (fonctionActive) {
    case 1:
      nomFonction = "LOW BAND";
      // Conversion brute (0-1023) en Volts (0-5V)
      resultat = (signalStabilise * 5.0) / 1023.0;
      break;

    case 2:
      nomFonction = "MEDIUM BAND";
      // Équation exemple : Y = 2.5 * X + 15.0
      resultat = (2.5 * signalStabilise) + 15.0;
      break;

    case 3:
      nomFonction = "HIGH BAND";
      // Équation exemple : (X^2) ramenée sur une échelle de 0 à 100
      resultat = pow(signalStabilise, 2) / 10465.29; 
      break;
  }

  // 5. Affichage sur le LCD 2004
  // Ligne 1 : Affichage du nom de la fonction active
  lcd.setCursor(0, 0);
  lcd.print(nomFonction);


  // Ligne 3 : Affichage du résultat mathématique
  lcd.setCursor(0, 2);
  lcd.print("frequency : ");
  lcd.print(resultat, 2); // '2' pour afficher deux décimales après la virgule
  lcd.print("       ");   // Espaces de sécurité pour éviter les restes d'anciens calculs

  delay(100); // Rafraîchissement toutes les 100ms
}