Alison Michel Fernandes
/
Alarme_Sensor_PIR01
Alarm with PIR Sensor
Fork of Alarme_Sensor_PIR by
main.cpp@73:90675a74cbb1, 2018-07-03 (annotated)
- Committer:
- Alison86
- Date:
- Tue Jul 03 18:48:53 2018 +0000
- Revision:
- 73:90675a74cbb1
- Parent:
- 65:42b55175c696
Alarm pir
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jonathan Austin |
0:2757d7abb7d9 | 1 | #include "mbed.h" |
Alison86 | 65:42b55175c696 | 2 | #include "beep.h" |
Alison86 | 65:42b55175c696 | 3 | #include "EthernetInterface.h" |
Alison86 | 65:42b55175c696 | 4 | #include "rtos.h" |
Alison86 | 65:42b55175c696 | 5 | #include "SDFileSystem.h" |
Alison86 | 65:42b55175c696 | 6 | |
Alison86 | 65:42b55175c696 | 7 | InterruptIn movimento(D2); |
Alison86 | 65:42b55175c696 | 8 | Serial pc(USBTX, USBRX); // tx, rx |
Alison86 | 65:42b55175c696 | 9 | Beep buzzer(D5); |
Alison86 | 65:42b55175c696 | 10 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); |
Alison86 | 65:42b55175c696 | 11 | |
Alison86 | 65:42b55175c696 | 12 | DigitalIn buttonStopLog(SW2); |
Alison86 | 65:42b55175c696 | 13 | DigitalOut led0(LED_RED); |
Alison86 | 65:42b55175c696 | 14 | DigitalOut led1(LED_GREEN); |
Alison86 | 65:42b55175c696 | 15 | DigitalOut rgb_red(D7); |
Alison86 | 65:42b55175c696 | 16 | DigitalOut rgb_green(D8); |
Jonathan Austin |
0:2757d7abb7d9 | 17 | |
Alison86 | 65:42b55175c696 | 18 | Mutex PIR; |
Alison86 | 65:42b55175c696 | 19 | Timer timer; |
Alison86 | 65:42b55175c696 | 20 | EthernetInterface eth; |
Alison86 | 65:42b55175c696 | 21 | Mutex ETH_IN; |
Alison86 | 65:42b55175c696 | 22 | |
Alison86 | 65:42b55175c696 | 23 | unsigned int move_detected = 0; |
Alison86 | 65:42b55175c696 | 24 | |
Alison86 | 65:42b55175c696 | 25 | unsigned int alarme = 0; |
Alison86 | 65:42b55175c696 | 26 | |
Alison86 | 65:42b55175c696 | 27 | const char* ECHO_SERVER_ADDRESS = "10.3.2.6";//"192.168.15.5"; |
Alison86 | 65:42b55175c696 | 28 | |
Alison86 | 65:42b55175c696 | 29 | const int ECHO_SERVER_PORT = 23; |
Alison86 | 65:42b55175c696 | 30 | |
Alison86 | 65:42b55175c696 | 31 | void irq_handler(void) |
Alison86 | 65:42b55175c696 | 32 | { |
Alison86 | 65:42b55175c696 | 33 | move_detected = 1; |
Alison86 | 65:42b55175c696 | 34 | } |
Alison86 | 65:42b55175c696 | 35 | |
Alison86 | 65:42b55175c696 | 36 | //Thread 1 - Leitura do sensor PIR |
Alison86 | 65:42b55175c696 | 37 | void Le_sensor() |
Alison86 | 65:42b55175c696 | 38 | { |
Alison86 | 65:42b55175c696 | 39 | wait(1); |
Alison86 | 65:42b55175c696 | 40 | movimento.rise(&irq_handler); |
Jonathan Austin |
0:2757d7abb7d9 | 41 | |
Alison86 | 65:42b55175c696 | 42 | while(1) |
Alison86 | 65:42b55175c696 | 43 | { |
Alison86 | 65:42b55175c696 | 44 | timer.start(); |
Alison86 | 65:42b55175c696 | 45 | if(timer.read()>=60){ |
Alison86 | 65:42b55175c696 | 46 | timer.reset(); |
Alison86 | 65:42b55175c696 | 47 | alarme=0; |
Alison86 | 65:42b55175c696 | 48 | } |
Alison86 | 65:42b55175c696 | 49 | |
Alison86 | 65:42b55175c696 | 50 | if(move_detected) |
Alison86 | 65:42b55175c696 | 51 | { |
Alison86 | 65:42b55175c696 | 52 | PIR.lock(); |
Alison86 | 65:42b55175c696 | 53 | alarme++; |
Alison86 | 65:42b55175c696 | 54 | move_detected = 0; |
Alison86 | 65:42b55175c696 | 55 | pc.printf("Alarme disparou %d vezes\n", alarme); |
Alison86 | 65:42b55175c696 | 56 | PIR.unlock(); |
Alison86 | 65:42b55175c696 | 57 | } |
Alison86 | 65:42b55175c696 | 58 | |
Alison86 | 65:42b55175c696 | 59 | Thread::wait(300); |
Jonathan Austin |
0:2757d7abb7d9 | 60 | } |
Alison86 | 65:42b55175c696 | 61 | |
Alison86 | 65:42b55175c696 | 62 | } |
Alison86 | 65:42b55175c696 | 63 | |
Alison86 | 65:42b55175c696 | 64 | //Thread 2 - Acionamento do atuador |
Alison86 | 65:42b55175c696 | 65 | void Aciona_buzzer() |
Alison86 | 65:42b55175c696 | 66 | { |
Alison86 | 65:42b55175c696 | 67 | while(1) |
Alison86 | 65:42b55175c696 | 68 | { |
Alison86 | 65:42b55175c696 | 69 | if(movimento.read()==1 && move_detected == 1) |
Alison86 | 65:42b55175c696 | 70 | { |
Alison86 | 65:42b55175c696 | 71 | rgb_red = 0; |
Alison86 | 65:42b55175c696 | 72 | rgb_green = 1; |
Alison86 | 65:42b55175c696 | 73 | buzzer.beep(1000,0.5); //Aumentar frequencia e tempo de duração |
Alison86 | 65:42b55175c696 | 74 | } |
Alison86 | 65:42b55175c696 | 75 | else |
Alison86 | 65:42b55175c696 | 76 | { |
Alison86 | 65:42b55175c696 | 77 | rgb_red = 1; |
Alison86 | 65:42b55175c696 | 78 | rgb_green = 0; |
Alison86 | 65:42b55175c696 | 79 | } |
Alison86 | 65:42b55175c696 | 80 | |
Alison86 | 65:42b55175c696 | 81 | } |
Alison86 | 65:42b55175c696 | 82 | |
Jonathan Austin |
0:2757d7abb7d9 | 83 | } |
Jonathan Austin |
1:846c97078558 | 84 | |
Alison86 | 65:42b55175c696 | 85 | //Thread 3 - Gravação de informações no cartão SD |
Alison86 | 65:42b55175c696 | 86 | void Armazena_cartao() |
Alison86 | 65:42b55175c696 | 87 | { |
Alison86 | 65:42b55175c696 | 88 | |
Alison86 | 65:42b55175c696 | 89 | mkdir("/sd/mydir", 0777); |
Alison86 | 65:42b55175c696 | 90 | FILE *fp = fopen("/sd/mydir/log.txt", "w"); |
Alison86 | 65:42b55175c696 | 91 | fprintf(fp, "Alarme"); |
Alison86 | 65:42b55175c696 | 92 | fprintf(fp, "\t"); |
Alison86 | 65:42b55175c696 | 93 | fprintf(fp, "Tempo"); |
Alison86 | 65:42b55175c696 | 94 | fprintf(fp, "\r\n"); |
Alison86 | 65:42b55175c696 | 95 | |
Alison86 | 65:42b55175c696 | 96 | while(1) |
Alison86 | 65:42b55175c696 | 97 | { |
Alison86 | 65:42b55175c696 | 98 | if(buttonStopLog.read()==0) |
Alison86 | 65:42b55175c696 | 99 | break; |
Alison86 | 65:42b55175c696 | 100 | PIR.lock(); |
Alison86 | 65:42b55175c696 | 101 | fprintf(fp, "%d", alarme); |
Alison86 | 65:42b55175c696 | 102 | fprintf(fp, "\t"); |
Alison86 | 65:42b55175c696 | 103 | fprintf(fp, "%.f", timer.read()); |
Alison86 | 65:42b55175c696 | 104 | fprintf(fp, "\r\n"); |
Alison86 | 65:42b55175c696 | 105 | PIR.unlock(); |
Alison86 | 65:42b55175c696 | 106 | Thread::wait(50); |
Alison86 | 65:42b55175c696 | 107 | } |
Alison86 | 65:42b55175c696 | 108 | fclose(fp); |
Alison86 | 65:42b55175c696 | 109 | led0 = 1; |
Alison86 | 65:42b55175c696 | 110 | led1 = 0; |
Alison86 | 65:42b55175c696 | 111 | } |
Alison86 | 65:42b55175c696 | 112 | |
Alison86 | 65:42b55175c696 | 113 | //Thread 4 - Protocolo de comunicações TCP/IP |
Alison86 | 65:42b55175c696 | 114 | void Ethernet_Interface() |
Alison86 | 65:42b55175c696 | 115 | { |
Alison86 | 65:42b55175c696 | 116 | |
Alison86 | 65:42b55175c696 | 117 | eth.init(); |
Alison86 | 65:42b55175c696 | 118 | eth.connect(); |
Alison86 | 65:42b55175c696 | 119 | printf("\nClient IP Address is %s\n", eth.getIPAddress()); |
Alison86 | 65:42b55175c696 | 120 | |
Alison86 | 65:42b55175c696 | 121 | // Connect to Server |
Alison86 | 65:42b55175c696 | 122 | TCPSocketConnection socket; |
Alison86 | 65:42b55175c696 | 123 | while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) { |
Alison86 | 65:42b55175c696 | 124 | printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); |
Alison86 | 65:42b55175c696 | 125 | Thread::wait(500); |
Alison86 | 65:42b55175c696 | 126 | } |
Alison86 | 65:42b55175c696 | 127 | printf("Connected to Server at %s\n",ECHO_SERVER_ADDRESS); |
Alison86 | 65:42b55175c696 | 128 | |
Alison86 | 65:42b55175c696 | 129 | // Send message to server |
Alison86 | 65:42b55175c696 | 130 | char buffer[1000] = ""; |
Alison86 | 65:42b55175c696 | 131 | |
Alison86 | 65:42b55175c696 | 132 | while(socket.is_connected()) |
Alison86 | 65:42b55175c696 | 133 | { |
Alison86 | 65:42b55175c696 | 134 | ETH_IN.lock(); |
Alison86 | 65:42b55175c696 | 135 | snprintf(buffer, 1000, "Alarm: %d Tempo: %.f \n", alarme, timer.read()); |
Alison86 | 65:42b55175c696 | 136 | socket.send_all(buffer, sizeof(buffer)); |
Alison86 | 65:42b55175c696 | 137 | printf("\nAlarme: %d \n\r", alarme); |
Alison86 | 65:42b55175c696 | 138 | printf("Tempo: %.f\n\r", timer.read()); |
Alison86 | 65:42b55175c696 | 139 | ETH_IN.unlock(); |
Alison86 | 65:42b55175c696 | 140 | Thread::wait(100); |
Alison86 | 65:42b55175c696 | 141 | } |
Alison86 | 65:42b55175c696 | 142 | |
Alison86 | 65:42b55175c696 | 143 | // Clean up |
Alison86 | 65:42b55175c696 | 144 | socket.close(); |
Alison86 | 65:42b55175c696 | 145 | |
Alison86 | 65:42b55175c696 | 146 | |
Alison86 | 65:42b55175c696 | 147 | |
Alison86 | 65:42b55175c696 | 148 | } |
Alison86 | 65:42b55175c696 | 149 | //Função Principal |
Alison86 | 65:42b55175c696 | 150 | int main(void) |
Alison86 | 65:42b55175c696 | 151 | { |
Alison86 | 65:42b55175c696 | 152 | led1 = 1; |
Alison86 | 65:42b55175c696 | 153 | led0 = 0; |
Alison86 | 65:42b55175c696 | 154 | rgb_red = 1; |
Alison86 | 65:42b55175c696 | 155 | rgb_green=0; |
Alison86 | 65:42b55175c696 | 156 | |
Alison86 | 65:42b55175c696 | 157 | Thread SensorPIR; |
Alison86 | 65:42b55175c696 | 158 | Thread Atuador_Buzzer; |
Alison86 | 65:42b55175c696 | 159 | Thread Cartao_SD; |
Alison86 | 65:42b55175c696 | 160 | Thread Ethernet; |
Alison86 | 65:42b55175c696 | 161 | |
Alison86 | 65:42b55175c696 | 162 | SensorPIR.start(Le_sensor); //Utilizar callback na chamada SensorPIR.start(callback(Le_sensor)) |
Alison86 | 65:42b55175c696 | 163 | Atuador_Buzzer.start(Aciona_buzzer); |
Alison86 | 65:42b55175c696 | 164 | Cartao_SD.start(Armazena_cartao); |
Alison86 | 65:42b55175c696 | 165 | Ethernet.start(Ethernet_Interface); |
Alison86 | 65:42b55175c696 | 166 | |
Alison86 | 65:42b55175c696 | 167 | while(1){ |
Alison86 | 65:42b55175c696 | 168 | } |
Alison86 | 65:42b55175c696 | 169 | } |