ENIB 2023 : UnderPressure : Différence entre versions
(→photo de l'équipe) |
(→Catégories) |
||
| (8 révisions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
==photo de l'équipe== | ==photo de l'équipe== | ||
| − | [[Fichier: | + | [[Fichier:Snapchat-1427582049.jpg|600px]] |
==Que fait ce projet ? == | ==Que fait ce projet ? == | ||
| + | Le joueur se retrouve face à un plateau rempli de verres avec des pailles. Son but est de trouver le bon verre et de souffler dedans à 2 bars pendant 5 secondes (le nombre de verres sur le plateau). Plusieurs énigmes-indices l'aideront, elles seront notées dans la décoration des verres (papier crépon). Lorsque le jeu est gagné, la led rouge devient verte. | ||
==Liste des composants== | ==Liste des composants== | ||
| − | * | + | * Carte Arduino |
| − | * | + | * Capteur de pression BME280 |
| − | * | + | * Leds rouge, verte, orange |
| + | * Verres | ||
| + | * Pailles | ||
==Code== | ==Code== | ||
<pre> | <pre> | ||
| − | + | ||
| + | |||
| + | #include <Wire.h> | ||
| + | #include <Adafruit_Sensor.h> | ||
| + | #include <Adafruit_BME280.h> | ||
| + | |||
| + | Adafruit_BME280 bme; // I2C | ||
| + | |||
| + | const int greenLed = 5; | ||
| + | const int orangeLed = 6; | ||
| + | const int redLed = 7; | ||
| + | const float targetPressure = 1.0; | ||
| + | const int targetDuration = 5000; // 5 seconds | ||
| + | |||
| + | unsigned long startTime; | ||
| + | bool pressureReached = false; | ||
| + | |||
| + | void setup() { | ||
| + | // Start the I2C communication | ||
| + | Wire.begin(); | ||
| + | |||
| + | // Initialize the BME280 sensor | ||
| + | bme.begin(0x76); | ||
| + | |||
| + | // Set the LED pins as output | ||
| + | pinMode(greenLed, OUTPUT); | ||
| + | pinMode(orangeLed, OUTPUT); | ||
| + | pinMode(redLed, OUTPUT); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | float pressure = bme.readPressure() / 100.0F; | ||
| + | |||
| + | // Check if the pressure is correct | ||
| + | if (pressure >= targetPressure) { | ||
| + | if (!pressureReached) { | ||
| + | // Start the timer | ||
| + | startTime = millis(); | ||
| + | pressureReached = true; | ||
| + | } else { | ||
| + | // Check if the duration is long enough | ||
| + | if (millis() - startTime >= targetDuration) { | ||
| + | // Turn on the green LED | ||
| + | digitalWrite(greenLed, HIGH); | ||
| + | digitalWrite(orangeLed, LOW); | ||
| + | digitalWrite(redLed, LOW); | ||
| + | } else { | ||
| + | // Turn on the orange LED | ||
| + | digitalWrite(greenLed, LOW); | ||
| + | digitalWrite(orangeLed, HIGH); | ||
| + | digitalWrite(redLed, LOW); | ||
| + | } | ||
| + | } | ||
| + | } else { | ||
| + | // Turn on the red LED | ||
| + | digitalWrite(greenLed, LOW); | ||
| + | digitalWrite(orangeLed, LOW); | ||
| + | digitalWrite(redLed, HIGH); | ||
| + | pressureReached = false; | ||
| + | } | ||
| + | } | ||
</pre> | </pre> | ||
| Ligne 19 : | Ligne 82 : | ||
[[Catégorie:Enib2023]] | [[Catégorie:Enib2023]] | ||
| + | |||
| + | [[Catégorie:Arduino]] | ||
Version actuelle datée du 15 janvier 2024 à 16:59
photo de l'équipe
Que fait ce projet ?
Le joueur se retrouve face à un plateau rempli de verres avec des pailles. Son but est de trouver le bon verre et de souffler dedans à 2 bars pendant 5 secondes (le nombre de verres sur le plateau). Plusieurs énigmes-indices l'aideront, elles seront notées dans la décoration des verres (papier crépon). Lorsque le jeu est gagné, la led rouge devient verte.
Liste des composants
- Carte Arduino
- Capteur de pression BME280
- Leds rouge, verte, orange
- Verres
- Pailles
Code
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // I2C
const int greenLed = 5;
const int orangeLed = 6;
const int redLed = 7;
const float targetPressure = 1.0;
const int targetDuration = 5000; // 5 seconds
unsigned long startTime;
bool pressureReached = false;
void setup() {
// Start the I2C communication
Wire.begin();
// Initialize the BME280 sensor
bme.begin(0x76);
// Set the LED pins as output
pinMode(greenLed, OUTPUT);
pinMode(orangeLed, OUTPUT);
pinMode(redLed, OUTPUT);
}
void loop() {
float pressure = bme.readPressure() / 100.0F;
// Check if the pressure is correct
if (pressure >= targetPressure) {
if (!pressureReached) {
// Start the timer
startTime = millis();
pressureReached = true;
} else {
// Check if the duration is long enough
if (millis() - startTime >= targetDuration) {
// Turn on the green LED
digitalWrite(greenLed, HIGH);
digitalWrite(orangeLed, LOW);
digitalWrite(redLed, LOW);
} else {
// Turn on the orange LED
digitalWrite(greenLed, LOW);
digitalWrite(orangeLed, HIGH);
digitalWrite(redLed, LOW);
}
}
} else {
// Turn on the red LED
digitalWrite(greenLed, LOW);
digitalWrite(orangeLed, LOW);
digitalWrite(redLed, HIGH);
pressureReached = false;
}
}
