problema lcd

Salve a tutti, ho provato a spostare i pin dell’lcd da digitale ad analogico ma mi ha dato problemi in quanto lcd appena attaccato funziona bene ma poi dopo qualche passaggio all’interno del programma si riempie di caratteri non inerenti al programma. Ecco qui il codice

#include <LiquidCrystal.h>
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
int pir_signal1   = 2; // pin al quale ho collegato il sensore1
int pir_signal2 = 3; //pin al quale ho collegato sensore2
int led_Red   = 5; // pin al quale ho collegato il led Rosso
int led_Green = 4; // pin al quale ho collegato il led Verde
int Button = 6; //pin al quale ho collegato il bottone
int Buzzer = 13; //pin al quale ho collegato il buzzer
int Signal1 = 0;
int Signal2 = 0;
int Stato = 0;
int Val = 0;

void setup() {
  delay(3000); //tempo per settare sensori
  // imposto i pin dei led in OUTPUT
  pinMode(led_Red, OUTPUT);
  pinMode(led_Green, OUTPUT);
  pinMode(Button, INPUT);
  pinMode(Buzzer, OUTPUT);
  // inizializzo lcd
  lcd.begin(16, 2);
  lcd.print("Allarme Arduino");
  // spengo i led
  digitalWrite(led_Red, LOW);
  digitalWrite(led_Green, LOW);
}

void loop() {
  //leggo le risposte dai sensori pir e bottone
  Signal1 = digitalRead(pir_signal1);
  Signal2 = digitalRead(pir_signal2);
  Val = digitalRead(Button);
  // imposto stato del programma
  if (Val == HIGH) Stato = Stato + 1;
  if (Stato == 2) Stato = 0;
  lcd.setCursor(0, 1);
  if (Stato == 0) {
    lcd.print("  **ON**  ");
    if (Signal1 || Signal2) {
      lcd.setCursor(0, 1);
      lcd.print("*ALLARME*");
        digitalWrite(led_Red, HIGH);
        digitalWrite(led_Green, LOW);
        delay(500);
        digitalWrite(led_Red, LOW);
        digitalWrite(led_Green, HIGH);
        tone(Buzzer, 1000);
    }
    else {
      digitalWrite(led_Red, LOW);
      digitalWrite(led_Green, HIGH);
      noTone (Buzzer);
    }
  }
  else {
    lcd.print(" **OFF** ");
  }
  delay(100);
}

Devo implementare un tastierino numerico che ha sette pin e non so quali posso spostare nell’analogico.

Ciao, se hai necessità di tanti ingressi ti conviene pensare da subito di utilizzare un convertitore i2c per l’lcd tipo questo:http://telecnatron.com/modules/pcf8574-i2c-lcd-driver/i2c-lcd-driver-annotated-517x.jpg

Con un pò di pazienza nelle saldature ed un altro modulo identico (cambiando l’indirizzo A0,A1,A2), anzichè pilotare l’LCD puòi usarlo per interfacciarti con una tastiera 3x4 (che dovrebbe essere la tua).
In pratica con 2 fili comandi LCD e ricevi ingressi keypad lasciando un sacco di pin liberi per il resto…
Puoi in oltre collegare un modulo RTC i2c ed una memoria esterna… l’appetito vien mangiando :slight_smile:

Lo sto utilizzando per il progetto del mio antifurto e funziona benone!

Stefano