Joao Conceicao Nunes 3 years ago
commit
22f3fa9f7b

+ 2
- 0
README.md View File

@@ -0,0 +1,2 @@
1
+# BE_Board
2
+simple simulation of an arduino board

+ 3
- 0
compile_mac.sh View File

@@ -0,0 +1,3 @@
1
+#!/bin/bash
2
+set -x
3
+g++ -Wall -Wextra -std=c++11 board.cpp core_simulation.cpp mydevices.cpp sketch_ino.cpp -o arduino

+ 0
- 0
src/LED/Actif_Max/on.txt View File


+ 0
- 0
src/LED/Alarm/on.txt View File


+ 0
- 0
src/Maison/Chambre/on.txt View File


BIN
src/arduino View File


+ 59
- 0
src/board.cpp View File

@@ -0,0 +1,59 @@
1
+#include "core_simulation.h"
2
+#include "mydevices.h"
3
+
4
+
5
+
6
+
7
+int main(){
8
+  // creation d'une board
9
+  Board esp8266;
10
+
11
+ 
12
+  // achat des senseurs et actionneurs
13
+  // AnalogSensorLuminosity luminosite(DELAY);
14
+  //AnalogSensorTemperature temperature(DELAY);
15
+  //DigitalActuatorLED led1(DELAY);
16
+  DigitalLED ledAlarme(DELAY,"LED/Alarm/on.txt","Alarme ");
17
+  //ExternalDigitalSensorButton bouton1(DELAY);
18
+  I2CActuatorScreen screen;
19
+  AnalogSensorMovement Capt1(DELAY);
20
+  AnalogSensorMovement Capt2(DELAY);
21
+  DigitalLED ledSonnerie(DELAY,"sonnerie.txt","Sonnerie");
22
+  DigitalLED ledModeMax(DELAY, "LED/Actif_Max/on.txt","Mode Max Alert");
23
+  DigitalLED ledModeIntelligent(DELAY,"LED/Actif_Intelligent/on.txt","Mode Intelligent");
24
+
25
+
26
+  //Configuration des Capteurs
27
+  Capt1.config();
28
+  Capt2.config();
29
+  
30
+ 
31
+
32
+ 
33
+ 
34
+
35
+ 
36
+  // branchement des capteurs actionneurs
37
+  esp8266.pin(0,ledAlarme);
38
+  esp8266.i2c(1,screen);
39
+  esp8266.pin(2,ledSonnerie);
40
+  esp8266.pin(3,ledModeMax);
41
+  esp8266.pin(4,ledModeIntelligent);
42
+  esp8266.pin(5,Capt1);
43
+  esp8266.pin(6,Capt2);
44
+  //esp8266.pin(1,temperature);
45
+  //esp8266.pin(2,luminosite);
46
+  //esp8266.pin(4,bouton1);
47
+  //esp8266.pin(5,Capt1);
48
+  //esp8266.pin(6,Alarme);
49
+  
50
+
51
+ 
52
+
53
+  // allumage de la carte
54
+  esp8266.run();
55
+  //detect.gestionIntrusion(&Capt1);
56
+  return 0;
57
+}
58
+
59
+

+ 48
- 0
src/board.cpp~ View File

@@ -0,0 +1,48 @@
1
+#include "core_simulation.h"
2
+#include "mydevices.h"
3
+
4
+
5
+
6
+
7
+int main(){
8
+  // creation d'une board
9
+  Board esp8266;
10
+
11
+ 
12
+  // achat des senseurs et actionneurs
13
+  // AnalogSensorLuminosity luminosite(DELAY);
14
+  //AnalogSensorTemperature temperature(DELAY);
15
+  //DigitalActuatorLED led1(DELAY);
16
+  IntelligentDigitalActuatorLED ledAlarme(DELAY);
17
+  //ExternalDigitalSensorButton bouton1(DELAY);
18
+  I2CActuatorScreen screen;
19
+  AnalogSensorMovement Capt1(DELAY);
20
+
21
+
22
+  //Configuration des Capteurs
23
+  Capt1.config();
24
+  
25
+ 
26
+
27
+ 
28
+ 
29
+
30
+ 
31
+  // branchement des capteurs actionneurs
32
+  esp8266.pin(0,ledAlarme);
33
+  //esp8266.pin(1,temperature);
34
+  //esp8266.pin(2,luminosite);
35
+  //esp8266.pin(4,bouton1);
36
+  //esp8266.pin(5,Capt1);
37
+  //esp8266.pin(6,Alarme);
38
+  esp8266.i2c(1,screen);
39
+
40
+ 
41
+
42
+  // allumage de la carte
43
+  esp8266.run();
44
+  //detect.gestionIntrusion(&Capt1);
45
+  return 0;
46
+}
47
+
48
+

+ 3
- 0
src/compile_linux.sh View File

@@ -0,0 +1,3 @@
1
+#!/bin/bash
2
+set -x
3
+g++  -Wextra -std=c++11 -pthread board.cpp core_simulation.cpp mydevices.cpp sketch_ino.cpp  -o arduino

+ 3
- 0
src/compile_linux.sh~ View File

@@ -0,0 +1,3 @@
1
+#!/bin/bash
2
+set -x
3
+g++  -Wextra -std=c++11 -pthread board.cpp core_simulation.cpp mydevices.cpp sketch_ino.cpp detection.cpp -o arduino

+ 181
- 0
src/core_simulation.cpp View File

@@ -0,0 +1,181 @@
1
+
2
+#include <thread>
3
+#include <unistd.h>
4
+#include <string.h>
5
+
6
+#include "core_simulation.h"
7
+
8
+// class BoardException
9
+int BoardException::get(){return num;}
10
+
11
+string BoardException::text(){
12
+  string s;
13
+  switch(num){
14
+  case SPEED : s=string("mauvaise vitesse de la laison terminal");break;
15
+  case INOUT : s=string("mauvaise utilisation du sens de l'entree/sortie"); break;
16
+  case ADDRESS : s=string("mauvaise adresse de la pin"); break;
17
+  case SIZEXC : s=string("taille erronee"); break;
18
+  case EMPTY: s=string("zone vide"); break;
19
+  default: s=string("erreur inconnue");
20
+  }
21
+  return s;
22
+}
23
+
24
+// classe terminale
25
+void Terminal::begin(int speed){
26
+  if (speed!=9600){
27
+    cerr << "wrong speed\n";
28
+    throw BoardException(SPEED);
29
+  }
30
+}
31
+void Terminal::println(string s){
32
+  cout <<"Serial: "<< s<<endl;
33
+}
34
+
35
+// representatoin du bus I2C
36
+I2C::I2C(){
37
+  for(int i=0;i<MAX_I2C_DEVICES;i++){
38
+    registre[i]=new char[I2C_BUFFER_SIZE];
39
+    vide[i]=true;
40
+  }
41
+}
42
+
43
+bool I2C::isEmptyRegister(int addr){
44
+  bool result=true;
45
+  if ((addr>=0)&&(addr<MAX_I2C_DEVICES))
46
+    result=vide[addr];
47
+  else
48
+    throw BoardException(ADDRESS);
49
+  return result;
50
+}
51
+
52
+int I2C::write(int addr, char* bytes, int size){
53
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
54
+    throw BoardException(ADDRESS);
55
+  if ((size<0)||(size>I2C_BUFFER_SIZE))
56
+    throw BoardException(SIZEXC);
57
+  tabmutex[addr].lock();
58
+  memcpy(registre[addr],bytes,size*sizeof(char));
59
+  vide[addr]=false;
60
+  tabmutex[addr].unlock();
61
+  return size;
62
+}
63
+
64
+int I2C::requestFrom(int addr, char* bytes, int size){
65
+  int result =0;
66
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
67
+    throw BoardException(ADDRESS);
68
+  if ((size<0)||(size>I2C_BUFFER_SIZE))
69
+    throw BoardException(SIZEXC);
70
+  if (vide[addr]==false){
71
+    tabmutex[addr].lock();
72
+    memcpy(bytes,registre[addr],size*sizeof(char));
73
+    vide[addr]=true;
74
+    tabmutex[addr].unlock();
75
+    result =size;
76
+  }
77
+  return result;
78
+}
79
+
80
+char * I2C::getRegistre(int addr){
81
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
82
+    throw BoardException(ADDRESS);
83
+  return (registre[addr]);
84
+}
85
+
86
+bool* I2C::getVide(int addr){
87
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
88
+    throw BoardException(ADDRESS);
89
+  return (&vide[addr]);
90
+}
91
+
92
+// classe generique reprenstant un capteur/actionneur
93
+Device::Device(){
94
+  ptrtype=NULL;
95
+  ptrmem=NULL;
96
+  i2caddr=-1;
97
+  i2cbus=NULL;
98
+}
99
+
100
+void Device::run(){
101
+  while(1){
102
+    
103
+    cout << "empty device\n";
104
+    sleep(3);
105
+  }
106
+}
107
+
108
+void Device::setPinMem(unsigned short* ptr,enum typeio *c){
109
+  ptrtype=c;
110
+  ptrmem=ptr;
111
+}
112
+
113
+void Device::setI2CAddr(int addr, I2C * bus){
114
+  i2caddr=addr;
115
+  i2cbus=bus;
116
+}
117
+
118
+
119
+
120
+
121
+
122
+  
123
+void Board::run(){
124
+  try{
125
+    setup();
126
+    while(1) loop();
127
+  }
128
+  catch(BoardException e){
129
+    cout <<"exception: "<<e.get() <<endl;
130
+  }
131
+}
132
+
133
+void Board::pin(int p, Device& s){
134
+  s.setPinMem(&io[p], &stateio[p]);
135
+  tabthreadpin[p]=new thread(&Device::run,&s);
136
+  
137
+}
138
+
139
+void Board::pinMode(int p,enum typeio t){
140
+  stateio[p]=t;
141
+}
142
+
143
+void Board::digitalWrite(int i, int l){
144
+  if (stateio[i]==OUTPUT)
145
+    io[i]=l;
146
+  else
147
+    throw BoardException(INOUT);
148
+}
149
+
150
+int Board::digitalRead(int i){
151
+  int   result=0;
152
+  if (stateio[i]==INPUT)
153
+    result= io[i];
154
+  else
155
+    throw BoardException(INOUT);
156
+  return result;
157
+}
158
+
159
+void Board::analogWrite(int i, int l){
160
+  if (stateio[i]==OUTPUT)
161
+    io[i]=l;
162
+  else
163
+    throw BoardException(INOUT);
164
+}
165
+
166
+int Board::analogRead(int i){
167
+  int   result=0;
168
+  if (stateio[i]==INPUT)
169
+    result= io[i];
170
+  else
171
+    throw BoardException(INOUT);
172
+  return result;
173
+}
174
+
175
+void Board::i2c(int addr,Device& dev){
176
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
177
+   throw BoardException(ADDRESS);
178
+  dev.setI2CAddr(addr,&bus);
179
+  tabthreadbus[addr]=new thread(&Device::run,&dev);
180
+}
181
+

+ 183
- 0
src/core_simulation.cpp~ View File

@@ -0,0 +1,183 @@
1
+
2
+#include <thread>
3
+#include <unistd.h>
4
+#include <string.h>
5
+
6
+#include "core_simulation.h"
7
+
8
+// class BoardException
9
+int BoardException::get(){return num;}
10
+
11
+string BoardException::text(){
12
+  string s;
13
+  switch(num){
14
+  case SPEED : s=string("mauvaise vitesse de la laison terminal");break;
15
+  case INOUT : s=string("mauvaise utilisation du sens de l'entree/sortie"); break;
16
+  case ADDRESS : s=string("mauvaise adresse de la pin"); break;
17
+  case SIZEXC : s=string("taille erronee"); break;
18
+  case EMPTY: s=string("zone vide"); break;
19
+  default: s=string("erreur inconnue");
20
+  }
21
+  return s;
22
+}
23
+
24
+// classe terminale
25
+void Terminal::begin(int speed){
26
+  if (speed!=9600){
27
+    cerr << "wrong speed\n";
28
+    throw BoardException(SPEED);
29
+  }
30
+}
31
+void Terminal::println(string s){
32
+  cout <<"Serial: "<< s<<endl;
33
+}
34
+
35
+// representatoin du bus I2C
36
+I2C::I2C(){
37
+  for(int i=0;i<MAX_I2C_DEVICES;i++){
38
+    registre[i]=new char[I2C_BUFFER_SIZE];
39
+    vide[i]=true;
40
+  }
41
+}
42
+
43
+bool I2C::isEmptyRegister(int addr){
44
+  bool result=true;
45
+  if ((addr>=0)&&(addr<MAX_I2C_DEVICES))
46
+    result=vide[addr];
47
+  else
48
+    throw BoardException(ADDRESS);
49
+  return result;
50
+}
51
+
52
+int I2C::write(int addr, char* bytes, int size){
53
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
54
+    throw BoardException(ADDRESS);
55
+  if ((size<0)||(size>I2C_BUFFER_SIZE))
56
+    throw BoardException(SIZEXC);
57
+  tabmutex[addr].lock();
58
+  memcpy(registre[addr],bytes,size*sizeof(char));
59
+  vide[addr]=false;
60
+  tabmutex[addr].unlock();
61
+  return size;
62
+}
63
+
64
+int I2C::requestFrom(int addr, char* bytes, int size){
65
+  int result =0;
66
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
67
+    throw BoardException(ADDRESS);
68
+  if ((size<0)||(size>I2C_BUFFER_SIZE))
69
+    throw BoardException(SIZEXC);
70
+  if (vide[addr]==false){
71
+    tabmutex[addr].lock();
72
+    memcpy(bytes,registre[addr],size*sizeof(char));
73
+    vide[addr]=true;
74
+    tabmutex[addr].unlock();
75
+    result =size;
76
+  }
77
+  return result;
78
+}
79
+
80
+char * I2C::getRegistre(int addr){
81
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
82
+    throw BoardException(ADDRESS);
83
+  return (registre[addr]);
84
+}
85
+
86
+bool* I2C::getVide(int addr){
87
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
88
+    throw BoardException(ADDRESS);
89
+  return (&vide[addr]);
90
+}
91
+
92
+// classe generique reprenstant un capteur/actionneur
93
+Device::Device(){
94
+  ptrtype=NULL;
95
+  ptrmem=NULL;
96
+  i2caddr=-1;
97
+  i2cbus=NULL;
98
+}
99
+
100
+void Device::run(){
101
+  while(1){
102
+    
103
+    cout << "empty device\n";
104
+    sleep(3);
105
+  }
106
+}
107
+
108
+void Device::setPinMem(unsigned short* ptr,enum typeio *c){
109
+  ptrtype=c;
110
+  ptrmem=ptr;
111
+}
112
+
113
+void Device::setI2CAddr(int addr, I2C * bus){
114
+  i2caddr=addr;
115
+  i2cbus=bus;
116
+}
117
+
118
+// classe representant une carte arduino
119
+//Pour la gestion des differents capteurs d'alarme
120
+void Board::gestionAlarme() {
121
+
122
+
123
+
124
+  
125
+void Board::run(){
126
+  try{
127
+    setup();
128
+    while(1) loop();
129
+  }
130
+  catch(BoardException e){
131
+    cout <<"exception: "<<e.get() <<endl;
132
+  }
133
+}
134
+
135
+void Board::pin(int p, Device& s){
136
+  s.setPinMem(&io[p], &stateio[p]);
137
+  tabthreadpin[p]=new thread(&Device::run,&s);
138
+  
139
+}
140
+
141
+void Board::pinMode(int p,enum typeio t){
142
+  stateio[p]=t;
143
+}
144
+
145
+void Board::digitalWrite(int i, int l){
146
+  if (stateio[i]==OUTPUT)
147
+    io[i]=l;
148
+  else
149
+    throw BoardException(INOUT);
150
+}
151
+
152
+int Board::digitalRead(int i){
153
+  int   result=0;
154
+  if (stateio[i]==INPUT)
155
+    result= io[i];
156
+  else
157
+    throw BoardException(INOUT);
158
+  return result;
159
+}
160
+
161
+void Board::analogWrite(int i, int l){
162
+  if (stateio[i]==OUTPUT)
163
+    io[i]=l;
164
+  else
165
+    throw BoardException(INOUT);
166
+}
167
+
168
+int Board::analogRead(int i){
169
+  int   result=0;
170
+  if (stateio[i]==INPUT)
171
+    result= io[i];
172
+  else
173
+    throw BoardException(INOUT);
174
+  return result;
175
+}
176
+
177
+void Board::i2c(int addr,Device& dev){
178
+  if ((addr<0)||(addr>=MAX_I2C_DEVICES))
179
+   throw BoardException(ADDRESS);
180
+  dev.setI2CAddr(addr,&bus);
181
+  tabthreadbus[addr]=new thread(&Device::run,&dev);
182
+}
183
+

+ 144
- 0
src/core_simulation.h View File

@@ -0,0 +1,144 @@
1
+#ifndef CORE_SIMULATEUR_H
2
+#define CORE_SIMULATEUR_H
3
+
4
+// sleep() also under windows
5
+#ifdef __unix__
6
+# include <unistd.h>
7
+#elif defined _WIN32
8
+# include <windows.h>
9
+#define sleep(x) Sleep(1000 * (x))
10
+#endif
11
+
12
+#include <iostream>
13
+#include <string>
14
+#include <thread>
15
+#include <mutex>
16
+
17
+#define DELAY 3
18
+#define TEMP 22
19
+#define LUM 200
20
+#define HIGH 1
21
+#define LOW 0
22
+#define MAX_I2C_DEVICES 4
23
+#define I2C_BUFFER_SIZE 1024
24
+#define MAX_IO_PIN 15
25
+
26
+using namespace std;
27
+
28
+enum typeio {OUTPUT, INPUT};
29
+
30
+// exceptions gerees
31
+enum excep {SPEED, INOUT, ADDRESS, SIZEXC, EMPTY};
32
+class BoardException{
33
+protected:
34
+    // numero de l'exception
35
+  int num;
36
+public:
37
+  BoardException(int i):num(i){}
38
+    // recuperation du numero d'exception
39
+    int get();
40
+    // chaine expliquant l'exception
41
+    string text();
42
+};
43
+
44
+// gestion de la liaison terminal
45
+class Terminal {
46
+    public :
47
+    // fonction arduino : initialisation de la liaison
48
+    void begin(int speed);
49
+    // fonction arduino : affichage sur le terminal
50
+    void println(string s);
51
+};
52
+
53
+// representatoin du bus I2C
54
+class I2C{
55
+protected:
56
+    // zone memoire d'echange pour chaque element connecte sur le bus
57
+  char * registre[MAX_I2C_DEVICES];
58
+    // etat de la zone memoire d'echange pour chaque element vide ou pas
59
+  bool vide[MAX_I2C_DEVICES];
60
+    // outil pour eviter les conflits en lecture ecriture sur le bus
61
+  mutex tabmutex[MAX_I2C_DEVICES];
62
+public:
63
+    // constructeur des différents attributs: memoire, etat et synchonisation
64
+    I2C();
65
+  // est ce qu il y a quelque chose a lire pour le device numero addr
66
+    bool isEmptyRegister(int addr);
67
+   // ecriture d'un ensemble d'octets dansle registre du device numero addr
68
+    int write(int addr, char* bytes, int size);
69
+   // lecture d'un ensemble d'octets dans le registre du device numero addr
70
+    int requestFrom(int addr, char* bytes, int size);
71
+    // recuperation de la zone memoire du registre du device numero addr
72
+    char * getRegistre(int addr);
73
+  // est ce que le registre du device numero addr EST VIDE
74
+    bool* getVide(int addr);
75
+};
76
+
77
+// representation generique d'un capteur ou d'un actionneur numerique, analogique ou sur le bue I2C
78
+class Device{
79
+protected:
80
+    // lien avec la carte pour lire/ecrire une valeur
81
+  unsigned short *ptrmem;
82
+    // lien avec la carte pour savoir si c'est une pin en entree ou en sortie
83
+  enum typeio *ptrtype;
84
+    // numero sur le bus i2c
85
+  int i2caddr;
86
+    // lien sur l'objet representant le bus I2C
87
+  I2C *i2cbus;
88
+public:
89
+    // constructeur initialisant le minimum
90
+    Device();
91
+    // boucle simulant l'equipement
92
+    virtual void run();
93
+    // lien entre le device et la carte arduino
94
+    void setPinMem(unsigned short* ptr,enum typeio *c);
95
+    // lien entre le device I2C et la carte arduino
96
+    void setI2CAddr(int addr, I2C * bus);
97
+};
98
+
99
+// classe representant une carte arduino
100
+class Board{
101
+public:
102
+ // valeur sur les pin
103
+  unsigned short io[MAX_IO_PIN];
104
+    // pin d'entree ou de sortie
105
+  enum typeio stateio[MAX_IO_PIN];
106
+    // threads representant chaque senseur/actionneur sur le pins analogique et digitale
107
+  thread *tabthreadpin[MAX_IO_PIN];
108
+    // representation du bus I2C
109
+  I2C bus;
110
+    // representation de la liaison terminal
111
+  Terminal Serial;
112
+    // threads representant chaque senseur/actionneur sur le bus I2C
113
+  thread *tabthreadbus[MAX_I2C_DEVICES];
114
+
115
+  
116
+
117
+  //Gestion Capteurs alarme
118
+  void gestionAlarme();
119
+ 
120
+// simulation de la boucle de controle arduino
121
+    void run();
122
+  // accroachage d'un senseur/actionneur à une pin
123
+    void pin(int p, Device& s);
124
+    // accroachage d'un senseur/actionneur à une adresse du bus I2C
125
+      void i2c(int addr,Device& dev);
126
+ // fonction arduino : configuration d'une pin en entree ou en sortie
127
+    void pinMode(int p,enum typeio t);
128
+  // fonction arduino : ecriture HIGH ou LOW sur une pin
129
+    void digitalWrite(int i, int l);
130
+    // fonction arduino : lecture digital sur une pin
131
+    int digitalRead(int i);
132
+     // fonction arduino : lecture analogique sur une pin
133
+    void analogWrite(int i, int l);
134
+   // fonction arduino : ecriture analogique sur une pin
135
+    int analogRead(int i);
136
+  // fonction arduino : initialisation de la carte arduino
137
+  void setup();
138
+    // fonction arduino : boucle de controle de la carte arduino
139
+  void loop();
140
+};
141
+
142
+#endif
143
+
144
+

+ 144
- 0
src/core_simulation.h~ View File

@@ -0,0 +1,144 @@
1
+#ifndef CORE_SIMULATEUR_H
2
+#define CORE_SIMULATEUR_H
3
+
4
+// sleep() also under windows
5
+#ifdef __unix__
6
+# include <unistd.h>
7
+#elif defined _WIN32
8
+# include <windows.h>
9
+#define sleep(x) Sleep(1000 * (x))
10
+#endif
11
+
12
+#include <iostream>
13
+#include <string>
14
+#include <thread>
15
+#include <mutex>
16
+
17
+#define DELAY 3
18
+#define TEMP 22
19
+#define LUM 200
20
+#define HIGH 1
21
+#define LOW 0
22
+#define MAX_I2C_DEVICES 4
23
+#define I2C_BUFFER_SIZE 1024
24
+#define MAX_IO_PIN 6
25
+
26
+using namespace std;
27
+
28
+enum typeio {OUTPUT, INPUT};
29
+
30
+// exceptions gerees
31
+enum excep {SPEED, INOUT, ADDRESS, SIZEXC, EMPTY};
32
+class BoardException{
33
+protected:
34
+    // numero de l'exception
35
+  int num;
36
+public:
37
+  BoardException(int i):num(i){}
38
+    // recuperation du numero d'exception
39
+    int get();
40
+    // chaine expliquant l'exception
41
+    string text();
42
+};
43
+
44
+// gestion de la liaison terminal
45
+class Terminal {
46
+    public :
47
+    // fonction arduino : initialisation de la liaison
48
+    void begin(int speed);
49
+    // fonction arduino : affichage sur le terminal
50
+    void println(string s);
51
+};
52
+
53
+// representatoin du bus I2C
54
+class I2C{
55
+protected:
56
+    // zone memoire d'echange pour chaque element connecte sur le bus
57
+  char * registre[MAX_I2C_DEVICES];
58
+    // etat de la zone memoire d'echange pour chaque element vide ou pas
59
+  bool vide[MAX_I2C_DEVICES];
60
+    // outil pour eviter les conflits en lecture ecriture sur le bus
61
+  mutex tabmutex[MAX_I2C_DEVICES];
62
+public:
63
+    // constructeur des différents attributs: memoire, etat et synchonisation
64
+    I2C();
65
+  // est ce qu il y a quelque chose a lire pour le device numero addr
66
+    bool isEmptyRegister(int addr);
67
+   // ecriture d'un ensemble d'octets dansle registre du device numero addr
68
+    int write(int addr, char* bytes, int size);
69
+   // lecture d'un ensemble d'octets dans le registre du device numero addr
70
+    int requestFrom(int addr, char* bytes, int size);
71
+    // recuperation de la zone memoire du registre du device numero addr
72
+    char * getRegistre(int addr);
73
+  // est ce que le registre du device numero addr EST VIDE
74
+    bool* getVide(int addr);
75
+};
76
+
77
+// representation generique d'un capteur ou d'un actionneur numerique, analogique ou sur le bue I2C
78
+class Device{
79
+protected:
80
+    // lien avec la carte pour lire/ecrire une valeur
81
+  unsigned short *ptrmem;
82
+    // lien avec la carte pour savoir si c'est une pin en entree ou en sortie
83
+  enum typeio *ptrtype;
84
+    // numero sur le bus i2c
85
+  int i2caddr;
86
+    // lien sur l'objet representant le bus I2C
87
+  I2C *i2cbus;
88
+public:
89
+    // constructeur initialisant le minimum
90
+    Device();
91
+    // boucle simulant l'equipement
92
+    virtual void run();
93
+    // lien entre le device et la carte arduino
94
+    void setPinMem(unsigned short* ptr,enum typeio *c);
95
+    // lien entre le device I2C et la carte arduino
96
+    void setI2CAddr(int addr, I2C * bus);
97
+};
98
+
99
+// classe representant une carte arduino
100
+class Board{
101
+public:
102
+ // valeur sur les pin
103
+  unsigned short io[MAX_IO_PIN];
104
+    // pin d'entree ou de sortie
105
+  enum typeio stateio[MAX_IO_PIN];
106
+    // threads representant chaque senseur/actionneur sur le pins analogique et digitale
107
+  thread *tabthreadpin[MAX_IO_PIN];
108
+    // representation du bus I2C
109
+  I2C bus;
110
+    // representation de la liaison terminal
111
+  Terminal Serial;
112
+    // threads representant chaque senseur/actionneur sur le bus I2C
113
+  thread *tabthreadbus[MAX_I2C_DEVICES];
114
+
115
+  
116
+
117
+  //Gestion Capteurs alarme
118
+  void gestionAlarme();
119
+ 
120
+// simulation de la boucle de controle arduino
121
+    void run();
122
+  // accroachage d'un senseur/actionneur à une pin
123
+    void pin(int p, Device& s);
124
+    // accroachage d'un senseur/actionneur à une adresse du bus I2C
125
+      void i2c(int addr,Device& dev);
126
+ // fonction arduino : configuration d'une pin en entree ou en sortie
127
+    void pinMode(int p,enum typeio t);
128
+  // fonction arduino : ecriture HIGH ou LOW sur une pin
129
+    void digitalWrite(int i, int l);
130
+    // fonction arduino : lecture digital sur une pin
131
+    int digitalRead(int i);
132
+     // fonction arduino : lecture analogique sur une pin
133
+    void analogWrite(int i, int l);
134
+   // fonction arduino : ecriture analogique sur une pin
135
+    int analogRead(int i);
136
+  // fonction arduino : initialisation de la carte arduino
137
+  void setup();
138
+    // fonction arduino : boucle de controle de la carte arduino
139
+  void loop();
140
+};
141
+
142
+#endif
143
+
144
+

+ 0
- 0
src/detection.cpp~ View File


+ 0
- 0
src/detection.h~ View File


+ 323
- 0
src/mydevices.cpp View File

@@ -0,0 +1,323 @@
1
+#include "mydevices.h"
2
+
3
+
4
+using namespace std;
5
+
6
+int indice = 0;
7
+int luminosite_LED=LUM;
8
+
9
+
10
+
11
+//Classe Actionneur
12
+Actionneur::Actionneur(int ty, int t,int s):Device(),temps(t),type(ty),state(s){
13
+  nbrTotal+=1;
14
+}
15
+
16
+int Actionneur::getNbrTotal(){
17
+  return nbrTotal; }
18
+
19
+
20
+void Actionneur::setState(int s){
21
+  state =s;}
22
+
23
+int Actionneur::getState(){
24
+  return state;}
25
+
26
+void Actionneur::setTemps(int t){
27
+  temps=t;}
28
+
29
+int Actionneur::getTemps(){
30
+  return temps;}
31
+int Actionneur::getType(){
32
+  return type;}
33
+//Methode Run  redefinir pour chaque type de Bouton
34
+void Actionneur::run() {
35
+  setState(0);
36
+
37
+}
38
+
39
+  
40
+
41
+
42
+  
43
+
44
+//Interaction Exterieure
45
+  ExternalDigitalSensorButton::ExternalDigitalSensorButton(int t): Actionneur(1,t,0){
46
+  
47
+  
48
+
49
+}
50
+void ExternalDigitalSensorButton::run(){
51
+  if(ifstream("on.txt")){
52
+    setState(1);
53
+    
54
+    
55
+    }
56
+  else{
57
+    setState(0);
58
+   
59
+  }
60
+
61
+  
62
+
63
+  }
64
+	
65
+
66
+//Classe Capteur
67
+Capteur::Capteur(int ty, int t):Device(),temps(t),type(ty),alea(1){
68
+  
69
+
70
+}
71
+int Capteur::getNbrTotal(){
72
+  return nbrTotal;}
73
+
74
+void Capteur::setTemps(int t){
75
+  temps = t;}
76
+
77
+int Capteur::getTemps(){
78
+  return temps;}
79
+
80
+void Capteur::setValeur(int va){
81
+  valeur =va;}
82
+
83
+int Capteur::getValeur(){
84
+  return valeur;}
85
+void Capteur::setAlea(int al){
86
+  alea = al;}
87
+int Capteur::getAlea(){
88
+  return alea;}
89
+int Capteur::getType(){
90
+  return type;}
91
+void Capteur::run(){
92
+  setValeur(0);}
93
+
94
+
95
+//classe AnalogSensorTemperature
96
+AnalogSensorTemperature::AnalogSensorTemperature(int d):Capteur(1,d){
97
+  valeur = TEMP;
98
+  
99
+}
100
+
101
+void AnalogSensorTemperature::run(){
102
+  
103
+  while(1){
104
+    alea=1-alea;
105
+    if(ptrmem!=NULL)
106
+      *ptrmem=valeur+alea;
107
+    sleep(temps);
108
+  }
109
+}
110
+//classe AnalogSensorLuminosity
111
+AnalogSensorLuminosity::AnalogSensorLuminosity(int d):Capteur(2,d){
112
+  valeur = LUM;
113
+
114
+}
115
+
116
+void AnalogSensorLuminosity::run(){
117
+ 
118
+  while(1){
119
+     
120
+    alea=1-alea;
121
+    if(ptrmem!=NULL){
122
+      valeur=luminosite_LED;
123
+      *ptrmem=valeur+alea;}
124
+    sleep(temps);
125
+  }
126
+}
127
+
128
+AnalogSensorMovement::AnalogSensorMovement(int d):Capteur(3,d){
129
+  mode =1;
130
+  nom ="Default";
131
+  path = "Maison/on.txt";
132
+}
133
+void AnalogSensorMovement::setPath(string p){
134
+  path =p;
135
+}
136
+string AnalogSensorMovement::getPath(){
137
+  return path;}
138
+string AnalogSensorMovement::getNom(){
139
+  return nom;}
140
+int AnalogSensorMovement::getMode(){
141
+  return mode;}
142
+
143
+void AnalogSensorMovement::config(){
144
+  string n;
145
+  int m;
146
+  int p;
147
+  
148
+  cout << "  " << endl;
149
+  cout << "Nouveau Capteur. Veuillez le configurer" << endl;
150
+  cout << "Comment voulez vous l'appeler?" << endl;
151
+  cin >> n;
152
+  nom=n;
153
+  cout << "Quel mode voulez-vous lui donner? 1-> Alerte Max, 2-> Ne sera pas actif si le mode Intelligent est activé" << endl;
154
+  cin >> m;
155
+  mode = m;
156
+  cout << "Dans quelle pièce de la maison allez-vous le placer? 1-> Chambre, 2-Salon, 3-> Garage" << endl;
157
+  cin >> p;
158
+  if(p==1){setPath("Maison/Chambre/on.txt");}
159
+  else if(p==2){setPath("Maison/Salon/on.txt");}
160
+  else if(p==3){setPath("Maison/Garage/on.txt");}
161
+
162
+
163
+  cout << "Le capteur rentré est : "<< endl;
164
+  cout << getNom() << endl;
165
+  cout << getPath() << endl;
166
+  cout << getMode() << endl;
167
+}
168
+void AnalogSensorMovement::detectMovement(){
169
+  int bin;
170
+  if (valeur == 0){
171
+    bin = remove("sonnerie.txt");
172
+  }
173
+  else if (valeur==1){
174
+    if (ifstream("LED/Actif_Max/on.txt")){
175
+      cout << "Il y a eu du mouvement "<< endl;
176
+      cout << "Capteur : "<< nom << endl;
177
+      std::ofstream outfile("sonnerie.txt");
178
+      outfile.close();
179
+    
180
+    
181
+      sleep(2);
182
+    }
183
+    else if (ifstream("LED/Actif_Intelligent/on.txt")){
184
+    
185
+      if (mode == 1){
186
+	cout << "Il y a eu du mouvement "<< endl;
187
+	cout << "Capteur : "<< nom << endl;
188
+        std::ofstream outfile("sonnerie.txt");
189
+	outfile.close();
190
+     
191
+	
192
+	sleep(2);
193
+      }
194
+      else if( mode ==2){
195
+	//Pas de sonnerie déclenché
196
+      }
197
+    
198
+    
199
+    
200
+    } 
201
+  }
202
+}
203
+    
204
+  
205
+  
206
+  
207
+void AnalogSensorMovement::run(){
208
+  while(1){
209
+    detectMovement();
210
+    if(ifstream(path)){
211
+      valeur = 1;
212
+      
213
+    }
214
+    else {
215
+      valeur =0;
216
+      
217
+    *ptrmem=valeur; 
218
+  }
219
+ 
220
+  if(ptrmem!=NULL){   
221
+    *ptrmem=valeur;}
222
+  }
223
+  
224
+}
225
+    
226
+
227
+
228
+
229
+
230
+//classe DigitalActuatorLED
231
+DigitalActuatorLED::DigitalActuatorLED(int t):Device(),state(LOW),temps(t){
232
+}
233
+
234
+void DigitalActuatorLED::run(){
235
+  while(1){
236
+    if(ptrmem!=NULL){
237
+      state=*ptrmem;}
238
+    if (state==LOW){
239
+      cout << "((((LED eteint))))\n";
240
+    sleep(temps);}
241
+    else{
242
+    cout << "((((LED allume))))\n";
243
+    sleep(temps);}
244
+    }
245
+}
246
+
247
+//Classe DigitalLED
248
+DigitalLED::DigitalLED(int t, string p, string n) : Device(), state(0),temps(t){
249
+  path = p;
250
+  nom=n;
251
+}
252
+
253
+void DigitalLED::run (){
254
+  while(1){
255
+    if(ifstream(path)){
256
+      cout << "LED :" << nom << " ON" << endl;
257
+    }
258
+    else{
259
+      cout << "LED: " << nom << " OFF" << endl;
260
+    }
261
+    
262
+    sleep(temps);
263
+  }
264
+}
265
+
266
+//Classe 
267
+//classe IntelligentDigitalActuatorLED
268
+IntelligentDigitalActuatorLED::IntelligentDigitalActuatorLED(int t): Device(), state(LOW),temps(t){
269
+}
270
+
271
+void IntelligentDigitalActuatorLED::run(){
272
+  while(1){
273
+    if(ptrmem!=NULL){
274
+      state=*ptrmem;}
275
+    if (ifstream("on.txt")){
276
+      state=HIGH;}
277
+    else{
278
+      state=LOW;}
279
+    if (state==LOW and indice==0){
280
+      cout << "((((LED OFF))))\n";
281
+      sleep(temps);}
282
+
283
+    else if( state!=LOW and indice==0){
284
+      cout << "((((LED ON))))\n";
285
+      luminosite_LED +=50;
286
+      indice+=1;
287
+      
288
+      sleep(temps);}
289
+
290
+    else if(state==LOW and indice==1) {
291
+      cout << "((((LED OFF))))\n";
292
+      luminosite_LED-=50;
293
+      indice-=1;
294
+      
295
+      sleep(temps);}
296
+    else if (state!= LOW and indice==1){
297
+      cout << "((((LED ON))))\n";
298
+      
299
+      sleep(temps);}
300
+	
301
+  }
302
+}
303
+
304
+
305
+
306
+// classe I2CActuatorScreen
307
+I2CActuatorScreen::I2CActuatorScreen ():Device(){
308
+  }
309
+
310
+void I2CActuatorScreen::run(){
311
+  while(1){
312
+    if ( (i2cbus!=NULL)&&!(i2cbus->isEmptyRegister(i2caddr))){
313
+      Device::i2cbus->requestFrom(i2caddr, buf, I2C_BUFFER_SIZE);
314
+      cout << "---screen :"<< buf << endl;
315
+    }
316
+    sleep(1);
317
+    }
318
+}
319
+
320
+
321
+
322
+
323
+

+ 250
- 0
src/mydevices.cpp~ View File

@@ -0,0 +1,250 @@
1
+#include "mydevices.h"
2
+
3
+
4
+using namespace std;
5
+
6
+int indice = 0;
7
+int luminosite_LED=LUM;
8
+
9
+
10
+
11
+//Classe Actionneur
12
+Actionneur::Actionneur(int ty, int t,int s):Device(),temps(t),type(ty),state(s){
13
+  nbrTotal+=1;
14
+}
15
+
16
+int Actionneur::getNbrTotal(){
17
+  return nbrTotal; }
18
+
19
+
20
+void Actionneur::setState(int s){
21
+  state =s;}
22
+
23
+int Actionneur::getState(){
24
+  return state;}
25
+
26
+void Actionneur::setTemps(int t){
27
+  temps=t;}
28
+
29
+int Actionneur::getTemps(){
30
+  return temps;}
31
+int Actionneur::getType(){
32
+  return type;}
33
+//Methode Run  redefinir pour chaque type de Bouton
34
+void Actionneur::run() {
35
+  setState(0);
36
+
37
+}
38
+
39
+  
40
+
41
+
42
+  
43
+
44
+//Interaction Exterieure
45
+  ExternalDigitalSensorButton::ExternalDigitalSensorButton(int t): Actionneur(1,t,0){
46
+  
47
+  
48
+
49
+}
50
+void ExternalDigitalSensorButton::run(){
51
+  if(ifstream("on.txt")){
52
+    setState(1);
53
+    
54
+    
55
+    }
56
+  else{
57
+    setState(0);
58
+   
59
+  }
60
+
61
+  
62
+
63
+  }
64
+	
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+//Classe Capteur
75
+Capteur::Capteur(int ty, int t):Device(),temps(t),type(ty),alea(1){
76
+  
77
+
78
+}
79
+int Capteur::getNbrTotal(){
80
+  return nbrTotal;}
81
+
82
+void Capteur::setTemps(int t){
83
+  temps = t;}
84
+
85
+int Capteur::getTemps(){
86
+  return temps;}
87
+
88
+void Capteur::setValeur(int va){
89
+  valeur =va;}
90
+
91
+int Capteur::getValeur(){
92
+  return valeur;}
93
+void Capteur::setAlea(int al){
94
+  alea = al;}
95
+int Capteur::getAlea(){
96
+  return alea;}
97
+int Capteur::getType(){
98
+  return type;}
99
+void Capteur::run(){
100
+  setValeur(0);}
101
+
102
+
103
+//classe AnalogSensorTemperature
104
+AnalogSensorTemperature::AnalogSensorTemperature(int d):Capteur(1,d){
105
+  valeur = TEMP;
106
+  
107
+}
108
+
109
+void AnalogSensorTemperature::run(){
110
+  
111
+  while(1){
112
+    alea=1-alea;
113
+    if(ptrmem!=NULL)
114
+      *ptrmem=valeur+alea;
115
+    sleep(temps);
116
+  }
117
+}
118
+//classe AnalogSensorLuminosity
119
+AnalogSensorLuminosity::AnalogSensorLuminosity(int d):Capteur(2,d){
120
+  valeur = LUM;
121
+
122
+}
123
+
124
+void AnalogSensorLuminosity::run(){
125
+ 
126
+  while(1){
127
+     
128
+    alea=1-alea;
129
+    if(ptrmem!=NULL){
130
+      valeur=luminosite_LED;
131
+      *ptrmem=valeur+alea;}
132
+    sleep(temps);
133
+  }
134
+}
135
+
136
+AnalogSensorMovement::AnalogSensorMovement(int d):Capteur(3,d){
137
+  mode =1;
138
+  nom ="Defautl";
139
+  path = "Maison/on.txt";
140
+}
141
+void AnalogSensorMovement::setPath(string p){
142
+  path =p;
143
+}
144
+void AnalogSensorMovement::run(){
145
+  while(1){
146
+    if(ifstream(path)){
147
+      
148
+    valeur = 1;
149
+    cout << "Il y a qqun" << endl;
150
+    *ptrmem=valeur; 
151
+  }
152
+  else{ valeur = 0;}
153
+  if(ptrmem!=NULL){   
154
+    *ptrmem=valeur;}
155
+  }
156
+}
157
+    
158
+
159
+
160
+
161
+
162
+//classe DigitalActuatorLED
163
+DigitalActuatorLED::DigitalActuatorLED(int t):Device(),state(LOW),temps(t){
164
+}
165
+
166
+void DigitalActuatorLED::run(){
167
+  while(1){
168
+    if(ptrmem!=NULL){
169
+      state=*ptrmem;}
170
+    if (state==LOW){
171
+      cout << "((((LED eteint))))\n";
172
+    sleep(temps);}
173
+    else{
174
+    cout << "((((LED allume))))\n";
175
+    sleep(temps);}
176
+    }
177
+}
178
+//classe IntelligentDigitalActuatorLED
179
+IntelligentDigitalActuatorLED::IntelligentDigitalActuatorLED(int t): Device(), state(LOW),temps(t){
180
+}
181
+
182
+void IntelligentDigitalActuatorLED::run(){
183
+  while(1){
184
+    if(ptrmem!=NULL){
185
+      state=*ptrmem;}
186
+    if (ifstream("on.txt")){
187
+      state=HIGH;}
188
+    else{
189
+      state=LOW;}
190
+    if (state==LOW and indice==0){
191
+      cout << "((((LED OFF))))\n";
192
+      sleep(temps);}
193
+
194
+    else if( state!=LOW and indice==0){
195
+      cout << "((((LED ON))))\n";
196
+      luminosite_LED +=50;
197
+      indice+=1;
198
+      
199
+      sleep(temps);}
200
+
201
+    else if(state==LOW and indice==1) {
202
+      cout << "((((LED OFF))))\n";
203
+      luminosite_LED-=50;
204
+      indice-=1;
205
+      
206
+      sleep(temps);}
207
+    else if (state!= LOW and indice==1){
208
+      cout << "((((LED ON))))\n";
209
+      
210
+      sleep(temps);}
211
+	
212
+  }
213
+}
214
+
215
+//classe DigitalActuatorAlarm
216
+DigitalActuatorAlarm::DigitalActuatorAlarm(int t):Device(),state(LOW),temps(t){
217
+}
218
+
219
+void DigitalActuatorAlarm::run(){
220
+  detection detect;
221
+  detect=detection();
222
+  while(1){
223
+    if(ptrmem!=NULL){
224
+      state=*ptrmem;}
225
+    if (ifstream("Maison/Test/on.txt")){
226
+      
227
+    }
228
+  }
229
+    
230
+}
231
+
232
+
233
+// classe I2CActuatorScreen
234
+I2CActuatorScreen::I2CActuatorScreen ():Device(){
235
+  }
236
+
237
+void I2CActuatorScreen::run(){
238
+  while(1){
239
+    if ( (i2cbus!=NULL)&&!(i2cbus->isEmptyRegister(i2caddr))){
240
+      Device::i2cbus->requestFrom(i2caddr, buf, I2C_BUFFER_SIZE);
241
+      cout << "---screen :"<< buf << endl;
242
+    }
243
+    sleep(1);
244
+    }
245
+}
246
+
247
+
248
+
249
+
250
+

+ 212
- 0
src/mydevices.h View File

@@ -0,0 +1,212 @@
1
+#ifndef MYDEVICES_H
2
+#define MYDEVICES_H
3
+
4
+#include <iostream>
5
+//#include <ofstream>
6
+#include <thread>
7
+#include <unistd.h>
8
+#include <string.h>
9
+#include <stdio.h>
10
+#include <fstream>
11
+#include "core_simulation.h"
12
+
13
+//Classe Actionneur
14
+
15
+class Actionneur : public Device{
16
+ protected:
17
+  int type; // 1-> Bouton
18
+  int temps;
19
+  int state; //0-> OFF  1-> ON
20
+  int nbrTotal=0;
21
+
22
+ public:
23
+  //constructeur
24
+  Actionneur(int ty, int t,int s);
25
+
26
+  //Methodes
27
+  
28
+
29
+  //Pour recuperer le nombre total d'actionneurs crees.
30
+  int getNbrTotal();
31
+
32
+  //Pour changer l'etat de l'actionneur
33
+  //0 ->OFF 1 -> ON
34
+  void setState(int s);
35
+
36
+  //Pour avoir l'etat actuel de l'actionneur
37
+  //0-> OFF  1-> ON
38
+  int getState();
39
+
40
+
41
+  //Pour changer le temps
42
+  void setTemps(int t);
43
+  //Pour avoir le temps
44
+  int getTemps();
45
+  //Pour avoir le type
46
+  int getType();
47
+  //Methode Run  redefinir pour chaque type de Bouton
48
+  void run();
49
+
50
+  
51
+
52
+  
53
+
54
+};
55
+
56
+class Capteur : public Device{
57
+
58
+ protected:
59
+  int type;
60
+  int temps;
61
+  int valeur;
62
+  int alea; //De base il est  1
63
+  int nbrTotal;
64
+
65
+ public:
66
+  Capteur(int ty, int t);
67
+
68
+  //Pour recuperer le nombre total de capteurs crees.
69
+  int getNbrTotal();
70
+  //Pour changer le temps
71
+  void setTemps(int t);
72
+  //Pour avoir le temps
73
+  int getTemps();
74
+  //Pour actualiser la valeur
75
+  void setValeur(int va);
76
+  //Pour avoir la valeur du capteur
77
+  int getValeur();
78
+  //Pour changer l'alea
79
+  void setAlea(int al);
80
+  //Pour avor l'alea
81
+  int getAlea();
82
+  //Pour avoir le type de capteur
83
+  int getType();
84
+
85
+  virtual void run();
86
+  
87
+};
88
+
89
+// exemple de capteur analogique de temperature, ne pas oublier d'heriter de Device
90
+class AnalogSensorTemperature: public Capteur { 
91
+ 
92
+  
93
+public:
94
+  //constructeur ne pas oublier d'initialiser la classe mere
95
+  AnalogSensorTemperature(int d);
96
+  // thread representant le capteur et permettant de fonctionner independamment de la board
97
+   void run();
98
+};
99
+
100
+
101
+//Capteur de Luminosite
102
+class AnalogSensorLuminosity : public Capteur {
103
+ 
104
+ public:
105
+  AnalogSensorLuminosity (int d);
106
+
107
+  virtual void run();
108
+
109
+};
110
+
111
+//Capteur de mouvement
112
+class AnalogSensorMovement:public Capteur{
113
+ private:
114
+
115
+  int mode;
116
+  string nom;
117
+  string path;
118
+  
119
+ public:
120
+  //Constructeur
121
+  AnalogSensorMovement(int d);
122
+
123
+  void setPath(string p);
124
+  string getPath();
125
+  string getNom();
126
+  int getMode();
127
+  void config();
128
+  void detectMovement();
129
+
130
+  void run();
131
+
132
+};
133
+
134
+  
135
+
136
+
137
+
138
+//LED intelligente
139
+class IntelligentDigitalActuatorLED : public Device{
140
+ private:
141
+  int state;
142
+  int temps;
143
+
144
+ public:
145
+  IntelligentDigitalActuatorLED(int i);
146
+
147
+  virtual void run();
148
+};
149
+
150
+
151
+// exemple d'actionneur digital : une led, ne pas oublier d'heriter de Device
152
+
153
+
154
+
155
+
156
+//Interaction Exterieure
157
+class ExternalDigitalSensorButton: public Actionneur{
158
+ 
159
+
160
+ public:
161
+  ExternalDigitalSensorButton(int t);
162
+  virtual void run();
163
+
164
+
165
+
166
+};
167
+
168
+					      
169
+
170
+
171
+
172
+// exemple d'actionneur digital : une led, ne pas oublier d'heriter de Device
173
+class DigitalActuatorLED: public Device {
174
+private:
175
+  // etat de la LED
176
+  int state;
177
+  // temps entre 2 affichage de l etat de la led
178
+  int temps;
179
+  
180
+public:
181
+    // initialisation du temps de rafraichiisement
182
+  DigitalActuatorLED(int t);
183
+  // thread representant l'actionneur et permettant de fonctionner independamment de la board
184
+  virtual void run();
185
+};
186
+
187
+class DigitalLED : public Device{
188
+ private:
189
+  int state;
190
+  int temps;
191
+  string path;
192
+  string nom;
193
+
194
+ public:
195
+  DigitalLED(int t, string p,string n);
196
+  void run();
197
+};
198
+
199
+// exemple d'actionneur sur le bus I2C permettant d'echanger des tableaux de caracteres : un ecran, ne pas oublier d'heriter de Device
200
+class I2CActuatorScreen : public Device{
201
+protected:
202
+    // memorise l'affichage de l'ecran
203
+  char buf[I2C_BUFFER_SIZE];
204
+  
205
+public:
206
+  // constructeur
207
+  I2CActuatorScreen ();
208
+  // thread representant le capteur et permettant de fonctionner independamment de la board
209
+  virtual void run();
210
+};
211
+
212
+#endif

+ 205
- 0
src/mydevices.h~ View File

@@ -0,0 +1,205 @@
1
+#ifndef MYDEVICES_H
2
+#define MYDEVICES_H
3
+
4
+#include <iostream>
5
+#include <thread>
6
+#include <unistd.h>
7
+#include <string.h>
8
+#include <fstream>
9
+#include "core_simulation.h"
10
+#include "detection.h"
11
+//Classe Actionneur
12
+
13
+class Actionneur : public Device{
14
+ protected:
15
+  int type; // 1-> Bouton
16
+  int temps;
17
+  int state; //0-> OFF  1-> ON
18
+  int nbrTotal=0;
19
+
20
+ public:
21
+  //constructeur
22
+  Actionneur(int ty, int t,int s);
23
+
24
+  //Methodes
25
+  
26
+
27
+  //Pour recuperer le nombre total d'actionneurs crees.
28
+  int getNbrTotal();
29
+
30
+  //Pour changer l'etat de l'actionneur
31
+  //0 ->OFF 1 -> ON
32
+  void setState(int s);
33
+
34
+  //Pour avoir l'etat actuel de l'actionneur
35
+  //0-> OFF  1-> ON
36
+  int getState();
37
+
38
+
39
+  //Pour changer le temps
40
+  void setTemps(int t);
41
+  //Pour avoir le temps
42
+  int getTemps();
43
+  //Pour avoir le type
44
+  int getType();
45
+  //Methode Run  redefinir pour chaque type de Bouton
46
+  void run();
47
+
48
+  
49
+
50
+  
51
+
52
+};
53
+
54
+class Capteur : public Device{
55
+
56
+ protected:
57
+  int type;
58
+  int temps;
59
+  int valeur;
60
+  int alea; //De base il est  1
61
+  int nbrTotal;
62
+
63
+ public:
64
+  Capteur(int ty, int t);
65
+
66
+  //Pour recuperer le nombre total de capteurs crees.
67
+  int getNbrTotal();
68
+  //Pour changer le temps
69
+  void setTemps(int t);
70
+  //Pour avoir le temps
71
+  int getTemps();
72
+  //Pour actualiser la valeur
73
+  void setValeur(int va);
74
+  //Pour avoir la valeur du capteur
75
+  int getValeur();
76
+  //Pour changer l'alea
77
+  void setAlea(int al);
78
+  //Pour avor l'alea
79
+  int getAlea();
80
+  //Pour avoir le type de capteur
81
+  int getType();
82
+
83
+  virtual void run();
84
+  
85
+};
86
+
87
+// exemple de capteur analogique de temperature, ne pas oublier d'heriter de Device
88
+class AnalogSensorTemperature: public Capteur { 
89
+ 
90
+  
91
+public:
92
+  //constructeur ne pas oublier d'initialiser la classe mere
93
+  AnalogSensorTemperature(int d);
94
+  // thread representant le capteur et permettant de fonctionner independamment de la board
95
+   void run();
96
+};
97
+
98
+
99
+//Capteur de Luminosite
100
+class AnalogSensorLuminosity : public Capteur {
101
+ 
102
+ public:
103
+  AnalogSensorLuminosity (int d);
104
+
105
+  virtual void run();
106
+
107
+};
108
+
109
+//Capteur de mouvement
110
+class AnalogSensorMovement:public Capteur{
111
+ private:
112
+
113
+  int mode;
114
+  string nom;
115
+  string path;
116
+  
117
+ public:
118
+  //Constructeur
119
+  AnalogSensorMovement(int d);
120
+
121
+  void setPath(string p);
122
+
123
+  void run();
124
+
125
+};
126
+
127
+  
128
+
129
+
130
+
131
+//LED intelligente
132
+class IntelligentDigitalActuatorLED : public Device{
133
+ private:
134
+  int state;
135
+  int temps;
136
+
137
+ public:
138
+  IntelligentDigitalActuatorLED(int i);
139
+
140
+  virtual void run();
141
+};
142
+
143
+
144
+// exemple d'actionneur digital : une led, ne pas oublier d'heriter de Device
145
+class DigitalActuatorAlarm: public Device {
146
+private:
147
+  // etat de l'alarme
148
+  int state;
149
+  // temps entre 2 affichage de l etat de l'alarme
150
+  int temps;
151
+  
152
+public:
153
+    // initialisation du temps de rafraichiisement
154
+  DigitalActuatorAlarm(int t);
155
+  // thread representant l'actionneur et permettant de fonctionner independamment de la board
156
+  virtual void run();
157
+};
158
+
159
+
160
+
161
+//Interaction Exterieure
162
+class ExternalDigitalSensorButton: public Actionneur{
163
+ 
164
+
165
+ public:
166
+  ExternalDigitalSensorButton(int t);
167
+  virtual void run();
168
+
169
+
170
+
171
+};
172
+
173
+					      
174
+
175
+
176
+
177
+// exemple d'actionneur digital : une led, ne pas oublier d'heriter de Device
178
+class DigitalActuatorLED: public Device {
179
+private:
180
+  // etat de la LED
181
+  int state;
182
+  // temps entre 2 affichage de l etat de la led
183
+  int temps;
184
+  
185
+public:
186
+    // initialisation du temps de rafraichiisement
187
+  DigitalActuatorLED(int t);
188
+  // thread representant l'actionneur et permettant de fonctionner independamment de la board
189
+  virtual void run();
190
+};
191
+
192
+// exemple d'actionneur sur le bus I2C permettant d'echanger des tableaux de caracteres : un ecran, ne pas oublier d'heriter de Device
193
+class I2CActuatorScreen : public Device{
194
+protected:
195
+    // memorise l'affichage de l'ecran
196
+  char buf[I2C_BUFFER_SIZE];
197
+  
198
+public:
199
+  // constructeur
200
+  I2CActuatorScreen ();
201
+  // thread representant le capteur et permettant de fonctionner independamment de la board
202
+  virtual void run();
203
+};
204
+
205
+#endif

+ 93
- 0
src/sketch_ino.cpp View File

@@ -0,0 +1,93 @@
1
+#include <unistd.h>
2
+
3
+#include "core_simulation.h"
4
+
5
+
6
+// la fonction d'initialisation d'arduino
7
+void Board::setup(){
8
+  // on configure la vitesse de la liaison
9
+  Serial.begin(9600);
10
+// on fixe les pin en entree et en sorite en fonction des capteurs/actionneurs mis sur la carte
11
+  pinMode(0,OUTPUT);
12
+  pinMode(1,INPUT);
13
+  pinMode(2,OUTPUT);
14
+  pinMode(3,OUTPUT);
15
+  pinMode(4,OUTPUT);
16
+  pinMode(5,INPUT);
17
+  pinMode(6,INPUT);
18
+}
19
+
20
+
21
+// la boucle de controle arduino
22
+void Board::loop(){
23
+  
24
+  char buf[100];
25
+  int val;
26
+  static int cpt=0;
27
+  static int bascule=0;
28
+  int i=0;
29
+
30
+  
31
+  for(i=0;i<10;i++){
32
+    /*
33
+    // lecture sur la pin 1 : capteur de temperature
34
+    val=analogRead(1);
35
+    sprintf(buf,"temperature %d",val);
36
+    Serial.println(buf);
37
+   
38
+    if(cpt%5==0){
39
+      // tous les 5 fois on affiche sur l ecran la temperature
40
+      sprintf(buf,"%d",val);
41
+      bus.write(1,buf,100);
42
+    }
43
+    cpt++;
44
+    sleep(1);
45
+
46
+    // lecture sur la pin 2 : capteur de luminosite
47
+    val=analogRead(2);
48
+    sprintf(buf,"luminosite %d",val);
49
+    Serial.println(buf);
50
+    if(cpt%5==0){
51
+      // tous les 5 fois on affiche sur l ecran la luminosite
52
+      sprintf(buf,"%d",val);
53
+      bus.write(1,buf,100);
54
+    }
55
+    cpt++;
56
+    sleep(1);
57
+
58
+     // lecture sur la pin 6 : LED Alarme
59
+    val=analogRead(6);
60
+    if(val==1){
61
+    sprintf(buf,"Alarme activé");
62
+    Serial.println(buf);}
63
+    
64
+    sleep(1);
65
+  }
66
+  // on eteint et on allume la LED
67
+  if(bascule)
68
+    digitalWrite(0,HIGH);
69
+  else
70
+    digitalWrite(0,LOW);
71
+  bascule=1-bascule;
72
+
73
+
74
+  // on eteint et on allume la IntelligentLED
75
+  if(bascule)
76
+    digitalWrite(3,HIGH);
77
+  else
78
+    digitalWrite(3,LOW);
79
+  bascule=1-bascule;
80
+    */
81
+
82
+  }
83
+    
84
+
85
+
86
+ 
87
+}
88
+
89
+
90
+
91
+ 
92
+
93
+

+ 93
- 0
src/sketch_ino.cpp~ View File

@@ -0,0 +1,93 @@
1
+#include <unistd.h>
2
+
3
+#include "core_simulation.h"
4
+
5
+
6
+// la fonction d'initialisation d'arduino
7
+void Board::setup(){
8
+  // on configure la vitesse de la liaison
9
+  Serial.begin(9600);
10
+// on fixe les pin en entree et en sorite en fonction des capteurs/actionneurs mis sur la carte
11
+  pinMode(0,OUTPUT);
12
+  pinMode(1,INPUT);
13
+  pinMode(2,INPUT);
14
+  pinMode(3,INPUT);
15
+  pinMode(4,INPUT);
16
+  pinMode(5,INPUT);
17
+  pinMode(6,INPUT);
18
+}
19
+
20
+
21
+// la boucle de controle arduino
22
+void Board::loop(){
23
+  
24
+  char buf[100];
25
+  int val;
26
+  static int cpt=0;
27
+  static int bascule=0;
28
+  int i=0;
29
+
30
+  
31
+  for(i=0;i<10;i++){
32
+    /*
33
+    // lecture sur la pin 1 : capteur de temperature
34
+    val=analogRead(1);
35
+    sprintf(buf,"temperature %d",val);
36
+    Serial.println(buf);
37
+   
38
+    if(cpt%5==0){
39
+      // tous les 5 fois on affiche sur l ecran la temperature
40
+      sprintf(buf,"%d",val);
41
+      bus.write(1,buf,100);
42
+    }
43
+    cpt++;
44
+    sleep(1);
45
+
46
+    // lecture sur la pin 2 : capteur de luminosite
47
+    val=analogRead(2);
48
+    sprintf(buf,"luminosite %d",val);
49
+    Serial.println(buf);
50
+    if(cpt%5==0){
51
+      // tous les 5 fois on affiche sur l ecran la luminosite
52
+      sprintf(buf,"%d",val);
53
+      bus.write(1,buf,100);
54
+    }
55
+    cpt++;
56
+    sleep(1);
57
+
58
+     // lecture sur la pin 6 : LED Alarme
59
+    val=analogRead(6);
60
+    if(val==1){
61
+    sprintf(buf,"Alarme activé");
62
+    Serial.println(buf);}
63
+    
64
+    sleep(1);
65
+  }
66
+  // on eteint et on allume la LED
67
+  if(bascule)
68
+    digitalWrite(0,HIGH);
69
+  else
70
+    digitalWrite(0,LOW);
71
+  bascule=1-bascule;
72
+
73
+
74
+  // on eteint et on allume la IntelligentLED
75
+  if(bascule)
76
+    digitalWrite(3,HIGH);
77
+  else
78
+    digitalWrite(3,LOW);
79
+  bascule=1-bascule;
80
+    */
81
+
82
+  }
83
+    
84
+
85
+
86
+ 
87
+}
88
+
89
+
90
+
91
+ 
92
+
93
+

Loading…
Cancel
Save