Need Helps for communication SPI

Hello everyone,

I am a beginner and wonder how can I solve this problem.
It is in the context of a TP at the university:

"Write the program that reads the values ​​of the I2C module pmodHYGRO This program will send the temperature and humidity values ​​to the serial link"

Ok, so this is What I do.

#include <Arduino.h>
#include <SPI.h>
 
void setup() { 
  // put your setup code here, to run once:
  //déclarez quel(s) connecteur(s) seront utilisés pour les lignes SS et configurez-les en sorties (OUTPUT).
//  pinMode(10, OUTPUT);
  // pour activer le bus SPI
  SPI.begin(); 
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  //indiquer dans le code dans quel sens seront envoyés les bits de données de chaque octet, le bit de poids fort (MSB) ou celui de poids faible (LSB) en premier
  SPI.setBitOrder(MSBFIRST);
}

void setValue(int value)
{
  digitalWrite(10, LOW);
  //SPI.transfer(0); // send command byte
  SPI.transfer(value); // send value (0~255)
  digitalWrite(10, HIGH);
} 
 
void loop() {
// put your main code here, to run repeatedly:
for (int a = 0; a < 256; a++)
  {
    setValue(a);
    delay(200);
  }
  for (int a = 255; a >= 0; --a) 
  {
    setValue(a); 
    delay(200);
  }

}

Unfortunately, that's doesn't work..
Obviously I forgot to make a screenshot for the error and saw that I can work only in the workshop...

And I wonder if someone know what's "the memory footprint of the program" please ?

Baptiste_39:
Hello everyone,

I am a beginner and wonder how can I solve this problem.
It is in the context of a TP at the university:

"Write the program that reads the values ​​of the I2C module pmodHYGRO This program will send the temperature and humidity values ​​to the serial link"

Ok, so this is What I do.

Unfortunately, that's doesn't work..

I2C and SPI are not the same protocol! look it up...

As sherzaad mentioned you tried to use τηε SPI protocol instead of the I2C protocol. You can use the I2C protocol by including the wire.h library. Also take into account that for the I2C bus you need just two wires (SDA, SCL) while for the SPI bus you need 4 wires (MISO, MOSI, SCLK, CS).

I hope that helps.

Excuse me, but I made a mistake in my description and it's really communication with SPI.
Thanks you for you helps.

The datasheet [Fig-1) clearly says that the sensor has I2C interface. The image of the sensor (Fig-2) also shows the connector is labelled with I2C Bus signals (SDA, SCL). Why are you saying that the sensor has SPI interface?

Are you using BME280 (Fig-3) which is also a Humidity-temperature sensor, and it has both SPI/I2C interface.

Datasheet:
pmod.png
Figure-1:

Pmod Sesnor with Humidity-Temperature Elements (I2C Interface)
pmodX.jpg
Figure-2:

BME280 Sensor with Humidity-Temperature-Pressure Elements (SPI/I2C Interface)
bme280spi-i2c.jpg
Figure-3:

Please, post the picture of the sensor you are using.

pmodX.jpg

bme280spi-i2c.jpg

pmod.png

So this is what I've changed :

[code]#include <Arduino.h>
#include <SPI.h>

void setup() {
  // put your setup code here, to run once:
  //déclarez quel(s) connecteur(s) seront utilisés pour les lignes SS et configurez-les en sorties (OUTPUT).
//  pinMode(10, OUTPUT);
  // pour activer le bus SPI
  SPI.begin();
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  //indiquer dans le code dans quel sens seront envoyés les bits de données de chaque octet, le bit de poids fort (MSB) ou celui de poids faible (LSB) en premier
  SPI.setBitOrder(MSBFIRST);
}

void setValue(int value)
{
  digitalWrite(2, LOW);
  SPI.transfer(0); // send command byte
  SPI.transfer(value); // send value (0~255)
  digitalWrite(2, HIGH);
}

void loop() {
// put your main code here, to run repeatedly:
for (int a = 0; a < 256; a++)
  {
    setValue(a);

    Serial.print("Luminosité:");
    Serial.println(a);
    delay(200);
  }
  for (int a = 255; a >= 0; --a)
  {
    setValue(a);

    Serial.print("Luminosité:");
    Serial.println(a);
    delay(200);
  }
}
/*void setup() {

  // Initialise la communication avec le PC
  Serial.begin(9600);
}

// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() {

  // Mesure la tension sur la broche A0
  int valeur = analogRead(A0);

  // Envoi la mesure au PC pour affichage et attends 250ms
  Serial.println(valeur);
  delay(250);
}*/

[/code]

But I still can not display the brightness value in lux in the console..

You are still using the SPI protocol... You won't be able to take measurements from a sensor with I2C interface by using SPI protocol... It's like you are trying to get communicate with a Chinese guy in his language without speaking Chinese.

Ok thanks you for your helps !
That's does work now :slight_smile:

Baptiste_39:
Ok thanks you for your helps !
That's does work now :slight_smile:

It is working in SPI or I2C Mode?