serialArduino.ino
3.34 KB
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
127
128
/***************************************************************************
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);
}