#define PIN_TRIG 13				// define de la pin
#define PIN_ECHO 12				// define de la pin

struct sensor {					// declaration de la structure sensor{
	int deviceId;
  int measurementType	;						// deviceId, measurementType de type int

};
 
float readDistanceCM() {
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);

  int duration = pulseIn(PIN_ECHO, HIGH);

  return duration * 0.017;
}

QueueHandle_t queue;
 
void setup() {
  Serial.begin(9600);

  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, OUTPUT);

  queue = xQueueCreate(10, sizeof( struct sensor ))	;				// https://greenwaves-technologies.com/manuals/BUILD/FREERTOS/html/group__xQueueCreate.html
 
  if(queue == NULL){
    Serial.println("Error creating the queue");
  }
 
}
 
void loop() {
 
// Start a new measurement:


  if(queue == NULL){
    Serial.println("Queue was not created");
    return;
  }

  for(int i = 0; i<10; i++)	// lire 10 fois les données de la structure 
  {
    
    struct sensor mySensor;
    mySensor.deviceId = i;
    mySensor.measurementType = rand()%10 + 1; 	// mettre une valeur aléatoire en 0 et 10, utilisation de rand;
    
    xQueueSend(queue, &mySensor, portMAX_DELAY);  		// https://greenwaves-technologies.com/manuals/BUILD/FREERTOS/html/group__xQueueSend.html
  }
 
  struct sensor element;
 
  for(int i = 0; i<10; i++){
    xQueueReceive(queue, &element, portMAX_DELAY);		// https://greenwaves-technologies.com/manuals/BUILD/FREERTOS/html/group__xQueueReceive.html
 
		
    float result = readDistanceCM();// resultat du traitement de readDistanceCM dans "distance"
    Serial.print("Device ID:"); // afficher les 3 valeurs "Device ID:","Measurement type: ", "Valeur en cm: "
    Serial.println(element.deviceId); // afficher les 3 valeurs "Device ID:","Measurement type: ", "Valeur en cm: "
		
    Serial.print("Measurement type: "); // afficher les 3 valeurs "Device ID:","Measurement type: ", "Valeur en cm: "
    Serial.println(element.measurementType); // afficher les 3 valeurs "Device ID:","Measurement type: ", "Valeur en cm: "
		
    Serial.print("Valeur en cm:"); // afficher les 3 valeurs "Device ID:","Measurement type: ", "Valeur en cm: "
    Serial.println(result); // afficher les 3 valeurs "Device ID:","Measurement type: ", "Valeur en cm: "

    vTaskDelay(1000 / portTICK_PERIOD_MS);
    						// période de 1 s
  }
 
  Serial.println();
  delay(4000);
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND