Compare commits
No commits in common. "master" and "parameter" have entirely different histories.
34 changed files with 213 additions and 945 deletions
BIN
BECppRapport.pdf
BIN
BECppRapport.pdf
Binary file not shown.
|
@ -4,22 +4,18 @@
|
||||||
|
|
||||||
#include "../../../include/AnalogDevices/AnalogSensors/AnalogSensorManometre.h"
|
#include "../../../include/AnalogDevices/AnalogSensors/AnalogSensorManometre.h"
|
||||||
|
|
||||||
int AnalogSensorManometre::alea = -1;
|
AnalogSensorManometre::AnalogSensorManometre(float val, int temps):AnalogSensor(val,temps){ alea = 1;}
|
||||||
|
|
||||||
AnalogSensorManometre::AnalogSensorManometre(int val, int temps):AnalogDevice(val,temps){
|
|
||||||
AnalogSensorManometre::alea = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AnalogSensorManometre::run(){
|
void AnalogSensorManometre::run(){
|
||||||
|
int cpt = 0;
|
||||||
while(1){
|
while(1){
|
||||||
if(ptrmem!=NULL) {
|
if(ptrmem!=NULL){
|
||||||
*ptrmem = val + AnalogSensorManometre::alea;
|
if(cpt == 5){
|
||||||
val = val + AnalogSensorManometre::alea;
|
*ptrmem = val - alea;
|
||||||
|
val = val - alea;
|
||||||
|
cpt = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sleep(temps);
|
sleep(temps);
|
||||||
|
cpt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnalogSensorManometre::setAlea(int alea) {
|
|
||||||
AnalogSensorManometre::alea = alea;
|
|
||||||
}
|
|
||||||
|
|
|
@ -18,7 +18,3 @@ void AnalogSensorPHmetre::run() {
|
||||||
cpt ++;
|
cpt ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnalogSensorPHmetre::setAlea(int alea) {
|
|
||||||
AnalogSensorPHmetre::alea = alea;
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,20 +3,3 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "../../../include/DigitalDevices/DigitalActuators/DigitalActuatorElectrovanne.h"
|
#include "../../../include/DigitalDevices/DigitalActuators/DigitalActuatorElectrovanne.h"
|
||||||
#include "../../../include/AnalogDevices/AnalogSensors/AnalogSensorManometre.h"
|
|
||||||
|
|
||||||
DigitalActuatorElectrovanne::DigitalActuatorElectrovanne(int temps) : DigitalActuator(temps){}
|
|
||||||
|
|
||||||
void DigitalActuatorElectrovanne::run() {
|
|
||||||
int previousState = LOW;
|
|
||||||
while (1){
|
|
||||||
state = *ptrmem;
|
|
||||||
if ((state != previousState)&&(state == HIGH)){
|
|
||||||
AnalogSensorManometre::setAlea(5);
|
|
||||||
previousState = HIGH;
|
|
||||||
} else if((state != previousState)&&(state == LOW)) {
|
|
||||||
AnalogSensorManometre::setAlea(-1);
|
|
||||||
previousState = LOW;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -4,7 +4,13 @@
|
||||||
|
|
||||||
#include "../../../include/DigitalDevices/DigitalActuators/DigitalActuatorRadiator.h"
|
#include "../../../include/DigitalDevices/DigitalActuators/DigitalActuatorRadiator.h"
|
||||||
|
|
||||||
DigitalActuatorRadiator::DigitalActuatorRadiator(int temps) : DigitalActuator(temps){}
|
DigitalActuatorRadiator::DigitalActuatorRadiator(int temps, float thresholdHigh, float thresholdLow) : DigitalActuator(temps),
|
||||||
|
thresholdHigh(thresholdHigh), thresholdLow(thresholdLow) {}
|
||||||
|
|
||||||
|
void DigitalActuatorRadiator::activate() {
|
||||||
|
DigitalDevice::state = HIGH;
|
||||||
|
}
|
||||||
|
|
||||||
void DigitalActuatorRadiator::run() {
|
void DigitalActuatorRadiator::run() {
|
||||||
int previousState = LOW;
|
int previousState = LOW;
|
||||||
while (1){
|
while (1){
|
||||||
|
@ -18,3 +24,19 @@ void DigitalActuatorRadiator::run() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float DigitalActuatorRadiator::getThresholdLow() const {
|
||||||
|
return thresholdLow;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DigitalActuatorRadiator::setThresholdLow(float thresholdLow) {
|
||||||
|
DigitalActuatorRadiator::thresholdLow = thresholdLow;
|
||||||
|
}
|
||||||
|
|
||||||
|
float DigitalActuatorRadiator::getThresholdHigh() const {
|
||||||
|
return thresholdHigh;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DigitalActuatorRadiator::setThresholdHigh(float threshold) {
|
||||||
|
DigitalActuatorRadiator::thresholdHigh = threshold;
|
||||||
|
}
|
||||||
|
|
|
@ -2,23 +2,23 @@
|
||||||
// Created by camer on 16/05/2020.
|
// Created by camer on 16/05/2020.
|
||||||
//
|
//
|
||||||
//#define PATH "D:\\Documents\\Etudes\\INSA\\4A\\BECpp\\Projet_VictorAvecUnK\\src\\on.txt"
|
//#define PATH "D:\\Documents\\Etudes\\INSA\\4A\\BECpp\\Projet_VictorAvecUnK\\src\\on.txt"
|
||||||
//#define PATH "/Users/victorleroch/Documents/INSA/Année4/C++/Projet_VictorAvecUnK/on.txt"
|
#define PATH "/Users/victorleroch/Documents/INSA/Année4/C++/Projet_VictorAvecUnK/on.txt"
|
||||||
#include "../../../include/DigitalDevices/DigitalSensors/ExternalDigitalSensorButton.h"
|
#include "../../../include/DigitalDevices/DigitalSensors/ExternalDigitalSensorButton.h"
|
||||||
|
|
||||||
//ExternalDigDevice/////////////////////////
|
//ExternalDigDevice/////////////////////////
|
||||||
|
|
||||||
ExternalDigitalSensorButton::ExternalDigitalSensorButton(int temps, std::string PATH):DigitalSensor(temps), PATH(PATH){}
|
ExternalDigitalSensorButton::ExternalDigitalSensorButton(int temps):DigitalSensor(temps) {}
|
||||||
|
|
||||||
int ExternalDigitalSensorButton::getState(){
|
int ExternalDigitalSensorButton::getState(){
|
||||||
setState(); //determine if on.txt exists before getting state
|
setState(); //determine if on.txt exists before getting state
|
||||||
return DigitalSensor::state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExternalDigitalSensorButton::setState() {
|
void ExternalDigitalSensorButton::setState() {
|
||||||
if (ifstream (PATH)){
|
if (ifstream (PATH)){
|
||||||
DigitalSensor::state = HIGH;
|
state = HIGH;
|
||||||
} else {
|
} else {
|
||||||
DigitalSensor::state = LOW;
|
state = LOW;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
//
|
|
||||||
// Created by camer on 22/05/2020.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "../../include/I2CDevices/Keyboard.h"
|
|
||||||
|
|
||||||
Keyboard::Keyboard(): Device() {}
|
|
||||||
|
|
||||||
//void Keyboard::run() {}
|
|
||||||
bool Keyboard::saisie = false;
|
|
||||||
|
|
||||||
void Keyboard::run() {
|
|
||||||
while (1) {
|
|
||||||
if (saisie && i2cbus != NULL) {
|
|
||||||
cin >> buf;
|
|
||||||
while (!(i2cbus->isEmptyRegister(i2caddr))) {}
|
|
||||||
Device::i2cbus->write(i2caddr, buf, I2C_BUFFER_SIZE);
|
|
||||||
saisie = false;
|
|
||||||
} else if (i2cbus != NULL){
|
|
||||||
buf[0] = '\0';
|
|
||||||
while (!(i2cbus->isEmptyRegister(i2caddr))) {}
|
|
||||||
Device::i2cbus->write(i2caddr, buf, I2C_BUFFER_SIZE);
|
|
||||||
}
|
|
||||||
sleep(3);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
//
|
|
||||||
// Created by camer on 22/05/2020.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "../../include/I2CDevices/Screen.h"
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// classe I2CActuatorScreen
|
|
||||||
Screen::Screen ():Device(){}
|
|
||||||
|
|
||||||
void Screen::run(){
|
|
||||||
while(1){
|
|
||||||
if ( (i2cbus!=NULL)&&!(i2cbus->isEmptyRegister(i2caddr))){
|
|
||||||
Device::i2cbus->requestFrom(i2caddr, buf, I2C_BUFFER_SIZE);
|
|
||||||
cout << "---screen :"<< buf << endl;
|
|
||||||
}
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
}
|
|
13
README.txt
13
README.txt
|
@ -1,13 +0,0 @@
|
||||||
Nous avons fait un terrarium connecté pour tortues.
|
|
||||||
Ce terrarium utilise un thermomètre et un radiateur pour garder sa température entre deux
|
|
||||||
valeurs que l'utilisateur peut choisir, et un manomètre et une eletcrovanneattaché à une source d'eau
|
|
||||||
pour réguler la profondeur de l'eau.
|
|
||||||
|
|
||||||
L'outil contient aussi un écran affichant les caractéristiques, tels que la température, la pression,
|
|
||||||
l'état du radiateur et de l'électrovanne, et le nombre de tortues.
|
|
||||||
Il y a aussi 4 boutons (flèches), permettant de naviguer au sein d'un menu. Les fichiers pour simuler les boutons
|
|
||||||
doivent s'appeler :
|
|
||||||
ok.txt ; back.txt ; next.txt ; prev.txt
|
|
||||||
Ce menu permet de visualiser la liste des tortues, ajouter et supprimer des tortues de la liste, modifier les valeurs
|
|
||||||
min et max de température et pression. Ces valeurs sont vérifiés et doivent être possibles (min < max),
|
|
||||||
sinon une exception est levée. Le menu est navigable dans tous les sens.
|
|
|
@ -1,35 +0,0 @@
|
||||||
//
|
|
||||||
// Created by camer on 22/05/2020.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef PROJET_VICTORAVECUNK_MENU_H
|
|
||||||
#define PROJET_VICTORAVECUNK_MENU_H
|
|
||||||
#include <string>
|
|
||||||
#include <list>
|
|
||||||
#include "Tortue.h"
|
|
||||||
|
|
||||||
class Menu {
|
|
||||||
protected:
|
|
||||||
int id; //Défini l'écran actuel
|
|
||||||
int nbreChoices; //Nbre d'élémennts du menu actuel
|
|
||||||
int choice; //L'élement choisi du menu actuel
|
|
||||||
std::list<std::pair<int,std::string>> list; //liste de toutes les pairs d'Id et éléments
|
|
||||||
std::list<std::pair<int,int>> listId; //Chemin d'Id parcouru
|
|
||||||
public:
|
|
||||||
Menu(); //Constructeur
|
|
||||||
|
|
||||||
//Getters
|
|
||||||
int getId() const;
|
|
||||||
int getChoice() const;
|
|
||||||
|
|
||||||
//Methods
|
|
||||||
std::string getMessage();
|
|
||||||
void nextChoice();
|
|
||||||
void previousChoice();
|
|
||||||
void menuBack();
|
|
||||||
void menuNext();
|
|
||||||
std::string displayDefault(float temp, float press, int rad, int tap, int nbTortue);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif //PROJET_VICTORAVECUNK_MENU_H
|
|
|
@ -11,27 +11,14 @@ private:
|
||||||
int id;
|
int id;
|
||||||
int radState;
|
int radState;
|
||||||
int tapState;
|
int tapState;
|
||||||
|
|
||||||
int NextState;
|
|
||||||
int PrevState;
|
|
||||||
int OKState;
|
|
||||||
int BackState;
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Terrarium(int id);
|
Terrarium(int id);
|
||||||
//Getters and Setters
|
|
||||||
int getRadState() const;
|
int getRadState() const;
|
||||||
void setRadState(int radState);
|
void setRadState(int radState);
|
||||||
int getTapState() const;
|
int getTapState() const;
|
||||||
void setTapState(int tadState);
|
void setTapState(int tadState);
|
||||||
int getNextState() const;
|
|
||||||
void setNextState(int nextState);
|
|
||||||
int getPrevState() const;
|
|
||||||
void setPrevState(int prevState);
|
|
||||||
int getOkState() const;
|
|
||||||
void setOkState(int okState);
|
|
||||||
int getBackState() const;
|
|
||||||
void setBackState(int backState);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,24 +8,20 @@
|
||||||
|
|
||||||
class TerrariumParameter { //TODO add to diagram
|
class TerrariumParameter { //TODO add to diagram
|
||||||
private:
|
private:
|
||||||
float value, thresholdHigh, thresholdLow;
|
float value;
|
||||||
|
int thresholdHigh;
|
||||||
|
int thresholdLow;
|
||||||
public:
|
public:
|
||||||
class ThresholdExcep {
|
TerrariumParameter(int thresholdHigh, int thresholdLow);
|
||||||
public:
|
|
||||||
int id;
|
|
||||||
ThresholdExcep(int id):id(id){};
|
|
||||||
};
|
|
||||||
TerrariumParameter(float thresholdHigh, float thresholdLow);
|
|
||||||
|
|
||||||
//getters setters
|
//getters setters
|
||||||
float getValue() const;
|
float getValue() const;
|
||||||
void setValue(float value);
|
void setValue(float value);
|
||||||
float getThresholdHigh() const;
|
int getThresholdHigh() const;
|
||||||
void setThresholdHigh(float thresholdHigh);
|
void setThresholdHigh(int thresholdHigh);
|
||||||
float getThresholdLow() const;
|
int getThresholdLow() const;
|
||||||
void setThresholdLow(float thresholdLow);
|
void setThresholdLow(int thresholdLow);
|
||||||
|
|
||||||
//Methods
|
|
||||||
bool is2High();
|
bool is2High();
|
||||||
bool is2Low();
|
bool is2Low();
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,45 +6,21 @@
|
||||||
#define BE_TORTUE_H
|
#define BE_TORTUE_H
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <ostream>
|
|
||||||
|
|
||||||
class Tortue{
|
class Tortue{
|
||||||
private:
|
private:
|
||||||
std::string nom;
|
std::string nom;
|
||||||
std::string naissance;
|
int naissance;
|
||||||
std::string sexe;
|
std::string sexe;
|
||||||
static int nbTortue;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
class ExceptionDate{
|
Tortue(const std::string &nom, const std::string &sexe);
|
||||||
public:
|
|
||||||
int id;
|
|
||||||
|
|
||||||
ExceptionDate(int id);
|
|
||||||
};
|
|
||||||
Tortue();
|
|
||||||
|
|
||||||
Tortue(const std::string &nom, const std::string &naissance, const std::string &sexe);
|
|
||||||
|
|
||||||
const std::string &getNom() const;
|
const std::string &getNom() const;
|
||||||
|
|
||||||
void setNom(const std::string &nom);
|
int getNaissance() const;
|
||||||
|
int getAge() const;
|
||||||
|
|
||||||
void setNaissance(std::string naissance);
|
|
||||||
|
|
||||||
void setSexe(const std::string &sexe);
|
|
||||||
|
|
||||||
static int getNbTortue();
|
|
||||||
std::string getNaissance() const;
|
|
||||||
std::string getAge() const;
|
|
||||||
const std::string &getSexe() const;
|
const std::string &getSexe() const;
|
||||||
|
|
||||||
std::string getInfo();
|
|
||||||
static void delete1();
|
|
||||||
|
|
||||||
friend std::ostream &operator<<(std::ostream &os, const Tortue &tortue);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //BE_TORTUE_H
|
#endif //BE_TORTUE_H
|
||||||
|
|
225
app/src/Menu.cpp
225
app/src/Menu.cpp
|
@ -1,225 +0,0 @@
|
||||||
//
|
|
||||||
// Created by camer on 22/05/2020.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "../include/Menu.h"
|
|
||||||
|
|
||||||
|
|
||||||
Menu::Menu() : id(0), choice(0), nbreChoices(1) {
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(1,"\n Liste tortue ")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(1,"\n Management tortue ")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(1,"\n Gestion terrarium ")));
|
|
||||||
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(2,"\nInformation Tortue : ")));
|
|
||||||
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(3,"\n Ajouter tortue")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(3,"\n supprimer tortue")));
|
|
||||||
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(4,"\n Temperature max")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(4,"\n Temperature min")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(4,"\n Profondeur max")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(4,"\n Profondeur min")));
|
|
||||||
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(5,"\n Nom de la tortue a ajouter")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(11,"\n Naissance en utilisant le format jj/mm/yyyy")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(12,"\n Sexe")));
|
|
||||||
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(6,"\n Nom de la tortue a supprimer")));
|
|
||||||
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(7,"\n Temperature max")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(8,"\n Temperature min")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(9,"\n Profondeur max")));
|
|
||||||
list.push_back(*(new std::pair<int,
|
|
||||||
std::string>(10,"\n Profondeur min")));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Getters //
|
|
||||||
int Menu::getId() const {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Menu::getChoice() const {
|
|
||||||
return choice;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Methods
|
|
||||||
//Affiche tous les elements de liste qui ont la valeur Id
|
|
||||||
//dans leur pair, avec un indicateur sur l'élément choisi
|
|
||||||
std::string Menu::getMessage() {
|
|
||||||
int cpt = 0;
|
|
||||||
|
|
||||||
std::string message = "";
|
|
||||||
std::list<std::pair<int,std::string>>::iterator it;
|
|
||||||
for (it = list.begin(); it != list.end() ; it++) {
|
|
||||||
if (it->first == id){
|
|
||||||
if (cpt == choice && id != 2){
|
|
||||||
message += it->second + "<--";
|
|
||||||
} else {
|
|
||||||
message += it->second;
|
|
||||||
}
|
|
||||||
++cpt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Menu::nextChoice() {
|
|
||||||
choice = (choice + 1) % (nbreChoices);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Menu::previousChoice() {
|
|
||||||
if (choice == 0) choice = nbreChoices;
|
|
||||||
choice = (choice - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Reprendre les valeurs du dernier élément de
|
|
||||||
//la listeId, pour revenir sur le menu précédent
|
|
||||||
void Menu::menuBack() {
|
|
||||||
if(!listId.empty()){
|
|
||||||
choice = 0;
|
|
||||||
id = listId.back().first;
|
|
||||||
nbreChoices = listId.back().second;
|
|
||||||
listId.pop_back();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//En fonnction du menu actuel et de la
|
|
||||||
// valeur de choice, définir valeurs du menu suivant
|
|
||||||
void Menu::menuNext() {
|
|
||||||
if(id ==0){
|
|
||||||
listId.push_back(*(new std::pair<int,int>(id,nbreChoices)));
|
|
||||||
id = 1;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 3;
|
|
||||||
}
|
|
||||||
else if (id == 1){
|
|
||||||
listId.push_back(*(new std::pair<int,int>(id,nbreChoices)));
|
|
||||||
switch (choice){
|
|
||||||
case 0 :
|
|
||||||
id = 2;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = Tortue::getNbTortue();
|
|
||||||
break;
|
|
||||||
case 1 :
|
|
||||||
id = 3;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 2;
|
|
||||||
break;
|
|
||||||
case 2 :
|
|
||||||
id = 4;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
id = 0;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(id == 3){
|
|
||||||
listId.push_back(*(new std::pair<int,int>(id,nbreChoices)));
|
|
||||||
switch (choice){
|
|
||||||
case 0 :
|
|
||||||
id = 5;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
break;
|
|
||||||
case 1 :
|
|
||||||
id = 6;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
id = 0;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(id == 4){
|
|
||||||
listId.push_back(*(new std::pair<int,int>(id,nbreChoices)));
|
|
||||||
switch (choice){
|
|
||||||
case 0 :
|
|
||||||
id = 7;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
break;
|
|
||||||
case 1 :
|
|
||||||
id = 8;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
break;
|
|
||||||
case 2 :
|
|
||||||
id = 9;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
break;
|
|
||||||
case 3 :
|
|
||||||
id = 10;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
id = 0;
|
|
||||||
choice = 0;
|
|
||||||
nbreChoices = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(id == 5){
|
|
||||||
listId.push_back(*(new std::pair<int,int>(id,nbreChoices)));
|
|
||||||
id = 11;
|
|
||||||
choice = 2;
|
|
||||||
}
|
|
||||||
else if (id == 11){
|
|
||||||
listId.push_back(*(new std::pair<int,int>(id,nbreChoices)));
|
|
||||||
id = 12;
|
|
||||||
choice = 2;
|
|
||||||
}
|
|
||||||
else if (id == 12 || id == 6){
|
|
||||||
listId.clear();
|
|
||||||
id = 0;
|
|
||||||
choice = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Renvoyer string avec l'écran d'accueil
|
|
||||||
std::string Menu::displayDefault(float temp,
|
|
||||||
float press, int rad,
|
|
||||||
int tap, int nbTortue) {
|
|
||||||
std:: string message = "";
|
|
||||||
message = "\nTemperature : " + std::to_string(temp) + " °C \n";
|
|
||||||
message += "Pression : " + std::to_string(press) + " hPa\n";
|
|
||||||
if (rad) message += "Etat du radiateur : ON \n";
|
|
||||||
else message += "Etat du radiateur : OFF \n";
|
|
||||||
|
|
||||||
if (tap) message += "Etat du robinet : ON \n";
|
|
||||||
else message += "Etat du robinet : OFF \n";
|
|
||||||
|
|
||||||
message += "Il y a "+std::to_string(nbTortue)+" Tortues \0";
|
|
||||||
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,7 @@
|
||||||
#include "../include/Terrarium.h"
|
#include "../include/Terrarium.h"
|
||||||
#include "../../core_simulation.h"
|
#include "../../core_simulation.h"
|
||||||
Terrarium::Terrarium(int id) : id(id),
|
Terrarium::Terrarium(int id) : id(id),
|
||||||
radState(LOW), tapState(LOW), NextState{LOW},
|
radState(LOW), tapState(LOW){}
|
||||||
PrevState(LOW), OKState(LOW), BackState(LOW){}
|
|
||||||
|
|
||||||
//Getters and Setters //
|
|
||||||
|
|
||||||
int Terrarium::getRadState() const {
|
int Terrarium::getRadState() const {
|
||||||
return radState;
|
return radState;
|
||||||
|
@ -26,35 +23,3 @@ void Terrarium::setTapState(int tapState) {
|
||||||
Terrarium::tapState = tapState;
|
Terrarium::tapState = tapState;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Terrarium::getNextState() const {
|
|
||||||
return NextState;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Terrarium::setNextState(int nextState) {
|
|
||||||
NextState = nextState;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Terrarium::getPrevState() const {
|
|
||||||
return PrevState;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Terrarium::setPrevState(int prevState) {
|
|
||||||
PrevState = prevState;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Terrarium::getOkState() const {
|
|
||||||
return OKState;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Terrarium::setOkState(int okState) {
|
|
||||||
OKState = okState;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Terrarium::getBackState() const {
|
|
||||||
return BackState;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Terrarium::setBackState(int backState) {
|
|
||||||
BackState = backState;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#include "../include/TerrariumParameter.h"
|
#include "../include/TerrariumParameter.h"
|
||||||
//Constructor
|
//Constructor
|
||||||
TerrariumParameter::TerrariumParameter(float thresholdHigh, float thresholdLow) : thresholdHigh(thresholdHigh),
|
TerrariumParameter::TerrariumParameter(int thresholdHigh, int thresholdLow) : thresholdHigh(thresholdHigh),
|
||||||
thresholdLow(thresholdLow){}
|
thresholdLow(thresholdLow){}
|
||||||
|
|
||||||
//Getters Setters
|
//Getters Setters
|
||||||
|
@ -14,25 +14,17 @@ float TerrariumParameter::getValue() const {
|
||||||
void TerrariumParameter::setValue(float value) {
|
void TerrariumParameter::setValue(float value) {
|
||||||
TerrariumParameter::value = value;
|
TerrariumParameter::value = value;
|
||||||
}
|
}
|
||||||
float TerrariumParameter::getThresholdHigh() const {
|
int TerrariumParameter::getThresholdHigh() const {
|
||||||
return thresholdHigh;
|
return thresholdHigh;
|
||||||
}
|
}
|
||||||
void TerrariumParameter::setThresholdHigh(float thresholdHigh) {
|
void TerrariumParameter::setThresholdHigh(int thresholdHigh) {
|
||||||
if (thresholdHigh < thresholdLow){
|
TerrariumParameter::thresholdHigh = thresholdHigh;
|
||||||
throw ThresholdExcep(1);
|
|
||||||
} else {
|
|
||||||
TerrariumParameter::thresholdHigh = thresholdHigh;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
float TerrariumParameter::getThresholdLow() const {
|
int TerrariumParameter::getThresholdLow() const {
|
||||||
return thresholdLow;
|
return thresholdLow;
|
||||||
}
|
}
|
||||||
void TerrariumParameter::setThresholdLow(float thresholdLow) {
|
void TerrariumParameter::setThresholdLow(int thresholdLow) {
|
||||||
if (thresholdLow > thresholdHigh){
|
TerrariumParameter::thresholdLow = thresholdLow;
|
||||||
throw ThresholdExcep(2);
|
|
||||||
} else {
|
|
||||||
TerrariumParameter::thresholdLow = thresholdLow;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Methods
|
//Methods
|
||||||
|
|
|
@ -6,62 +6,11 @@
|
||||||
#include "../../core_simulation.h"
|
#include "../../core_simulation.h"
|
||||||
//#include <string>
|
//#include <string>
|
||||||
|
|
||||||
|
|
||||||
Tortue::Tortue() {
|
|
||||||
++nbTortue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Tortue::Tortue(const string &nom, const std::string &naissance, const string &sexe) : nom(nom), sexe(sexe), naissance(naissance) {
|
|
||||||
nbTortue ++;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string Tortue::getAge() const {
|
|
||||||
|
|
||||||
time_t rawtime;
|
|
||||||
|
|
||||||
struct tm * timeinfo ;
|
|
||||||
std::string date = naissance;
|
|
||||||
std::string message ="";
|
|
||||||
|
|
||||||
int annee = std::stoi(date.substr(6,9));
|
|
||||||
int mois = std::stoi(date.substr(3,4));
|
|
||||||
int jour = std::stoi(date.substr(0,2));
|
|
||||||
int h = 0;
|
|
||||||
int m = 0;
|
|
||||||
int s = 0;
|
|
||||||
|
|
||||||
time(&rawtime);
|
|
||||||
timeinfo = localtime(&rawtime);
|
|
||||||
timeinfo->tm_year = annee - 1900;
|
|
||||||
timeinfo->tm_mon= mois - 1;
|
|
||||||
timeinfo->tm_mday = jour;
|
|
||||||
timeinfo->tm_hour = h;
|
|
||||||
timeinfo->tm_min = m;
|
|
||||||
timeinfo->tm_sec = s;
|
|
||||||
|
|
||||||
|
|
||||||
long double naiss =std::mktime(timeinfo);
|
|
||||||
//std::cout << naiss << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
std::time_t now = std::time(nullptr);
|
|
||||||
long double time = now - naiss;
|
|
||||||
//std::cout << time <<std::endl;
|
|
||||||
|
|
||||||
int agean = time / 31557600;
|
|
||||||
time = time - (agean*31557600);
|
|
||||||
int agemois = time / 2592000;
|
|
||||||
|
|
||||||
message = to_string(agean) + " ans et " + to_string(agemois) + " mois";
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
int Tortue::nbTortue = 0;
|
|
||||||
|
|
||||||
const std::string &Tortue::getNom() const {
|
const std::string &Tortue::getNom() const {
|
||||||
return nom;
|
return nom;
|
||||||
}
|
}
|
||||||
|
|
||||||
string Tortue::getNaissance() const {
|
int Tortue::getNaissance() const {
|
||||||
return naissance;
|
return naissance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,80 +18,16 @@ const std::string &Tortue::getSexe() const {
|
||||||
return sexe;
|
return sexe;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Tortue::getNbTortue() {
|
Tortue::Tortue(const string &nom, const string &sexe) : nom(nom), sexe(sexe) {
|
||||||
return nbTortue;
|
naissance = std::time(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Tortue::getInfo() {
|
int Tortue::getAge() const {
|
||||||
std::string message;
|
int ageSec = std::time(nullptr) - naissance;
|
||||||
message = "\nMy name is "+this->nom;
|
int ageHour = ageSec/(60*60);
|
||||||
message += "\n" + this->getAge();
|
int ageDay = ageHour/24;
|
||||||
message += "\n"+this->sexe;
|
int age = ageDay / 365.25;
|
||||||
return message;
|
return age;
|
||||||
}
|
|
||||||
|
|
||||||
void Tortue::setNom(const string &nom) {
|
|
||||||
Tortue::nom = nom;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Tortue::setNaissance(std::string naissance) {
|
|
||||||
time_t rawtime;
|
|
||||||
|
|
||||||
struct tm * timeinfo ;
|
|
||||||
std::string date = naissance;
|
|
||||||
|
|
||||||
if (date.size() != 10 || date[2] != '/'
|
|
||||||
|| date[5] != '/'){
|
|
||||||
throw ExceptionDate(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
int annee = std::stoi(date.substr(6,9));
|
|
||||||
int mois = std::stoi(date.substr(3,4));
|
|
||||||
int jour = std::stoi(date.substr(0,2));
|
|
||||||
|
|
||||||
if (annee < 1900) throw ExceptionDate(3);
|
|
||||||
else if (mois > 12) throw ExceptionDate(4);
|
|
||||||
else if (jour > 31) throw ExceptionDate(5);
|
|
||||||
|
|
||||||
int h = 0;
|
|
||||||
int m = 0;
|
|
||||||
int s = 0;
|
|
||||||
|
|
||||||
time(&rawtime);
|
|
||||||
timeinfo = localtime(&rawtime);
|
|
||||||
timeinfo->tm_year = annee - 1900;
|
|
||||||
timeinfo->tm_mon= mois - 1;
|
|
||||||
timeinfo->tm_mday = jour;
|
|
||||||
timeinfo->tm_hour = h;
|
|
||||||
timeinfo->tm_min = m;
|
|
||||||
timeinfo->tm_sec = s;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
long double naiss =std::mktime(timeinfo);
|
|
||||||
//std::cout << naiss << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
std::time_t now = std::time(nullptr);
|
|
||||||
long double time = now - naiss;
|
|
||||||
if (time < 0){
|
|
||||||
throw ExceptionDate(1);
|
|
||||||
}
|
|
||||||
this->naissance = naissance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Tortue::setSexe(const string &sexe) {
|
|
||||||
Tortue::sexe = sexe;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Tortue::delete1() {
|
|
||||||
--nbTortue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ostream &operator<<(ostream &os, const Tortue &tortue) {
|
|
||||||
os << "nom: " << tortue.nom << " naissance: " << tortue.naissance << " sexe: " << tortue.sexe;
|
|
||||||
return os;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Tortue::ExceptionDate::ExceptionDate(int id) : id(id) {}
|
|
||||||
|
|
45
board.cpp
45
board.cpp
|
@ -1,55 +1,34 @@
|
||||||
#include "core_simulation.h"
|
#include "core_simulation.h"
|
||||||
|
#include "mydevices.h"
|
||||||
#include "include/AnalogDevices/AnalogSensors/AnalogSensorTemperature.h"
|
#include "include/AnalogDevices/AnalogSensors/AnalogSensorTemperature.h"
|
||||||
#include "include/DigitalDevices/DigitalActuators/IntelligentDigitalActuatorLED.h"
|
#include "include/DigitalDevices/DigitalActuators/IntelligentDigitalActuatorLED.h"
|
||||||
#include "include/AnalogDevices/AnalogSensors/AnalogSensorLuminosity.h"
|
#include "include/AnalogDevices/AnalogSensors/AnalogSensorLuminosity.h"
|
||||||
#include "include/DigitalDevices/DigitalSensors/ExternalDigitalSensorButton.h"
|
#include "include/DigitalDevices/DigitalSensors/ExternalDigitalSensorButton.h"
|
||||||
#include "include/AnalogDevices/AnalogSensors/AnalogSensorManometre.h"
|
#include "include/AnalogDevices/AnalogSensors/AnalogSensorManometre.h"
|
||||||
#include "include/DigitalDevices/DigitalActuators/DigitalActuatorRadiator.h"
|
#include "include/DigitalDevices/DigitalActuators/DigitalActuatorRadiator.h"
|
||||||
#include "include/DigitalDevices/DigitalActuators/DigitalActuatorElectrovanne.h"
|
|
||||||
#include "include/I2CDevices/Screen.h"
|
|
||||||
#include "include/I2CDevices/Keyboard.h"
|
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
|
|
||||||
#if __APPLE__
|
|
||||||
std::string btnNextPath = "/Users/victorleroch/Desktop/boutons/next.txt";
|
|
||||||
std::string btnPrevPath = "/Users/victorleroch/Desktop/boutons/prev.txt";
|
|
||||||
std::string btnOkPath = "/Users/victorleroch/Desktop/boutons/ok.txt";
|
|
||||||
std::string btnBackPath = "/Users/victorleroch/Desktop/boutons/back.txt";
|
|
||||||
#else //!___unix___
|
|
||||||
std::string btnNextPath = "D:\\Documents\\Etudes\\INSA\\4A\\BECpp\\Projet_VictorAvecUnK\\src\\next.txt";
|
|
||||||
std::string btnPrevPath = "D:\\Documents\\Etudes\\INSA\\4A\\BECpp\\Projet_VictorAvecUnK\\src\\prev.txt";
|
|
||||||
std::string btnOkPath = "D:\\Documents\\Etudes\\INSA\\4A\\BECpp\\Projet_VictorAvecUnK\\src\\ok.txt";
|
|
||||||
std::string btnBackPath = "D:\\Documents\\Etudes\\INSA\\4A\\BECpp\\Projet_VictorAvecUnK\\src\\back.txt";
|
|
||||||
#endif
|
|
||||||
// creation d'une board
|
// creation d'une board
|
||||||
Board esp8266;
|
Board esp8266;
|
||||||
// achat des senseurs et actionneurs
|
// achat des senseurs et actionneurs
|
||||||
AnalogSensorTemperature temperature(TEMP,DELAY);
|
AnalogSensorTemperature temperature(TEMP,DELAY);
|
||||||
Screen screen;
|
//DigitalActuatorLED led1(DELAY);
|
||||||
Keyboard keyboard;
|
IntelligentDigitalActuatorLED led1(DELAY);
|
||||||
ExternalDigitalSensorButton buttonNext(DELAY - 2, btnNextPath);
|
I2CActuatorScreen screen;
|
||||||
ExternalDigitalSensorButton buttonPrev(DELAY - 2, btnPrevPath);
|
AnalogSensorLuminosity luminosite(DELAY);
|
||||||
ExternalDigitalSensorButton buttonOK(DELAY - 2, btnOkPath);
|
ExternalDigitalSensorButton button(DELAY);
|
||||||
ExternalDigitalSensorButton buttonBack(DELAY - 2, btnBackPath);
|
AnalogSensorManometre manometre(4,DELAY);
|
||||||
AnalogSensorManometre manometre(PRESSURE,DELAY);
|
DigitalActuatorRadiator radiator(DELAY, THRESHOLDHIGH, THRESHOLDLOW);
|
||||||
DigitalActuatorRadiator radiator(DELAY);
|
|
||||||
DigitalActuatorElectrovanne electrovanne(DELAY);
|
|
||||||
|
|
||||||
|
|
||||||
// branchement des capteurs actionneurs
|
// branchement des capteurs actionneurs
|
||||||
esp8266.pin(0, radiator);
|
|
||||||
esp8266.pin(1,temperature);
|
esp8266.pin(1,temperature);
|
||||||
//esp8266.pin(0,led1);
|
//esp8266.pin(0,led1);
|
||||||
esp8266.pin(2, electrovanne);
|
esp8266.pin(2, luminosite);
|
||||||
esp8266.pin(3, buttonPrev);
|
|
||||||
esp8266.pin(4, buttonNext);
|
|
||||||
esp8266.pin(5, manometre);
|
|
||||||
esp8266.pin(6, buttonOK);
|
|
||||||
esp8266.pin(7, buttonBack);
|
|
||||||
|
|
||||||
esp8266.i2c(1,screen);
|
esp8266.i2c(1,screen);
|
||||||
esp8266.i2c(2,keyboard);
|
esp8266.pin(4, button);
|
||||||
|
esp8266.pin(5, manometre);
|
||||||
|
esp8266.pin(0, radiator);
|
||||||
|
|
||||||
// allumage de la carte
|
// allumage de la carte
|
||||||
esp8266.run();
|
esp8266.run();
|
||||||
|
|
|
@ -99,8 +99,8 @@ Device::Device(){
|
||||||
|
|
||||||
void Device::run(){
|
void Device::run(){
|
||||||
while(1){
|
while(1){
|
||||||
//cout << "empty device\n";
|
cout << "empty device\n";
|
||||||
sleep(4);
|
sleep(3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,5 +174,3 @@ void Board::i2c(int addr,Device& dev){
|
||||||
tabthreadbus[addr]=new thread(&Device::run,&dev);
|
tabthreadbus[addr]=new thread(&Device::run,&dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,13 @@
|
||||||
|
|
||||||
#define DELAY 3
|
#define DELAY 3
|
||||||
#define TEMP 17
|
#define TEMP 17
|
||||||
#define PRESSURE 2995
|
|
||||||
#define HIGH 1
|
#define HIGH 1
|
||||||
#define LOW 0
|
#define LOW 0
|
||||||
#define MAX_I2C_DEVICES 4
|
#define MAX_I2C_DEVICES 4
|
||||||
#define I2C_BUFFER_SIZE 1024
|
#define I2C_BUFFER_SIZE 1024
|
||||||
#define MAX_IO_PIN 10
|
#define MAX_IO_PIN 6
|
||||||
|
#define THRESHOLDHIGH 25
|
||||||
|
#define THRESHOLDLOW 20
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -126,8 +127,6 @@ public:
|
||||||
void setup();
|
void setup();
|
||||||
// fonction arduino : boucle de controle de la carte arduino
|
// fonction arduino : boucle de controle de la carte arduino
|
||||||
void loop();
|
void loop();
|
||||||
void TemperatureManagement();
|
|
||||||
void PressureManagement();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2,10 +2,7 @@
|
||||||
// Created by camer on 16/05/2020.
|
// Created by camer on 16/05/2020.
|
||||||
//
|
//
|
||||||
#include "../../core_simulation.h"
|
#include "../../core_simulation.h"
|
||||||
#include <unistd.h>
|
#include "../../mydevices.h"
|
||||||
#include <iostream>
|
|
||||||
#include <thread>
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
#ifndef PROJET_VICTORAVECUNK_ANALOGDEVICE_H
|
#ifndef PROJET_VICTORAVECUNK_ANALOGDEVICE_H
|
||||||
#define PROJET_VICTORAVECUNK_ANALOGDEVICE_H
|
#define PROJET_VICTORAVECUNK_ANALOGDEVICE_H
|
||||||
|
|
|
@ -11,15 +11,11 @@
|
||||||
//#include <fstream>
|
//#include <fstream>
|
||||||
#include "../AnalogDevice.h"
|
#include "../AnalogDevice.h"
|
||||||
|
|
||||||
class AnalogSensorManometre: public AnalogDevice {
|
class AnalogSensorManometre : public AnalogSensor{
|
||||||
private:
|
private:
|
||||||
static int alea;
|
int alea;
|
||||||
public:
|
public:
|
||||||
// fait osciller la valeur du cpateur de 1
|
AnalogSensorManometre(float val, int t); //
|
||||||
//constructeur ne pas oublier d'initialiser la classe mere
|
|
||||||
AnalogSensorManometre(int d,int t);
|
|
||||||
static void setAlea(int alea);
|
|
||||||
// thread representant le capteur et permettant de fonctionner independamment de la board
|
|
||||||
virtual void run();
|
virtual void run();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,9 @@
|
||||||
#include "../AnalogDevice.h"
|
#include "../AnalogDevice.h"
|
||||||
|
|
||||||
class AnalogSensorPHmetre : public AnalogSensor {
|
class AnalogSensorPHmetre : public AnalogSensor {
|
||||||
private:
|
|
||||||
static int alea;
|
|
||||||
public:
|
public:
|
||||||
static void setAlea(int alea);
|
static int alea;
|
||||||
|
|
||||||
AnalogSensorPHmetre(float val, int temps);
|
AnalogSensorPHmetre(float val, int temps);
|
||||||
virtual void run();
|
virtual void run();
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
// exemple de capteur analogique de temperature, ne pas oublier d'heriter de Device
|
// exemple de capteur analogique de temperature, ne pas oublier d'heriter de Device
|
||||||
class AnalogSensorTemperature: public AnalogDevice {
|
class AnalogSensorTemperature: public AnalogDevice {
|
||||||
private:
|
public:
|
||||||
static int alea;
|
static int alea;
|
||||||
public:
|
public:
|
||||||
// fait osciller la valeur du cpateur de 1
|
// fait osciller la valeur du cpateur de 1
|
||||||
|
|
|
@ -6,12 +6,8 @@
|
||||||
#define PROJET_VICTORAVECUNK_DIGITALACTUATORELECTROVANNE_H
|
#define PROJET_VICTORAVECUNK_DIGITALACTUATORELECTROVANNE_H
|
||||||
|
|
||||||
|
|
||||||
#include "../DigitalDevice.h"
|
class DigitalActuatorElectrovanne {
|
||||||
|
|
||||||
class DigitalActuatorElectrovanne : public DigitalActuator{
|
|
||||||
public:
|
|
||||||
DigitalActuatorElectrovanne(int temps);
|
|
||||||
void run();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,20 @@
|
||||||
#include "../../../include/AnalogDevices/AnalogSensors/AnalogSensorTemperature.h"
|
#include "../../../include/AnalogDevices/AnalogSensors/AnalogSensorTemperature.h"
|
||||||
|
|
||||||
class DigitalActuatorRadiator : public DigitalActuator {
|
class DigitalActuatorRadiator : public DigitalActuator {
|
||||||
|
private:
|
||||||
|
float thresholdHigh, thresholdLow;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DigitalActuatorRadiator(int temps);
|
DigitalActuatorRadiator(int temps, float threshold, float thresholdLow);
|
||||||
|
|
||||||
|
float getThresholdHigh() const;
|
||||||
|
void setThresholdHigh(float threshold);
|
||||||
|
|
||||||
|
float getThresholdLow() const;
|
||||||
|
|
||||||
|
void setThresholdLow(float thresholdLow);
|
||||||
|
|
||||||
|
void activate();
|
||||||
void run();
|
void run();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,10 +7,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "../../core_simulation.h"
|
#include "../../core_simulation.h"
|
||||||
#include <unistd.h>
|
#include "../../mydevices.h"
|
||||||
#include <iostream>
|
|
||||||
#include <thread>
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
class DigitalDevice : public Device {
|
class DigitalDevice : public Device {
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -9,10 +9,8 @@
|
||||||
#include "../DigitalDevice.h"
|
#include "../DigitalDevice.h"
|
||||||
|
|
||||||
class ExternalDigitalSensorButton : public DigitalSensor{
|
class ExternalDigitalSensorButton : public DigitalSensor{
|
||||||
private:
|
|
||||||
std::string PATH;
|
|
||||||
public:
|
public:
|
||||||
ExternalDigitalSensorButton(int temps, std::string PATH);
|
ExternalDigitalSensorButton(int temps);
|
||||||
|
|
||||||
int getState();
|
int getState();
|
||||||
void setState();
|
void setState();
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
//
|
|
||||||
// Created by camer on 22/05/2020.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef PROJET_VICTORAVECUNK_KEYBOARD_H
|
|
||||||
#define PROJET_VICTORAVECUNK_KEYBOARD_H
|
|
||||||
|
|
||||||
#include "../../core_simulation.h"
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
class Keyboard : public Device{
|
|
||||||
protected:
|
|
||||||
char buf[I2C_BUFFER_SIZE];
|
|
||||||
public:
|
|
||||||
static bool saisie;
|
|
||||||
Keyboard();
|
|
||||||
virtual void run();
|
|
||||||
//void saisie();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif //PROJET_VICTORAVECUNK_KEYBOARD_H
|
|
|
@ -1,25 +0,0 @@
|
||||||
//
|
|
||||||
// Created by camer on 22/05/2020.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef PROJET_VICTORAVECUNK_SCREEN_H
|
|
||||||
#define PROJET_VICTORAVECUNK_SCREEN_H
|
|
||||||
|
|
||||||
|
|
||||||
#include "../../core_simulation.h"
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
class Screen : public Device{
|
|
||||||
protected:
|
|
||||||
// memorise l'affichage de l'ecran
|
|
||||||
char buf[I2C_BUFFER_SIZE];
|
|
||||||
|
|
||||||
public:
|
|
||||||
// constructeur
|
|
||||||
Screen ();
|
|
||||||
// thread representant le capteur et permettant de fonctionner independamment de la board
|
|
||||||
virtual void run();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif //PROJET_VICTORAVECUNK_SCREEN_H
|
|
35
mydevices.cpp
Normal file
35
mydevices.cpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
|
||||||
|
#include "mydevices.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// classe I2CActuatorScreen
|
||||||
|
I2CActuatorScreen::I2CActuatorScreen ():Device(){}
|
||||||
|
|
||||||
|
void I2CActuatorScreen::run(){
|
||||||
|
while(1){
|
||||||
|
if ( (i2cbus!=NULL)&&!(i2cbus->isEmptyRegister(i2caddr))){
|
||||||
|
Device::i2cbus->requestFrom(i2caddr, buf, I2C_BUFFER_SIZE);
|
||||||
|
cout << "---screen :"<< buf << endl;
|
||||||
|
}
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//TODO Capteur de temperature a revoir avec conditions
|
||||||
|
//TODO Electrovanne / moteur (a voir food)
|
||||||
|
//TODO Radiateur rechauffer terrarium
|
||||||
|
//TODO PHmetre pour qualite de l'eau
|
||||||
|
//TODO regarder les manometre
|
||||||
|
//TODO Electrovanne pour remplir la piscine
|
||||||
|
|
||||||
|
//TODO Ecran d'affichage avec infos de temps, derniere bouffe, infos sur tortues
|
||||||
|
//TODO Bouton pour sauter prochaine bouffe (I2C)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
24
mydevices.h
Normal file
24
mydevices.h
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef MYDEVICES_H
|
||||||
|
#define MYDEVICES_H
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <thread>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fstream>
|
||||||
|
#include "core_simulation.h"
|
||||||
|
|
||||||
|
// exemple d'actionneur sur le bus I2C permettant d'echanger des tableaux de caracteres : un ecran, ne pas oublier d'heriter de Device
|
||||||
|
class I2CActuatorScreen : public Device{
|
||||||
|
protected:
|
||||||
|
// memorise l'affichage de l'ecran
|
||||||
|
char buf[I2C_BUFFER_SIZE];
|
||||||
|
|
||||||
|
public:
|
||||||
|
// constructeur
|
||||||
|
I2CActuatorScreen ();
|
||||||
|
// thread representant le capteur et permettant de fonctionner independamment de la board
|
||||||
|
virtual void run();
|
||||||
|
};
|
||||||
|
//class ExternalDigitalSensorButton: public Device
|
||||||
|
#endif
|
0
on.txt
Normal file
0
on.txt
Normal file
283
sketch_ino.cpp
283
sketch_ino.cpp
|
@ -2,25 +2,12 @@
|
||||||
#include "core_simulation.h"
|
#include "core_simulation.h"
|
||||||
#include "app/include/Terrarium.h"
|
#include "app/include/Terrarium.h"
|
||||||
#include "app/include/TerrariumParameter.h"
|
#include "app/include/TerrariumParameter.h"
|
||||||
#include "app/include/Menu.h"
|
|
||||||
#include "app/include/Tortue.h"
|
|
||||||
#include "include/I2CDevices/Keyboard.h"
|
|
||||||
|
|
||||||
|
|
||||||
Terrarium *terrarium = new Terrarium(1);
|
Terrarium terrarium(1);
|
||||||
TerrariumParameter *temperature = new TerrariumParameter(25,
|
TerrariumParameter temperature(25, 20);
|
||||||
20);
|
TerrariumParameter pressure(3000,2990);
|
||||||
TerrariumParameter *pressure = new TerrariumParameter(3000,
|
TerrariumParameter ph(8,6);
|
||||||
2990);
|
|
||||||
|
|
||||||
Menu *menu = new Menu();
|
|
||||||
|
|
||||||
list<Tortue> * tortues = new list<Tortue>;
|
|
||||||
list<Tortue>::iterator iteratorT;
|
|
||||||
|
|
||||||
string message = "";
|
|
||||||
string input = "";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,242 +17,62 @@ void Board::setup(){
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
// on fixe les pin en entree et en sorite en fonction des capteurs/actionneurs mis sur la carte
|
// on fixe les pin en entree et en sorite en fonction des capteurs/actionneurs mis sur la carte
|
||||||
pinMode(1, INPUT);
|
pinMode(1, INPUT);
|
||||||
|
pinMode(0, OUTPUT);
|
||||||
|
pinMode(2, INPUT);
|
||||||
pinMode(4, INPUT);
|
pinMode(4, INPUT);
|
||||||
pinMode(5, INPUT);
|
pinMode(5, INPUT);
|
||||||
pinMode(3, INPUT);
|
|
||||||
pinMode(6, INPUT);
|
|
||||||
pinMode(7, INPUT);
|
|
||||||
|
|
||||||
pinMode(0, OUTPUT);
|
|
||||||
pinMode(2, OUTPUT);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
digitalWrite(0,LOW);
|
digitalWrite(0,LOW);
|
||||||
//remplissage de la liste de tortues, un jour avec lien à une bdd
|
//pinMode(6, OUTPUT);
|
||||||
tortues->push_back(*(new Tortue("Marvin","03/09/1996","male")));
|
|
||||||
tortues->push_back(*(new Tortue("Clara","03/09/2008", "female")));
|
|
||||||
tortues->push_back(*(new Tortue("Camille","03/09/2017", "non binary")));
|
|
||||||
tortues->push_back(*(new Tortue("Clarisse","03/05/1971", "female")));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// la boucle de controle arduino
|
// la boucle de controle arduino
|
||||||
void Board::loop() {
|
void Board::loop(){
|
||||||
char buf[150]; //buf utilisé en output
|
char buf[100];
|
||||||
char inputBuf[150]; //buf utilisé en input
|
int val;
|
||||||
static int cpt = 0;
|
int val1;
|
||||||
static int bascule = 0;
|
static int cpt=0;
|
||||||
int i = 0;
|
static int bascule=0;
|
||||||
std::string toDisplay;
|
int i=0;
|
||||||
|
//for(i=0;i<10;i++){
|
||||||
|
// if (i%3==0) {
|
||||||
|
// lecture sur la pin 1 : capteur de temperature
|
||||||
|
temperature.setValue(analogRead(1));
|
||||||
|
sprintf(buf, "temperature %f", temperature.getValue());
|
||||||
|
Serial.println(buf);
|
||||||
|
|
||||||
|
if ((temperature.is2Low()) && (terrarium.getRadState() == LOW)) {
|
||||||
|
digitalWrite(0, HIGH);
|
||||||
|
terrarium.setRadState(HIGH);
|
||||||
|
}
|
||||||
|
else if ((temperature.is2High() ) && (terrarium.getRadState() == HIGH)) {
|
||||||
|
digitalWrite(0, LOW);
|
||||||
|
terrarium.setRadState(LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < 10; i++) {
|
// lecture sur la pin 2 : capteur de temperature
|
||||||
TemperatureManagement(); //Met à jour la valeur de temp
|
val = analogRead(2);
|
||||||
PressureManagement(); // Met à jour la valeur de pression
|
sprintf(buf, "luminosite %d", val);
|
||||||
//cout << tortues->back() << endl;
|
Serial.println(buf);
|
||||||
|
// }
|
||||||
|
|
||||||
if (menu->getId() == 0 ) { //Afficher écran d'accueil
|
// if(cpt%5==0){
|
||||||
message = menu->displayDefault(temperature->getValue(),
|
// tous les 5 fois on affiche sur l ecran la temperature
|
||||||
pressure->getValue(),
|
sprintf(buf,"%d",val1);
|
||||||
terrarium->getRadState(),
|
bus.write(1,buf,100);
|
||||||
terrarium->getTapState(),
|
|
||||||
Tortue::getNbTortue());
|
|
||||||
|
|
||||||
} else { //Afficher le l'écran du ième menu
|
|
||||||
message = menu->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
int a3 = analogRead(3);
|
|
||||||
int a4 = analogRead(4);
|
|
||||||
int a6 = analogRead(6);
|
|
||||||
int a7 = analogRead(7);
|
|
||||||
//Conditions d'appui de bouton
|
|
||||||
if ( a3 == HIGH && (terrarium->getPrevState() != a3)) {
|
|
||||||
terrarium->setPrevState(HIGH);
|
|
||||||
menu->previousChoice();
|
|
||||||
} else if (a3 == LOW && (terrarium->getPrevState() != a3)) {
|
|
||||||
terrarium->setPrevState(LOW);
|
|
||||||
}
|
|
||||||
else if (a4 == HIGH && (terrarium->getNextState() != a4)) {
|
|
||||||
terrarium->setNextState(HIGH);
|
|
||||||
menu->nextChoice();
|
|
||||||
} else if (a4 == LOW && (terrarium->getNextState() != a4)) {
|
|
||||||
terrarium->setNextState(LOW);
|
|
||||||
}
|
|
||||||
else if (a6 == HIGH && (terrarium->getOkState() != a6)) {
|
|
||||||
terrarium->setOkState(HIGH);
|
|
||||||
menu->menuNext();
|
|
||||||
} else if (a6 == LOW && (terrarium->getOkState() != a6)) {
|
|
||||||
terrarium->setOkState(LOW);
|
|
||||||
}
|
|
||||||
else if (a7 == HIGH && (terrarium->getBackState() != a7)) {
|
|
||||||
terrarium->setBackState(HIGH);
|
|
||||||
menu->menuBack();
|
|
||||||
} else if (a7 == LOW && (terrarium->getBackState() != a7)) {
|
|
||||||
terrarium->setBackState(LOW);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (menu->getId() == 2){ //Lister les tortues
|
// }
|
||||||
iteratorT = tortues->begin();
|
|
||||||
for (int j = 0; j < menu->getChoice(); ++j) {
|
|
||||||
iteratorT++;
|
|
||||||
}
|
|
||||||
message += iteratorT->getInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cpt % 2 == 0) { //Afficher sur écran un tr sur 2
|
|
||||||
strcpy(buf, message.c_str());
|
|
||||||
if (buf != NULL) bus.write(1, buf, 150);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Menus nécessitant une saisie au clavier
|
|
||||||
if (menu->getId() >= 5 && menu->getId() <= 12){
|
|
||||||
Keyboard::saisie = true ;
|
|
||||||
sleep(4);
|
|
||||||
if ( (&bus!=NULL)&&!(bus.isEmptyRegister(2))) {
|
|
||||||
bus.requestFrom(2, inputBuf, 150);
|
|
||||||
if (inputBuf[0] != '\0') { //Si utilisateur a saisie au clavier
|
|
||||||
input = "";
|
|
||||||
for (int j = 0; inputBuf[j] != '\0'; ++j) {
|
|
||||||
input += inputBuf[j];
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (menu->getId()) {
|
|
||||||
case 5 : { //Création de nouvelle tortue et ajout dans la liste
|
|
||||||
Tortue *newTortue = new Tortue("default","01/01/1970","none");
|
|
||||||
newTortue->setNom(input);
|
|
||||||
tortues->push_back(*newTortue);
|
|
||||||
menu->menuNext();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 11 : {//MàJ de la date de naissance de la nouvelle tortue
|
|
||||||
try {
|
|
||||||
tortues->back().setNaissance(input);
|
|
||||||
menu->menuNext();
|
|
||||||
} catch (std::invalid_argument excep) {
|
|
||||||
// Valeurs rentrés ne sont pas des integers
|
|
||||||
cout << "Dates are not integers" << endl;
|
|
||||||
} catch (Tortue::ExceptionDate excep) {
|
|
||||||
// 1 : date postérieure à aujourd'hui
|
|
||||||
if (excep.id == 1)
|
|
||||||
cout << "Not yet born ? Time travelling turtles are not allowed in this terrarium";
|
|
||||||
// 2 : mauvais format
|
|
||||||
else if (excep.id == 2) cout << "The format of the date is not correct";
|
|
||||||
// 3 : date trop ancienne
|
|
||||||
else if (excep.id == 3) cout << "It wasn't really born before 1900... You were scammed";
|
|
||||||
// 4 : Mois > 12
|
|
||||||
else if (excep.id == 4) cout << "After December you start over at January";
|
|
||||||
// 5 : Jours > 3
|
|
||||||
else if (excep.id == 5) cout << "Months don't usually last more than 31 days !";
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 12 : {
|
|
||||||
tortues->back().setSexe(input);
|
|
||||||
menu->menuNext();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 6: { //Supprimer la tortue ayant le nom input
|
|
||||||
int length = tortues->size();
|
|
||||||
iteratorT = tortues->begin();
|
|
||||||
for (int j = 0; j < length; ++j) {
|
|
||||||
if (iteratorT->getNom() == input) {
|
|
||||||
tortues->erase(iteratorT);
|
|
||||||
Tortue::delete1();
|
|
||||||
menu->menuNext();
|
|
||||||
}
|
|
||||||
++iteratorT;
|
|
||||||
}
|
|
||||||
if (iteratorT == tortues->end()) {
|
|
||||||
cout << "not in list" << endl;
|
|
||||||
menu->menuBack();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 7:
|
|
||||||
try {
|
|
||||||
temperature->setThresholdHigh(stoi(input));
|
|
||||||
menu->menuBack();
|
|
||||||
}
|
|
||||||
catch (TerrariumParameter::ThresholdExcep excep) {
|
|
||||||
if (excep.id == 1) cout << "value is under the minimum value";
|
|
||||||
}
|
|
||||||
catch (std::invalid_argument excep) {
|
|
||||||
cout << "Not a value" << endl;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 8 :
|
|
||||||
try {
|
|
||||||
temperature->setThresholdLow(stoi(input));
|
|
||||||
menu->menuBack();
|
|
||||||
}catch (TerrariumParameter::ThresholdExcep excep) {
|
|
||||||
if (excep.id == 2) cout << "value is over the maximum value";
|
|
||||||
}
|
|
||||||
catch (std::invalid_argument excep) {
|
|
||||||
cout << "Not a value" << endl;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 9 :
|
|
||||||
try {
|
|
||||||
pressure->setThresholdHigh(stoi(input));
|
|
||||||
menu->menuBack();
|
|
||||||
}catch (TerrariumParameter::ThresholdExcep excep) {
|
|
||||||
if (excep.id == 1) cout << "value is under the minimum value";
|
|
||||||
}
|
|
||||||
catch (std::invalid_argument excep) {
|
|
||||||
cout << "Not a value" << endl;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 10 :
|
|
||||||
try {
|
|
||||||
pressure->setThresholdLow(stoi(input));
|
|
||||||
menu->menuBack();
|
|
||||||
}catch (TerrariumParameter::ThresholdExcep excep) {
|
|
||||||
if (excep.id == 2) cout << "value is over the maximum value";
|
|
||||||
}
|
|
||||||
catch (std::invalid_argument excep) {
|
|
||||||
cout << "Not a value" << endl;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cpt++;
|
cpt++;
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
//}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Board::TemperatureManagement() {
|
|
||||||
char buf[100];
|
|
||||||
temperature->setValue(analogRead(1));
|
|
||||||
|
|
||||||
//Rad allume si temp trop basse mais pas déjà allumé
|
|
||||||
if ((temperature->is2Low()) && (terrarium->getRadState() == LOW)) {
|
|
||||||
digitalWrite(0, HIGH);
|
|
||||||
terrarium->setRadState(HIGH);
|
|
||||||
} else if ((temperature->is2High()) && (terrarium->getRadState() == HIGH)) {
|
|
||||||
digitalWrite(0, LOW);
|
|
||||||
terrarium->setRadState(LOW);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Board::PressureManagement() {
|
|
||||||
char buf[100];
|
|
||||||
pressure->setValue(analogRead(5));
|
|
||||||
//Electrovanne ouverte si pression trop basse mais pas déjà ouverte
|
|
||||||
if ((pressure->is2Low()) && (terrarium->getTapState() == LOW)) {
|
|
||||||
digitalWrite(2, HIGH);
|
|
||||||
terrarium->setTapState(HIGH);
|
|
||||||
} else if ((pressure->is2High()) && (terrarium->getTapState() == HIGH)) {
|
|
||||||
digitalWrite(2, LOW);
|
|
||||||
terrarium->setTapState(LOW);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue