aiuto su uno sketch

Salve a tutti,sto terminando un mio progetto riguardante la costruzione di un robot che schiverà ostacoli attraverso un sensore di prossimità ad ultrasuon due motori 12v alimentati tramite alimentazione esterna con un doppio ponte H,fino a qui lo sketch procede che è una meraviglia, poi però ho provato ad incorporare un' LCD e il modulo audio lpm11162. Nel programma lo schermo dovra scrivere se sta andando dritto sterza o è fermo, mentre il modulo lo dirà, il problema sorge quando non mi bastano più i pin digitali, ho saputo che quelli analogici potevano essere utilizzati come digitali, ma come?
Lo sketch:

#include <SoftwareSerial.h>
#include <LPM11162.h>


#define LPM11162_RX     15 //Arduino TX (out)
#define LPM11162_TX     16 //Arduino RX (in)
#define LPM11162_RESET  17 //(out)
#define LPM11162_BUSY   18 //(in)


LPM11162 audio(LPM11162_RX, 
               LPM11162_TX, 
               LPM11162_RESET, 
               LPM11162_BUSY);

long duration;
long dursx;
long durdx; 
const int en1 = 11; //pin enable
const int en2 = 9;
const int m1fd = 4; //controlli motore
const int m2fd = 7;
const int m1bk = 2;
const int m2bk = 6;
const int pinping = 13; //pin sensore distanza
const int sterzo = 600; //durata dello sterzo
const int distanza = 500; //distanza minima ostacoli
int motore1 = 67;//pwm motore dx
int motore2 = 74;//pwm motore sx
/*
LiquidCrystal Library - Hello World
const int LCD RS pin to digital pin 12
const int LCD Enable pin to digital pin 10
const int LCD D4 pin to digital pin 3
const int LCD D5 pin to digital pin 8
const int LCD D6 pin to digital pin 5
const int LCD D7 pin to digital pin 14
const int LCD R/W pin to ground
const int 10K resistor:
const int ends to +5V and ground
const int wiper to LCD VO pin (pin 3)
*/

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 10, 3, 8, 5, 14);

void setup() {
 pinMode(m1fd, OUTPUT);
 pinMode(m1bk, OUTPUT);
 pinMode(m2fd, OUTPUT);
 pinMode(m2bk, OUTPUT);
 pinMode(en1, OUTPUT);
 pinMode(en2, OUTPUT);
 analogWrite(en1,motore1);
 analogWrite(en2,motore2);
 dritto();
{
  if ( audio.synch() )
  {
    audio.bridge();
  }

  audio.begin(9600);
  audio.volume(50);
}
 }

void loop() {
 if (echo() < distanza){ //trovato un ostacolo
  analogWrite(en1,170);
  analogWrite(en2,170);
  ferma();
  sinistra();
  delay(sterzo);
  ferma();
  dursx = echo(); //guarda a sinistra
  destra();
  delay(sterzo*2);
  ferma();
  durdx = echo(); //guarda a destra
  if (dursx < distanza && durdx < distanza){
    destra();
    delay(sterzo);
  } else if (dursx > durdx) {
    sinistra();
    delay(sterzo*2);
  } //sceglie dove c'è più spazio
  dritto();
  analogWrite(en1,motore1);
  analogWrite(en2,motore2);
 }
}

void dritto() {
 digitalWrite(m1bk,LOW);
 digitalWrite(m2bk,LOW);
 digitalWrite(m2fd,HIGH);
 digitalWrite(m1fd,HIGH);   
 // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Sono,Porcibot,.,.,.,sterminare!");
{
  audio.play("void dritto.wav");
  
  while( audio.isBusy() );
  
  delay( 2000 );
}
 }

void rovescia() {
 digitalWrite(m1fd,LOW);
 digitalWrite(m2fd,LOW);
 digitalWrite(m1bk,HIGH);
 digitalWrite(m2bk,HIGH);
// set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Stò,effettuando,un,inversione,di,marcia!");
{
  audio.play("void rovescia.wav");
  
  while( audio.isBusy() );
  
  delay( 2000 );
}
 }

void destra() {
 digitalWrite(m1fd,LOW);
 digitalWrite(m2fd,HIGH);
 digitalWrite(m1bk,HIGH);
 digitalWrite(m2bk,LOW);
// set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("girare,a,destra!");
{
  audio.play("void destra.wav");
  
  while( audio.isBusy() );
  
  delay( 2000 );
}
 }

void sinistra() {
 digitalWrite(m1fd,HIGH);
 digitalWrite(m2fd,LOW);
 digitalWrite(m1bk,LOW);
 digitalWrite(m2bk,HIGH);
// set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("girare,a,sinistra!");
{
  audio.play("void sinistra.wav");
  
  while( audio.isBusy() );
  
  delay( 2000 );
}
 }

void ferma() {
 digitalWrite(m1fd,LOW);
 digitalWrite(m2fd,LOW);
 digitalWrite(m1bk,LOW);
 digitalWrite(m2bk,LOW);
 delay(50);
 // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Spostati,ho,fretta!");

{
  audio.play("void ferma.wav");
  
  while( audio.isBusy() );
  
  delay( 2000 );
}
 }


long echo() {
 pinMode(pinping, OUTPUT);
 digitalWrite(pinping, LOW);
 delayMicroseconds(2);
 digitalWrite(pinping, HIGH);
 delayMicroseconds(5);
 digitalWrite(pinping, LOW);
 pinMode(pinping, INPUT);
 duration = pulseIn(pinping,HIGH);
 return duration;
}

P.S. dato che è la mia prima volta con arduino non è che potreste dare un occhiata grossolana a tutto il codice al codice (so che vi chiedo troppo :roll_eyes: :roll_eyes: :cold_sweat:

Vi ringrazio gia da ora.
Fedrix

Li usi semplicemente indicandoli come A0...A5 cosi come riportato nelle serigrafie.
Ovvero

pinMode(A3, OUTPUT);

oppure

digitalWrite(A1, HIGH);

Se stai usando l'I2C non puoi usare i pin A4 e A5.
Funziona anche se li nomini dal 14 al 19.

PS. I pin dal 15 al 18 sono usati dal modulo audio.

Quindi va bene come ho fatto?
Cos'è l' I2C ?????
P.S. invece per i resto va tutto bene????

I2C è un "modo" per comunicare con elementi esterni(lcd, ...) che prevede l uso di soli due pin

Nel mio progetto quale sarebbe :roll_eyes: :roll_eyes: :roll_eyes: :roll_eyes: :roll_eyes:
Inoltre lo sketch funzionera o è sbagliato?????