Error al compilar LCD Nokia 5110

Hola a todos, estoy intentando hacer funcionar un sensor de temperatura (DHT22 -AM2302) y un módulo RTC (DS1307), mostrando la info por el display nokia 5110.

Mi problema es al compilar, donde habiendo añadido ya todas las librerías necesarias (supuestamente), me da este error:

In file included from sketch_apr28a.ino:129:0:
C:\Users\b0609309.EPSEVG\Documents\Arduino\libraries\Adafruit-PCD8544-Nokia-5110-LCD-library-master/Adafruit_PCD8544.h:28:17: fatal error: SPI.h: No such file or directory
 #include <SPI.h>
                 ^
compilation terminated.
Error de compilación

Sin embargo, si añado la librería (#include “SPI.h”) y compilo, se me congela en proceso de compilación. El programa lo puedo modificar y tal pero simplemente se queda en “Compilando programa…” y un cuarto de la barra de carga llena. Sospecho que es un tema de librerías.

He probado cambiar los pines, en vez de poner #include “Adafruit_PCD8544.h”, poner #include <Adafruit_PCD8544.h>, y nada. Todo funciona correctamente ya que he probado cada módulo por separado con su propio código. Agradecería que alguien me pudiera echar un cable, que en 2 semanas tengo que acabar el proyecto, y ya nose que hacer :confused:

Os adjunto el código:

//#include "SPI.h"
#include "Adafruit_PCD8544.h"
#include "Adafruit_GFX.h"
// Adafruit_PCD8544 display = Adafruit_PCD8544(SCLK, DIN, DC, CS, RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);

#include "DHT.h"
#define DHTPIN 2     // what pin we're connected DHT22
#define DHTTYPE DHT22   // DHT 22 
DHT dht(DHTPIN, DHTTYPE);


#include "Wire.h"
#include "RTClib.h"
RTC_DS1307 RTC;


static unsigned char PROGMEM picatura[] =
{ B0001000,
  B0001000,
  B0001000,
  B0010100,
  B0100010,
  B0100010,
  B0011100
};

void setup () {
  
    // sensor DHT for humidity and temperature 
  dht.begin();
  
  Wire.begin(); // Inicia el puerto I2C
  RTC.begin(); // Inicia la comunicación con el RTC
  RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
  Serial.begin(9600); // Establece la velocidad de datos del puerto serie
  
    if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
  }
}

// part code from http://tronixstuff.wordpress.com/
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
Wire.endTransmission();
// end part code from http://tronixstuff.wordpress.com/

  
  display.begkin();
  // init done

  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(50);
  display.clearDisplay();


  // Print a logo message to the LCD.
  
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("PROJECTES");
  display.setCursor(24, 8);
  display.print("ELECTRÓNICS");
  display.setCursor(1, 24);
  display.print("Prueba Sensores");  
  display.setCursor(0, 32);
  display.print("Placas Solares");
  display.setCursor(0, 40);
  display.setTextColor(WHITE, BLACK);
  display.print("RTC,T&H,FM,DISP");
   display.display();
  delay (5000);
  display.clearDisplay(); 
  
  

int k1;
int ko;

void loop () {
  
  DateTime now = RTC.now();
  float h = dht.readHumidity();
  float t = dht.readTemperature();

   // need for display time 
   int zs = now.second()/10;
   int us = now.second() - zs*10;
  
  if (us > 2 )
 {
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(0, 0);
   
   
   {   if ( now.hour() < 10)
   {
     display.print(" "); 
     display.print(now.hour(), DEC);
   }
   else
   {
     display.print(now.hour(), DEC);
   }
   display.setCursor(20, 0);
   display.print(":");
   display.setCursor(28, 0);
   if ( now.minute() < 10)
   {
     display.print("0"); 
     display.print(now.minute(), DEC);
   }
   else
   {
   display.print(now.minute(), DEC);
   }

   display.setCursor(48, 0);
   display.print(":");
   display.setCursor(57, 0);
   if ( now.second() < 10)
   {
     display.print("0"); 
     display.print(now.second(), DEC);
   }
   else
   {
   display.print(now.second(), DEC);
   }
   }
 }
 else 
 {
   display.setTextSize(1);
   display.setTextColor(BLACK);
   display.setCursor(16, 0);
   if ( now.hour() < 10)
   {
     display.print(" "); 
     display.print(now.hour(), DEC);
   }
   else
   {
   //  display.setCursor(16, 0);
     display.print(now.hour(), DEC);
   }
   display.print(":");
   if ( now.minute() < 10)
   {
     display.print("0"); 
     display.print(now.minute(), DEC);
   }
   else
   {
   display.print(now.minute(), DEC);
   }
   display.print(":");
   if ( now.second() < 10)
   {
     display.print("0"); 
     display.print(now.second(), DEC);
   }
   else
   {
   display.print(now.second(), DEC);
   }
      
   display.setCursor(10, 8);
   if ( now.day() < 10)
   {
     display.print("0"); 
     display.print(now.day(), DEC);
   }
   else
   {
   display.print(now.day(), DEC);
   }
   display.print("/");
   if ( now.month() < 10)
   {
     display.print("0"); 
     display.print(now.month(), DEC);
   }
   else
   {
   display.print(now.month(), DEC);
   }
   display.print("/");
   display.print(now.year(), DEC);
 }
     
    if (us < 5 )
   {
   display.setTextSize(4);
   display.setTextColor(BLACK);
   display.setCursor(0,20);
   display.print(t);
   display.setCursor(60,20);
   display.print("C");
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(48,20);
   display.print("o");
   display.display();
   }
else
   {
   display.setTextSize(4);
// display.setTextColor(WHITE, BLACK);
   display.setCursor(0,20);
   display.print(h);
//   display.setCursor(60,20);
//   display.print("H");

   // draw an empty glass
   display.drawLine(60, 20, 60, 45, BLACK);
   display.drawLine(61, 20, 61, 45, BLACK);
   display.drawLine(60, 44, 80, 44, BLACK);
   display.drawLine(60, 45, 80, 45, BLACK);
   display.drawLine(79, 20, 79, 45, BLACK);
   display.drawLine(80, 20, 80, 45, BLACK);
// display.display();
   int hp = h/4;
   for (int x = 0; x < hp+1; x++)
   { 
   display.drawLine(60, 44-x, 80, 44-x, BLACK);
   }
 // draw drops water
   display.drawBitmap(65, 20,  picatura, 8, 8, 1);
   display.drawBitmap(70, 26,  picatura, 8, 8, 1);
  
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(48,20);
   display.print("%");
   display.display();
   }

delay (500);
display.clearDisplay();  
}

Gracias, un saludo!

Hay tres errores: -----> 1

El orden correcto es este:

#include "Adafruit_GFX.h"
#include "Adafruit_PCD8544.h"

-----> 2

Dejas varias instrucciones fuera del setup, ubica estas instrucciones en tu código

Serial.println("RTC is NOT running!"); } } Elimina esta llave // part code from http://tronixstuff.wordpress.com/

Ubica este grupo de instrucciones:

display.setTextColor(WHITE, BLACK); display.print("RTC,T&H,FM,DISP"); display.display(); delay (5000); display.clearDisplay(); } Coloca la llave que cierra el setup aquí int k1; int ko;

-----> 3

Dentro del setup ubíca este grupo de instrucciones y quitale la k (algun error de dedo XD)

Wire.endTransmission(); // end part code from http://tronixstuff.wordpress.com/ display.begkin(); // init done

Hola, gracias por responder. Hice lo que me has dicho y me sigue saliendo lo mismo. En cambio, si incluyo la libreria SPI me sale esto:

sketch_apr28a.ino:145:39: error: variable 'picatura' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
Error de compilación

Alguna idea de porque puede pasar esto? He leido en algun sitio que podria incluir const en las librerias de adafruit.

Gracias

Vuelvo a pegar el codigo:

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_PCD8544.h"
// Adafruit_PCD8544 display = Adafruit_PCD8544(SCLK, DIN, DC, CS, RST);
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);

#include "DHT.h"
#define DHTPIN 2     // what pin we're connected DHT22
#define DHTTYPE DHT22   // DHT 22 
DHT dht(DHTPIN, DHTTYPE);


#include "Wire.h"
#include "RTClib.h"
RTC_DS1307 RTC;


static unsigned char PROGMEM picatura[] =
{ B0001000,
  B0001000,
  B0001000,
  B0010100,
  B0100010,
  B0100010,
  B0011100
};

void setup () {
  
    // sensor DHT for humidity and temperature 
  dht.begin();
  
  Wire.begin(); // Inicia el puerto I2C
  RTC.begin(); // Inicia la comunicación con el RTC
  RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
  Serial.begin(9600); // Establece la velocidad de datos del puerto serie
  
    if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
  }


// part code from http://tronixstuff.wordpress.com/
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
Wire.endTransmission();
// end part code from http://tronixstuff.wordpress.com/

  
  display.begin();
  // init done

  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(50);
  display.clearDisplay();


  // Print a logo message to the LCD.
  
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("PROJECTES");
  display.setCursor(24, 8);
  display.print("ELECTRÓNICS");
  display.setCursor(1, 24);
  display.print("Prueba Sensores");  
  display.setCursor(0, 32);
  display.print("Placas Solares");
  display.setCursor(0, 40);
  display.setTextColor(WHITE, BLACK);
  display.print("RTC,T&H,FM,DISP");
   display.display();
  delay (5000);
  display.clearDisplay(); 
  
  }

int k1;
int ko;

void loop () {
  
  DateTime now = RTC.now();
  float h = dht.readHumidity();
  float t = dht.readTemperature();

   // need for display time 
   int zs = now.second()/10;
   int us = now.second() - zs*10;
  
  if (us > 2 )
 {
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(0, 0);
   
   
   {   if ( now.hour() < 10)
   {
     display.print(" "); 
     display.print(now.hour(), DEC);
   }
   else
   {
     display.print(now.hour(), DEC);
   }
   display.setCursor(20, 0);
   display.print(":");
   display.setCursor(28, 0);
   if ( now.minute() < 10)
   {
     display.print("0"); 
     display.print(now.minute(), DEC);
   }
   else
   {
   display.print(now.minute(), DEC);
   }

   display.setCursor(48, 0);
   display.print(":");
   display.setCursor(57, 0);
   if ( now.second() < 10)
   {
     display.print("0"); 
     display.print(now.second(), DEC);
   }
   else
   {
   display.print(now.second(), DEC);
   }
   }
 }
 else 
 {
   display.setTextSize(1);
   display.setTextColor(BLACK);
   display.setCursor(16, 0);
   if ( now.hour() < 10)
   {
     display.print(" "); 
     display.print(now.hour(), DEC);
   }
   else
   {
   //  display.setCursor(16, 0);
     display.print(now.hour(), DEC);
   }
   display.print(":");
   if ( now.minute() < 10)
   {
     display.print("0"); 
     display.print(now.minute(), DEC);
   }
   else
   {
   display.print(now.minute(), DEC);
   }
   display.print(":");
   if ( now.second() < 10)
   {
     display.print("0"); 
     display.print(now.second(), DEC);
   }
   else
   {
   display.print(now.second(), DEC);
   }
      
   display.setCursor(10, 8);
   if ( now.day() < 10)
   {
     display.print("0"); 
     display.print(now.day(), DEC);
   }
   else
   {
   display.print(now.day(), DEC);
   }
   display.print("/");
   if ( now.month() < 10)
   {
     display.print("0"); 
     display.print(now.month(), DEC);
   }
   else
   {
   display.print(now.month(), DEC);
   }
   display.print("/");
   display.print(now.year(), DEC);
 }
     
    if (us < 5 )
   {
   display.setTextSize(4);
   display.setTextColor(BLACK);
   display.setCursor(0,20);
   display.print(t);
   display.setCursor(60,20);
   display.print("C");
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(48,20);
   display.print("o");
   display.display();
   }
else
   {
   display.setTextSize(4);
// display.setTextColor(WHITE, BLACK);
   display.setCursor(0,20);
   display.print(h);
//   display.setCursor(60,20);
//   display.print("H");

   // draw an empty glass
   display.drawLine(60, 20, 60, 45, BLACK);
   display.drawLine(61, 20, 61, 45, BLACK);
   display.drawLine(60, 44, 80, 44, BLACK);
   display.drawLine(60, 45, 80, 45, BLACK);
   display.drawLine(79, 20, 79, 45, BLACK);
   display.drawLine(80, 20, 80, 45, BLACK);
// display.display();
   int hp = h/4;
   for (int x = 0; x < hp+1; x++)
   { 
   display.drawLine(60, 44-x, 80, 44-x, BLACK);
   }
 // draw drops water
   display.drawBitmap(65, 20,  picatura, 8, 8, 1);
   display.drawBitmap(70, 26,  picatura, 8, 8, 1);
  
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(48,20);
   display.print("%");
   display.display();
   }

delay (500);
display.clearDisplay();  
}

¿Que versión del IDE de arduino estás usando?.

He compilado el ejemplo corregido que volviste a pegar, en el IDE: 1.5.6-R2 y no da errores.

Los IDE 1.5.8 y 1.6.0, dan el error que mencionas

Tenia el 1.6.3, me instale el 1.5.6-r2, y desde un principio no me deja usar las librerias ya que el nombre solo puede estar compuesto por letras y numeros, nada de guiones. Le quito los guiones a todos los nombres de carpetas y me deja usar las librerias, pero al compilar otro error relacionado con el SPI:

C:\Users\MicheelJB\Documents\Arduino\libraries\AdafruitPCD8544Nokia5110LCDLibraryMaster\Adafruit_PCD8544.cpp: In member function 'void Adafruit_PCD8544::begin(uint8_t, uint8_t)':
C:\Users\MicheelJB\Documents\Arduino\libraries\AdafruitPCD8544Nokia5110LCDLibraryMaster\Adafruit_PCD8544.cpp:174: error: 'SPI' was not declared in this scope
C:\Users\MicheelJB\Documents\Arduino\libraries\AdafruitPCD8544Nokia5110LCDLibraryMaster\Adafruit_PCD8544.cpp:175: error: 'SPI_CLOCK_DIV4' was not declared in this scope
C:\Users\MicheelJB\Documents\Arduino\libraries\AdafruitPCD8544Nokia5110LCDLibraryMaster\Adafruit_PCD8544.cpp:176: error: 'SPI_MODE0' was not declared in this scope
C:\Users\MicheelJB\Documents\Arduino\libraries\AdafruitPCD8544Nokia5110LCDLibraryMaster\Adafruit_PCD8544.cpp: In member function 'void Adafruit_PCD8544::spiWrite(uint8_t)':
C:\Users\MicheelJB\Documents\Arduino\libraries\AdafruitPCD8544Nokia5110LCDLibraryMaster\Adafruit_PCD8544.cpp:242: error: 'SPI' was not declared in this scope

He provado entonces incluir la libreria SPI y si que me funciona, pero no entiendo porque?