Problema su Voltmetro con Arduino

Ciao a tutti, tralasciando la solita frase:"sono nuovo nel campo di Arduino" e similari, che evito di dirvi per non essere troppo scontato, vorrei chiedere aiuto alla community italiana di Arduino.

Riassumendo in poche parole ho provato a fare un Voltmetro abbastanza semplice, e anche abbastanza impreciso, su Arduino(usando anche un display), e ci sono riuscito.
Ma ciò che mi serve non è un vero e proprio Voltmetro, ma più un sistema che quando la corrente è minore di un certo valore(in questo caso 100) accenda il Led verde.
Quando la corrente è compresa tra due valori(100 e 400), accenda il Led blu.
E infine quando la corrente è maggiore di quest'ultimo valore(400) si accenda il Led rosso.

Intendiamoci, non sono bravo in queste cose, ma sto cercando di imparare :slight_smile:

#define NAME "Ciao"
#define VERSION "0.1"



const int PIN_BACKLIGHT = 7;
const int PIN_VOLTAGE = 0;
const int PIN_LED_G = 6;
const int PIN_LED_B = 5;
const int PIN_LED_R = 4;


#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

int VOLTAGE_CURRENT;
float VOLTAGE_CALCULATED;

const int SENSOR_INTERVAL = 500;
const float VOLTAGE_STEP = 0.1;

void setup() {
  pinMode(PIN_BACKLIGHT, OUTPUT);
  pinMode(PIN_VOLTAGE, INPUT);
  pinMode(PIN_LED_G, OUTPUT);
  pinMode(PIN_LED_B, OUTPUT);
  pinMode(PIN_LED_R, OUTPUT);

  lcd.begin(16, 2);

  lcd.setCursor(0, 0);
  lcd.print(NAME);
  lcd.setCursor(0, 1);
  lcd.print("Versione ");
  lcd.print(VERSION);
  
  digitalWrite(PIN_BACKLIGHT, HIGH);
  
#ifdef DEBUG
  delay(2000);
  lcd.setCursor(0, 1);
  lcd.print("Debug abilitato!");
  lcd.print(VERSION);

  Serial.begin(9600);
  Serial.println("============================");
  Serial.println(NAME);
  Serial.println("Versione ");
  Serial.println(VERSION);
  Serial.println("============================");
  Serial.println("Messaggi debug:");
  Serial.println("----------------------------");
#endif
 

 
  delay(2000);
  lcd.clear();

  

void showLabels()
{
  lcd.setCursor(0, 1);
  lcd.print("Volt            ");
}

void showVoltage()
{
    lcd.setCursor(0, 0);
    lcd.print(VOLTAGE_CALCULATED, 2);
    lcd.print(" V");

    if (VOLTAGE_CALCULATED<10)
      lcd.print(" ");
  }

void readVoltage()

  {
  VOLTAGE_CURRENT = analogRead(PIN_VOLTAGE);
  if ( VOLTAGE_CURRENT < 100) {
    digitalWrite(PIN_LED_R, HIGH);
  }
  if ( VOLTAGE_CURRENT=>100) && ( VOLTAGE_CURRENT=<=400) {
    digitalWrite(PIN_LED_B, HIGH);
  }
  if ( VOLTAGE_CURRENT > 400) {
    digitalWrite(PIN_LED_G, HIGH);
  }
 }
}
 if ( VOLTAGE_CURRENT=>100) && ( VOLTAGE_CURRENT=<=400)

è scritta male, dovrebbe essere

if (( VOLTAGE_CURRENT>=100) && ( VOLTAGE_CURRENT<=400))

in ogni caso il codice mi genera degli errori: non sono esperto ma credo che il void loop() sia obbligatorio e dentro ci dovrebbero stare i richiami agli altri void.

l'ifdef non lo conosco quindi non mi esprimo

prova così

#define NAME "Ciao"
#define VERSION "0.1"



const int PIN_BACKLIGHT = 7;
const int PIN_VOLTAGE = 0;
const int PIN_LED_G = 6;
const int PIN_LED_B = 5;
const int PIN_LED_R = 4;


#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

int VOLTAGE_CURRENT;
float VOLTAGE_CALCULATED;

const int SENSOR_INTERVAL = 500;
const float VOLTAGE_STEP = 0.1;

void setup() {
  pinMode(PIN_BACKLIGHT, OUTPUT);
  pinMode(PIN_VOLTAGE, INPUT);
  pinMode(PIN_LED_G, OUTPUT);
  pinMode(PIN_LED_B, OUTPUT);
  pinMode(PIN_LED_R, OUTPUT);

  lcd.begin(16, 2);

  lcd.setCursor(0, 0);
  lcd.print(NAME);
  lcd.setCursor(0, 1);
  lcd.print("Versione ");
  lcd.print(VERSION);
 
  digitalWrite(PIN_BACKLIGHT, HIGH);
 
#ifdef DEBUG
  delay(2000);
  lcd.setCursor(0, 1);
  lcd.print("Debug abilitato!");
  lcd.print(VERSION);

  Serial.begin(9600);
  Serial.println("============================");
  Serial.println(NAME);
  Serial.println("Versione ");
  Serial.println(VERSION);
  Serial.println("============================");
  Serial.println("Messaggi debug:");
  Serial.println("----------------------------");
#endif
 

 
  delay(2000);
  lcd.clear();

}

void loop(){

showLabels;
readVoltage;
showVoltage;  
}

void showLabels()
{
  lcd.setCursor(0, 1);
  lcd.print("Volt            ");
}

void showVoltage()
{
    lcd.setCursor(0, 0);
    lcd.print(VOLTAGE_CALCULATED, 2);
    lcd.print(" V");

    if (VOLTAGE_CALCULATED<10)
      lcd.print(" ");
  }

void readVoltage()

  {
  VOLTAGE_CURRENT = analogRead(PIN_VOLTAGE);
  if ( VOLTAGE_CURRENT < 100) {
    digitalWrite(PIN_LED_R, HIGH);
  }
  if (( VOLTAGE_CURRENT >= 100) && ( VOLTAGE_CURRENT<=400)) {
    digitalWrite(PIN_LED_B, HIGH);
  }
  if ( VOLTAGE_CURRENT > 400) {
    digitalWrite(PIN_LED_G, HIGH);
  }
 }

Funziona benissimo, nessun errore.

Mi hai tolto anche alcuni dubbi.

Grazie mille!!! :grinning: :grinning: :grinning:

ottimo :smiley: