Codice completo per chatbot con verifica salute (V2 compatibile) chat gpt code

Questo e un codice fatto fare da me a chat gpt per un robot che valuti il suo stato di salute oltre alle normali frasi da rispondere via terminale in arduino ide ecco il codice, serve qualche miglioria... l'arduino e nano sense V2.

#include <Wire.h>
#include <Arduino_LPS22HB.h>
#include <Arduino_APDS9960.h>

#define HS3001_ADDR 0x44

String input;

// === SETUP ===
void setup() {
  Serial.begin(9600);
  while (!Serial);

  Wire.begin();

  if (!BARO.begin()) {
    Serial.println("Errore: Sensore pressione non trovato!");
  }

  if (!APDS.begin()) {
    Serial.println("Errore: Sensore luce non trovato!");
  }

  Serial.println("Ciao! Sono NanoBot. Scrivi qualcosa per iniziare.");
}

// === LOOP ===
void loop() {
  if (Serial.available()) {
    input = Serial.readStringUntil('\n');
    input.trim();
    gestisciDomanda(input);
    delay(500);
    verificaSalute();
    Serial.println("---------------");
  }
}

// === RISPOSTA CHAT ===
void gestisciDomanda(String domanda) {
  domanda.toLowerCase();

  if (domanda.indexOf("ciao") >= 0) {
    Serial.println("Ciao! Piacere di parlarti!");
  } else if (domanda.indexOf("come stai") >= 0) {
    Serial.println("Sto bene! Almeno credo...");
  } else if (domanda.indexOf("salute") >= 0 || domanda.indexOf("sensori") >= 0) {
    Serial.println("Controllo i miei parametri vitali...");
  } else if (domanda.indexOf("nome") >= 0) {
    Serial.println("Mi chiamo NanoBot!");
  } else {
    Serial.println("Non so cosa dire, ma sono felice di ascoltarti.");
  }
}

// === LETTURA SENSORE HS3001 ===
bool leggiHS3001(float &temperature, float &humidity) {
  Wire.beginTransmission(HS3001_ADDR);
  Wire.endTransmission();
  delay(10);
  Wire.requestFrom(HS3001_ADDR, 4);

  if (Wire.available() == 4) {
    uint16_t rawHumidity = (Wire.read() << 8) | Wire.read();
    uint16_t rawTemp = (Wire.read() << 8) | Wire.read();

    humidity = ((rawHumidity & 0x3FFF) / 16383.0) * 100.0;
    temperature = (((rawTemp >> 2) & 0x3FFF) / 16383.0) * 165.0 - 40.0;

    return true;
  }

  return false;
}

// === VERIFICA SALUTE ===
void verificaSalute() {
  float temp, hum;
  float pressure = BARO.readPressure();
  int light = APDS.readProximity();

  bool ok = true;

  if (!leggiHS3001(temp, hum)) {
    Serial.println("⚠️ Errore lettura temperatura/umidità.");
    ok = false;
  } else {
    Serial.print("🌡️ Temperatura: "); Serial.print(temp); Serial.println(" °C");
    Serial.print("💧 Umidità: "); Serial.print(hum); Serial.println(" %");

    if (temp < 5 || temp > 35) ok = false;
    if (hum < 20 || hum > 80) ok = false;
  }

  Serial.print("📈 Pressione: "); Serial.print(pressure); Serial.println(" hPa");
  if (pressure < 950 || pressure > 1050) ok = false;

  Serial.print("💡 Prossimità: "); Serial.println(light);
  if (light < 5 || light > 250) ok = false;

  if (ok) {
    Serial.println("✅ Sto bene! Tutti i valori sono nella norma.");
  } else {
    Serial.println("❌ Sto male... alcuni parametri sono fuori soglia.");
  }
}

Nota sulla privacy del progetto Questo progetto di robot chatbot è stato realizzato esclusivamente a scopo didattico. Non raccoglie, memorizza né condivide dati personali. Le interazioni sono simulate o anonime, e qualsiasi connessione con servizi esterni (API) è configurata per non trasmettere informazioni identificabili. In caso di utilizzo reale, si consiglia di adattare il codice nel rispetto del Regolamento (UE) 2016/679 (GDPR) e delle linee guida del Garante.

Buonasera e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

E'stata fatta ancora diverso tempo fa :grinning_face_with_smiling_eyes:, ed ecco il codice con tutti i sensori funzionanti per NANO SENSE 33 BLE.


#include <Arduino_HS300x.h>
#include <Arduino_APDS9960.h>
#include <Wire.h>

#define APDS9960_I2C_ADDR 0x39
#define ALS_DATA_REGISTER 0x94  // CDATAL register (low byte of clear light data)

// Funzione per leggere la luce ambientale (Clear data)
uint16_t readAmbientLight() {
  Wire.beginTransmission(APDS9960_I2C_ADDR);
  Wire.write(ALS_DATA_REGISTER);
  Wire.endTransmission(false);
  Wire.requestFrom(APDS9960_I2C_ADDR, 2);

  if (Wire.available() == 2) {
    uint8_t low = Wire.read();
    uint8_t high = Wire.read();
    return (high << 8) | low;
  }
  return 0;
}

void setup() {
  Serial.begin(9600);
  while (!Serial);

  Wire.begin();

  if (!HS300x.begin()) {
    Serial.println("❌ Errore: sensore temperatura/umidità non trovato!");
    while (1);
  }

  if (!APDS.begin()) {
    Serial.println("❌ Errore: sensore prossimità non trovato!");
    while (1);
  }

  Serial.println("🤖 Ciao! Sono il tuo assistente benessere 🌿");
  Serial.println("Scrivimi: 'come stai?', 'temperatura', 'umidità', 'prossimità', 'luce', 'stato completo', 'help'.");
}

void loop() {
  if (Serial.available() > 0) {
    String input = Serial.readStringUntil('\n');
    input.trim();
    input.toLowerCase();

    float temperature = HS300x.readTemperature();
    float humidity = HS300x.readHumidity();
    int proximity = APDS.readProximity();
    uint16_t ambientLight = readAmbientLight();  // da registri

    if (input == "come stai?" || input == "come stai") {
      Serial.println("😄 Sto bene, grazie per aver chiesto!");
      Serial.print("🌡️ Temperatura: "); Serial.print(temperature, 1); Serial.println(" °C");
      Serial.print("💧 Umidità: "); Serial.print(humidity, 1); Serial.println(" %");
      Serial.print("📡 Prossimità: "); Serial.print(proximity); Serial.println(" (più alto = più vicino)");
      Serial.print("💡 Luce ambientale (grezza): "); Serial.print(ambientLight); Serial.println(" unità");
    }
    else if (input == "temperatura") {
      Serial.print("🌡️ La temperatura è "); Serial.print(temperature, 1); Serial.println(" °C.");
    }
    else if (input == "umidità" || input == "umidita") {
      Serial.print("💧 L'umidità è al "); Serial.print(humidity, 1); Serial.println(" %.");
    }
    else if (input == "prossimità" || input == "prossimita") {
      Serial.print("📡 Prossimità: "); Serial.print(proximity); Serial.println(".");
    }
    else if (input == "luce") {
      Serial.print("💡 Luce ambientale (grezza): "); Serial.print(ambientLight); Serial.println(" unità");
    }
    else if (input == "stato completo") {
      Serial.println("📊 Ecco tutto quello che so ora:");
      Serial.print("- 🌡️ Temperatura: "); Serial.print(temperature, 1); Serial.println(" °C");
      Serial.print("- 💧 Umidità: "); Serial.print(humidity, 1); Serial.println(" %");
      Serial.print("- 📡 Prossimità: "); Serial.print(proximity); Serial.println();
      Serial.print("- 💡 Luce ambientale (grezza): "); Serial.print(ambientLight); Serial.println(" unità");
    }
    else if (input == "help") {
      Serial.println("📋 Comandi disponibili:");
      Serial.println("- come stai?");
      Serial.println("- temperatura");
      Serial.println("- umidità");
      Serial.println("- prossimità");
      Serial.println("- luce");
      Serial.println("- stato completo");
      Serial.println("- help");
    }
    else {
      Serial.println("🤖 Non ho capito… prova con 'help'.");
    }
  }
}

Non è esatto ...
... il tuo post è del 27.06.25, io ti ho chiesto di fare la presentazione e SUCCESSIVAMENTE, il 28.06.25 tu l'hai fatta, quindi ... NESSUN "diverso tempo fa" :smiling_face_with_horns:

Guglielmo

Beh se non e esatto probabilmente non ho capito bene quello che hai detto e visto che non e nel mio interesse pubblicare per me ma per la collettivita puoi pure rimuovere tutto tanto non mi interessano i badge come a voi!

Ho cambiato il codice in modo tale che il chatbot risponda alle domande dei sensori piu umanamente, putroppo non c e incorporato il sensore luce o colore per fare la domanda ci vedi?. ho usato solo i sensori incorporati.
ecco il codice

#include <Arduino_HS300x.h>
#include <Arduino_APDS9960.h>

float pressioneSimulata = 127.0;  // Valore di esempio

void setup() {
  Serial.begin(9600);
  while (!Serial);

  if (!HS300x.begin()) {
    Serial.println("❌ Errore: sensore temperatura/umidità non trovato!");
    while (1);
  }

  if (!APDS.begin()) {
    Serial.println("❌ Errore: sensore prossimità non trovato!");
    while (1);
  }

  Serial.println("🤖 Chatbot salute pronto!");
  Serial.println("Puoi chiedermi: come stai?, hai caldo?, c'è qualcuno vicino?, pressione...");
}

void loop() {
  if (Serial.available() > 0) {
    String input = Serial.readStringUntil('\n');
    input.trim();
    input.toLowerCase();

    float temp = HS300x.readTemperature();
    float hum = HS300x.readHumidity();
    int proximity = APDS.readProximity();

    if (input.indexOf("come stai") != -1) {
      Serial.println("🧠 Mi sento bene! Ecco i miei parametri:");

      Serial.print("🌡️ Temperatura: ");
      Serial.print(temp, 1);
      Serial.println(" °C");

      Serial.print("💧 Umidità: ");
      Serial.print(hum, 1);
      Serial.println(" %");

      Serial.print("📡 Prossimità: ");
      Serial.println(proximity);

      Serial.print("🩺 Pressione (simulata): ");
      Serial.print(pressioneSimulata, 1);
      Serial.println(" mmHg");
    }
    else if (input.indexOf("hai caldo") != -1) {
      Serial.println(temp > 36.0 ? "🥵 Sì, ho caldo!" : "😊 No, la temperatura è confortevole.");
    }
    else if (input.indexOf("hai freddo") != -1) {
      Serial.println(temp < 36.0 ? "🥶 Brr... ho freddo." : "😌 No, sto al caldo.");
    }
    else if (input.indexOf("pressione") != -1) {
      Serial.println(pressioneSimulata > 130.0 ?
                     "🩺 Attenzione: la pressione è un po’ alta." :
                     "🧘‍♂️ Tutto ok, pressione regolare.");
    }
    else if (input.indexOf("c'è qualcuno") != -1 || input.indexOf("ce qualcuno") != -1) {
      if (proximity > 5) {
        Serial.println("👀 Sì, rilevo qualcuno o qualcosa vicino!");
      } else {
        Serial.println("🕸️ Nessuno nei paraggi...");
      }
    }
    else if (input.equals("help")) {
      Serial.println("📋 Comandi disponibili:");
      Serial.println("- come stai?");
      Serial.println("- hai caldo?");
      Serial.println("- hai freddo?");
      Serial.println("- pressione");
      Serial.println("- c'è qualcuno vicino?");
    }
    else {
      Serial.println("❓ Non ho capito... digita 'help' per vedere cosa puoi chiedermi.");
    }
  }
}

Nota sulla privacy del progetto Questo progetto di robot chatbot è stato realizzato esclusivamente a scopo didattico . Non raccoglie, memorizza né condivide dati personali . Le interazioni sono simulate o anonime, e qualsiasi connessione con servizi esterni (API) è configurata per non trasmettere informazioni identificabili . In caso di utilizzo reale, si consiglia di adattare il codice nel rispetto del Regolamento (UE) 2016/679 (GDPR) e delle linee guida del Garante.