Blame view

code_arduino/serialArduino/serialArduino.ino 3.34 KB
a4d85595   aknockae   Ajout de serialAr...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  /***************************************************************************
    This is a library for the BME280 humidity, temperature & pressure sensor
  
    Designed specifically to work with the Adafruit BME280 Breakout
    ----> http://www.adafruit.com/products/2650
  
    These sensors use I2C or SPI to communicate, 2 or 4 pins are required
    to interface. The device's I2C address is either 0x76 or 0x77.
  
    Adafruit invests time and resources providing this open source code,
    please support Adafruit andopen-source hardware by purchasing products
    from Adafruit!
  
    Written by Limor Fried & Kevin Townsend for Adafruit Industries.
    BSD license, all text above must be included in any redistribution
   ***************************************************************************/
  
  byte requestBytes[3];   // for incoming serial data
  byte answerBytes[3];
  
  
  #include <Wire.h>
  #include <SPI.h>
  #include <Adafruit_Sensor.h>
  #include <Adafruit_BME280.h>
  
  #define BME_SCK 13
  #define BME_MISO 12
  #define BME_MOSI 11
  #define BME_CS 10
  
  //Adafruit_BME280 bme; // I2C
  //Adafruit_BME280 bme(BME_CS); // hardware SPI
  Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
  
  unsigned long delayTime;
  
  void setup() {
      Serial.begin(9600);
      bme.begin();
  }
  
  
  void loop() { 
  
  
      if (Serial.available() <= 3 && Serial.available() >= 1 ) {
        Serial.readBytes(requestBytes,3);
        if(requestBytes[0] == 'G' && requestBytes[1] == 'E' && requestBytes[2] == 'T') //Si 3 octets correspondant à G,E et T sont envoyé on envoie les données météo
        {
          //on charge les donnée dans la chaîne de bytes d'envoi (modélisé par un tableau)
          answerBytes[0] = pressureToByte(bme.readPressure());
          answerBytes[1] = tempToByte(bme.readTemperature());
          answerBytes[2] = humidityToByte(bme.readHumidity());
          
          Serial.write(answerBytes,3);
          /*Serial.println(answerBytes[0]+845,DEC);
          Serial.println(answerBytes[1],DEC);
          Serial.println(answerBytes[2],DEC);*/
  
        }
      }
     // printValues();
  }
  
  
  void printValues() {
      Serial.print("Temperature = ");
      Serial.print(bme.readTemperature());
      Serial.println(" *C");
  
      Serial.print("Pressure = ");
  
      Serial.print(bme.readPressure() / 100.0F);
      Serial.println(" hPa");
  
      Serial.print("Approx. Altitude = ");
     // Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
      Serial.println(" m");
  
      Serial.print("Humidity = ");
      Serial.print(bme.readHumidity());
      Serial.println(" %");
  
      Serial.println(pressureToByte(bme.readPressure())+845);
      Serial.println(tempToByte(bme.readTemperature()));
      Serial.println(humidityToByte(bme.readHumidity()));
  
     // Serial.println(sizeof(bme.readPressure()));
     // Serial.println(sizeof(int));
      //sizeof(bme.readTemperature());
      //Serial.println(500.9);
      //Serial.println(arrondiSuperieur(500.9));
      delay(1000);
  
      
  
      Serial.println("*******************************************");
  }
  
  int arrondiSuperieur(float val)
  {
    int newVal = 0;
    //arrondi supérieur
    if(val-(int)val >= 0.5)
      newVal = (int)val+1;
    else
      newVal = (int)val;
  
    return newVal;
  }
  
  int pressureToByte(float pressure)
  {
    return (int)(arrondiSuperieur(pressure/100.0)-845);
  }
  
  byte tempToByte(float temp)
  {
    return (byte)arrondiSuperieur(temp);
  }
  
  byte humidityToByte(float humidity)
  {
    return (byte)arrondiSuperieur(humidity);
  }