José Neto / Mbed 2 deprecated ProjetoFinal

Dependencies:   mbed-rtos mbed

Committer:
zeneto
Date:
Sat Jul 07 02:17:40 2018 +0000
Revision:
6:f9befb0294e9
Parent:
5:ffba8ba016a7
FINAL DO FINAL

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zeneto 0:00e9a2a6f73a 1 #include "mbed.h"
zeneto 3:81621bb4f009 2 #include "rtos.h"
zeneto 5:ffba8ba016a7 3 #include "stdio.h"
zeneto 1:e7d2231abccc 4
zeneto 6:f9befb0294e9 5 //Projeto Final - Sistemas Operacionais
zeneto 6:f9befb0294e9 6 //José de Faria Leite Neto
zeneto 6:f9befb0294e9 7 //Wilian Henrique Cavassin
zeneto 6:f9befb0294e9 8 //Fernando Levy Silvestre de Assis
zeneto 4:2eceeb929edd 9
zeneto 5:ffba8ba016a7 10 //Process struct
zeneto 5:ffba8ba016a7 11 struct prc
zeneto 5:ffba8ba016a7 12 {
zeneto 5:ffba8ba016a7 13 int id;
zeneto 5:ffba8ba016a7 14 int pri; //Always starts at 0
zeneto 5:ffba8ba016a7 15 int press; //If button is pressed
zeneto 5:ffba8ba016a7 16
zeneto 5:ffba8ba016a7 17 };
zeneto 5:ffba8ba016a7 18
zeneto 2:82e0ae145867 19 //Interruptions
zeneto 2:82e0ae145867 20 InterruptIn btn1(D7);
zeneto 2:82e0ae145867 21 InterruptIn btn2(D6);
zeneto 2:82e0ae145867 22 InterruptIn btn3(D5);
zeneto 2:82e0ae145867 23 InterruptIn btn4(D4);
zeneto 5:ffba8ba016a7 24 InterruptIn msin(D3);
zeneto 2:82e0ae145867 25
zeneto 3:81621bb4f009 26
zeneto 3:81621bb4f009 27
zeneto 2:82e0ae145867 28 //Outs
zeneto 2:82e0ae145867 29 DigitalOut buzzer(D2);
zeneto 5:ffba8ba016a7 30 DigitalOut ledb(LED_BLUE);
zeneto 5:ffba8ba016a7 31 DigitalOut ledr(LED_RED);
zeneto 5:ffba8ba016a7 32 DigitalOut ledg(LED_GREEN);
zeneto 5:ffba8ba016a7 33
zeneto 4:2eceeb929edd 34 DigitalOut ground(D0);
zeneto 5:ffba8ba016a7 35 DigitalOut MSout(D1);
zeneto 3:81621bb4f009 36
zeneto 3:81621bb4f009 37 //Buttons Threads
zeneto 5:ffba8ba016a7 38 Thread threadb1, threadb2, threadb3, threadb4, threadms;
zeneto 5:ffba8ba016a7 39
zeneto 5:ffba8ba016a7 40 //Input controler thread
zeneto 5:ffba8ba016a7 41 Thread inputCT;
zeneto 3:81621bb4f009 42
zeneto 4:2eceeb929edd 43 //Scheduler Thread
zeneto 4:2eceeb929edd 44 Thread scdT;
zeneto 5:ffba8ba016a7 45 //Scheduler, all priorities starts at 0
zeneto 5:ffba8ba016a7 46 /*prc prca;
zeneto 5:ffba8ba016a7 47 prca.pri = 0;
zeneto 5:ffba8ba016a7 48 prca.id = -1;
zeneto 5:ffba8ba016a7 49 prca.press = -1; */
zeneto 5:ffba8ba016a7 50 prc scd[5] = {NULL, NULL, NULL, NULL, NULL};
zeneto 5:ffba8ba016a7 51
zeneto 5:ffba8ba016a7 52 //Buttons and motion sensor
zeneto 5:ffba8ba016a7 53 prc b1, b2, b3, b4, ms;
zeneto 5:ffba8ba016a7 54
zeneto 5:ffba8ba016a7 55
zeneto 5:ffba8ba016a7 56
zeneto 5:ffba8ba016a7 57 //Button function
zeneto 6:f9befb0294e9 58 //If pressed, put the process on queue
zeneto 5:ffba8ba016a7 59 void button1_pressed() {
zeneto 5:ffba8ba016a7 60 scd[0].id = b1.id;
zeneto 5:ffba8ba016a7 61 scd[0].pri = b1.pri;
zeneto 5:ffba8ba016a7 62 //ledb = !ledb;
zeneto 5:ffba8ba016a7 63
zeneto 5:ffba8ba016a7 64 }
zeneto 5:ffba8ba016a7 65
zeneto 5:ffba8ba016a7 66 void button2_pressed() {
zeneto 5:ffba8ba016a7 67 scd[1].id = b2.id;
zeneto 5:ffba8ba016a7 68 scd[1].pri = b2.pri;
zeneto 5:ffba8ba016a7 69
zeneto 5:ffba8ba016a7 70 }
zeneto 5:ffba8ba016a7 71
zeneto 5:ffba8ba016a7 72 void button3_pressed() {
zeneto 5:ffba8ba016a7 73 scd[2].id = b3.id;
zeneto 5:ffba8ba016a7 74 scd[2].pri = b3.pri;
zeneto 5:ffba8ba016a7 75
zeneto 5:ffba8ba016a7 76 }
zeneto 5:ffba8ba016a7 77
zeneto 5:ffba8ba016a7 78 void button4_pressed() {
zeneto 5:ffba8ba016a7 79 scd[3].id = b4.id;
zeneto 5:ffba8ba016a7 80 scd[3].pri = b4.pri;
zeneto 5:ffba8ba016a7 81 }
zeneto 5:ffba8ba016a7 82
zeneto 5:ffba8ba016a7 83 void button5_pressed() {
zeneto 5:ffba8ba016a7 84 scd[4].id = ms.id;
zeneto 5:ffba8ba016a7 85 scd[4].pri = ms.pri;
zeneto 5:ffba8ba016a7 86 }
zeneto 4:2eceeb929edd 87
zeneto 5:ffba8ba016a7 88 //Buttons threads
zeneto 5:ffba8ba016a7 89 void button1_thread() {
zeneto 5:ffba8ba016a7 90 btn1.fall(&button1_pressed); // whenever the button falls, execute button_pressed function
zeneto 5:ffba8ba016a7 91 }
zeneto 5:ffba8ba016a7 92
zeneto 5:ffba8ba016a7 93 void button2_thread() {
zeneto 5:ffba8ba016a7 94 btn2.fall(&button2_pressed); // whenever the button falls, execute button_pressed function
zeneto 5:ffba8ba016a7 95 }
zeneto 5:ffba8ba016a7 96
zeneto 5:ffba8ba016a7 97 void button3_thread() {
zeneto 5:ffba8ba016a7 98 btn3.fall(&button3_pressed); // whenever the button falls, execute button_pressed function
zeneto 5:ffba8ba016a7 99 }
zeneto 5:ffba8ba016a7 100
zeneto 5:ffba8ba016a7 101 void button4_thread() {
zeneto 5:ffba8ba016a7 102 btn4.fall(&button4_pressed); // whenever the button falls, execute button_pressed function
zeneto 5:ffba8ba016a7 103 }
zeneto 5:ffba8ba016a7 104
zeneto 5:ffba8ba016a7 105 void button5_thread() {
zeneto 5:ffba8ba016a7 106 msin.fall(&button5_pressed); // whenever the button falls, execute button_pressed function
zeneto 5:ffba8ba016a7 107 }
zeneto 5:ffba8ba016a7 108
zeneto 5:ffba8ba016a7 109 //Scheduler thread
zeneto 5:ffba8ba016a7 110 void scheduler_thread() {
zeneto 5:ffba8ba016a7 111 int i, biggerP = 0, aux = 0;
zeneto 5:ffba8ba016a7 112
zeneto 5:ffba8ba016a7 113
zeneto 5:ffba8ba016a7 114 while (1) {
zeneto 5:ffba8ba016a7 115
zeneto 5:ffba8ba016a7 116 for(i = 0; i < 5; i++) {
zeneto 5:ffba8ba016a7 117 if(scd[i].pri > biggerP) {
zeneto 5:ffba8ba016a7 118 biggerP = scd[i].pri;
zeneto 5:ffba8ba016a7 119 aux = i;
zeneto 5:ffba8ba016a7 120 }
zeneto 5:ffba8ba016a7 121 }
zeneto 5:ffba8ba016a7 122
zeneto 5:ffba8ba016a7 123 //Is it really a process? Which one?
zeneto 5:ffba8ba016a7 124 if(biggerP > 0){
zeneto 5:ffba8ba016a7 125 //It is
zeneto 5:ffba8ba016a7 126
zeneto 5:ffba8ba016a7 127 //Button 1 - priority 3 - execute the process and reset priority in priority queue
zeneto 5:ffba8ba016a7 128 if(aux == 0) {
zeneto 5:ffba8ba016a7 129 ledr = !ledr;
zeneto 5:ffba8ba016a7 130 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 131 wait(3);
zeneto 5:ffba8ba016a7 132 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 133 ledr = !ledr;
zeneto 5:ffba8ba016a7 134 scd[0].id = -1;
zeneto 5:ffba8ba016a7 135 scd[0].pri = -1;
zeneto 5:ffba8ba016a7 136 biggerP = 0;
zeneto 5:ffba8ba016a7 137 }
zeneto 5:ffba8ba016a7 138
zeneto 5:ffba8ba016a7 139 //Button 2 - priority 2 - execute the process and reset priority in priority queue
zeneto 5:ffba8ba016a7 140 if(aux == 1) {
zeneto 5:ffba8ba016a7 141 ledb = !ledb;
zeneto 5:ffba8ba016a7 142 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 143 wait(3);
zeneto 5:ffba8ba016a7 144 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 145 ledb = !ledb;
zeneto 5:ffba8ba016a7 146 scd[1].id = -1;
zeneto 5:ffba8ba016a7 147 scd[1].pri = -1;
zeneto 5:ffba8ba016a7 148 biggerP = 0;
zeneto 5:ffba8ba016a7 149 }
zeneto 5:ffba8ba016a7 150
zeneto 5:ffba8ba016a7 151 //Button 3 - priority 1 - execute the process and reset priority in priority queue
zeneto 5:ffba8ba016a7 152 if(aux == 2) {
zeneto 5:ffba8ba016a7 153 ledg = !ledg;
zeneto 5:ffba8ba016a7 154 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 155 wait(3);
zeneto 5:ffba8ba016a7 156 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 157 ledg = !ledg;
zeneto 5:ffba8ba016a7 158 scd[2].id = -1;
zeneto 5:ffba8ba016a7 159 scd[2].pri = -1;
zeneto 5:ffba8ba016a7 160 biggerP = 0;
zeneto 5:ffba8ba016a7 161 }
zeneto 5:ffba8ba016a7 162
zeneto 5:ffba8ba016a7 163 //Button 4 - priority 3 - execute the process and reset priority in priority queue
zeneto 5:ffba8ba016a7 164 if(aux == 3) {
zeneto 5:ffba8ba016a7 165 ledg = !ledg;
zeneto 5:ffba8ba016a7 166 ledb = !ledb;
zeneto 5:ffba8ba016a7 167 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 168 wait(3);
zeneto 5:ffba8ba016a7 169 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 170 ledg = !ledg;
zeneto 5:ffba8ba016a7 171 ledb = !ledb;
zeneto 5:ffba8ba016a7 172 scd[3].id = -1;
zeneto 5:ffba8ba016a7 173 scd[3].pri = -1;
zeneto 5:ffba8ba016a7 174 biggerP = 0;
zeneto 5:ffba8ba016a7 175 }
zeneto 5:ffba8ba016a7 176
zeneto 5:ffba8ba016a7 177 //Movement sensor - priority 4 - execute the process and reset priority in priority queue
zeneto 5:ffba8ba016a7 178 if(aux == 4) {
zeneto 5:ffba8ba016a7 179 ledr = !ledr;
zeneto 5:ffba8ba016a7 180 ledb = !ledb;
zeneto 5:ffba8ba016a7 181 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 182 wait(3);
zeneto 5:ffba8ba016a7 183 buzzer = !buzzer;
zeneto 5:ffba8ba016a7 184 ledr = !ledr;
zeneto 5:ffba8ba016a7 185 ledb = !ledb;
zeneto 5:ffba8ba016a7 186 scd[4].id = -1;
zeneto 5:ffba8ba016a7 187 scd[4].pri = -1;
zeneto 5:ffba8ba016a7 188 biggerP = 0;
zeneto 5:ffba8ba016a7 189 }
zeneto 5:ffba8ba016a7 190
zeneto 5:ffba8ba016a7 191 }
zeneto 5:ffba8ba016a7 192
zeneto 5:ffba8ba016a7 193
zeneto 5:ffba8ba016a7 194 }
zeneto 5:ffba8ba016a7 195
zeneto 5:ffba8ba016a7 196
zeneto 5:ffba8ba016a7 197
zeneto 5:ffba8ba016a7 198 }
zeneto 5:ffba8ba016a7 199
zeneto 5:ffba8ba016a7 200
zeneto 4:2eceeb929edd 201
zeneto 5:ffba8ba016a7 202 int main(int, char**) {
zeneto 5:ffba8ba016a7 203
zeneto 5:ffba8ba016a7 204
zeneto 5:ffba8ba016a7 205 //Setting buttons and motion sensor priorities and ids
zeneto 5:ffba8ba016a7 206
zeneto 5:ffba8ba016a7 207 b1.id = 1;
zeneto 5:ffba8ba016a7 208 b1.pri = 3;
zeneto 5:ffba8ba016a7 209 b1.press = 0;
zeneto 5:ffba8ba016a7 210
zeneto 5:ffba8ba016a7 211 b2.id = 2;
zeneto 5:ffba8ba016a7 212 b2.pri = 2;
zeneto 5:ffba8ba016a7 213 b2.press = 0;
zeneto 5:ffba8ba016a7 214
zeneto 5:ffba8ba016a7 215 b3.id = 1;
zeneto 5:ffba8ba016a7 216 b3.pri = 1;
zeneto 5:ffba8ba016a7 217 b3.press = 0;
zeneto 5:ffba8ba016a7 218
zeneto 5:ffba8ba016a7 219 b4.id = 4;
zeneto 5:ffba8ba016a7 220 b4.pri = 3;
zeneto 5:ffba8ba016a7 221 b4.press = 0;
zeneto 5:ffba8ba016a7 222
zeneto 5:ffba8ba016a7 223 ms.id = 5;
zeneto 5:ffba8ba016a7 224 ms.pri = 4;
zeneto 5:ffba8ba016a7 225 ms.press = 0;
zeneto 4:2eceeb929edd 226
zeneto 4:2eceeb929edd 227
zeneto 4:2eceeb929edd 228
zeneto 5:ffba8ba016a7 229 prc prca;
zeneto 5:ffba8ba016a7 230 prca.pri = 0;
zeneto 5:ffba8ba016a7 231 prca.id = -1;
zeneto 5:ffba8ba016a7 232 prca.press = -1;
zeneto 5:ffba8ba016a7 233 scd[0] = prca;
zeneto 5:ffba8ba016a7 234 scd[1] = prca;
zeneto 5:ffba8ba016a7 235 scd[2] = prca;
zeneto 5:ffba8ba016a7 236 scd[3] = prca;
zeneto 5:ffba8ba016a7 237 scd[4] = prca;
zeneto 5:ffba8ba016a7 238
zeneto 6:f9befb0294e9 239 //Ground
zeneto 4:2eceeb929edd 240 ground = 0;
zeneto 6:f9befb0294e9 241 //Leds start at 0
zeneto 5:ffba8ba016a7 242 ledr = !ledr;
zeneto 5:ffba8ba016a7 243 ledg = !ledg;
zeneto 5:ffba8ba016a7 244 ledb = !ledb;
zeneto 6:f9befb0294e9 245
zeneto 6:f9befb0294e9 246 //Threads starting
zeneto 3:81621bb4f009 247 threadb1.start(button1_thread);
zeneto 3:81621bb4f009 248 threadb2.start(button2_thread);
zeneto 3:81621bb4f009 249 threadb3.start(button3_thread);
zeneto 3:81621bb4f009 250 threadb4.start(button4_thread);
zeneto 5:ffba8ba016a7 251 threadms.start(button5_thread);
zeneto 5:ffba8ba016a7 252 scdT.start(scheduler_thread);
zeneto 4:2eceeb929edd 253
zeneto 1:e7d2231abccc 254 while (1) {}
zeneto 0:00e9a2a6f73a 255 }