Quand nous n'avions plus de serrure à code mécanique sur la porte du local, et donc réduit à l'utilisation d'une seule et unique clef, nous nous sommes dit qu'on pouvait en faire une nous même avec un servomoteur, une carte STM32 et n'importe quel moyen de déverouiller la porte (pavé numérique, empreinte digitale, NFC, application Android etc).

Dependencies:   mbed

Committer:
hamaint
Date:
Wed Nov 21 14:05:14 2018 +0000
Revision:
0:64e624a996bb
Child:
1:05e2095f5466
qdfqdsf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hamaint 0:64e624a996bb 1 #include "mbed.h"
hamaint 0:64e624a996bb 2
hamaint 0:64e624a996bb 3 Timeout timer;
hamaint 0:64e624a996bb 4 DigitalOut my_led(LED1);
hamaint 0:64e624a996bb 5 DigitalOut my_pwm(D10); // IO used by pwm_io function
hamaint 0:64e624a996bb 6 DigitalOut r1(D2);
hamaint 0:64e624a996bb 7 DigitalOut r2(D3);
hamaint 0:64e624a996bb 8 DigitalOut r3(D4);
hamaint 0:64e624a996bb 9 DigitalOut r4(D5);
hamaint 0:64e624a996bb 10
hamaint 0:64e624a996bb 11 DigitalIn my_button(USER_BUTTON);
hamaint 0:64e624a996bb 12
hamaint 0:64e624a996bb 13 DigitalIn c1(D6);
hamaint 0:64e624a996bb 14 DigitalIn c2(D7);
hamaint 0:64e624a996bb 15 DigitalIn c3(D8);
hamaint 0:64e624a996bb 16 DigitalIn c4(D9);
hamaint 0:64e624a996bb 17
hamaint 0:64e624a996bb 18 int on_delay = 0;
hamaint 0:64e624a996bb 19 int off_delay = 0;
hamaint 0:64e624a996bb 20
hamaint 0:64e624a996bb 21 void toggleOff(void);
hamaint 0:64e624a996bb 22
hamaint 0:64e624a996bb 23 void toggleOn(void) {
hamaint 0:64e624a996bb 24 my_pwm = 1;
hamaint 0:64e624a996bb 25 timer.attach_us(toggleOff, on_delay);
hamaint 0:64e624a996bb 26 }
hamaint 0:64e624a996bb 27
hamaint 0:64e624a996bb 28 void toggleOff(void) {
hamaint 0:64e624a996bb 29 my_pwm = 0;
hamaint 0:64e624a996bb 30 timer.attach_us(toggleOn, off_delay);
hamaint 0:64e624a996bb 31 }
hamaint 0:64e624a996bb 32
hamaint 0:64e624a996bb 33 // p_us = signal period in micro_seconds
hamaint 0:64e624a996bb 34 // dc = signal duty-cycle (0.0 to 1.0)
hamaint 0:64e624a996bb 35 void pwm_io(int p_us, float dc) {
hamaint 0:64e624a996bb 36 timer.detach();
hamaint 0:64e624a996bb 37 if ((p_us == 0) || (dc == 0)) {
hamaint 0:64e624a996bb 38 my_pwm = 0;
hamaint 0:64e624a996bb 39 return;
hamaint 0:64e624a996bb 40 }
hamaint 0:64e624a996bb 41 if (dc >= 1) {
hamaint 0:64e624a996bb 42 my_pwm = 1;
hamaint 0:64e624a996bb 43 return;
hamaint 0:64e624a996bb 44 }
hamaint 0:64e624a996bb 45 on_delay = (int)(p_us * dc);
hamaint 0:64e624a996bb 46 off_delay = p_us - on_delay;
hamaint 0:64e624a996bb 47 toggleOn();
hamaint 0:64e624a996bb 48 }
hamaint 0:64e624a996bb 49
hamaint 0:64e624a996bb 50 void ouvrir_porte(){
hamaint 0:64e624a996bb 51 pwm_io(20000, 0.10); //180° ouvert
hamaint 0:64e624a996bb 52 }
hamaint 0:64e624a996bb 53
hamaint 0:64e624a996bb 54 void fermer_porte(){
hamaint 0:64e624a996bb 55 pwm_io(20000,0.05); //0° fermé
hamaint 0:64e624a996bb 56 }
hamaint 0:64e624a996bb 57
hamaint 0:64e624a996bb 58 void switch_all_low(){
hamaint 0:64e624a996bb 59 r1 = 0;
hamaint 0:64e624a996bb 60 r2 = 0;
hamaint 0:64e624a996bb 61 r3 = 0;
hamaint 0:64e624a996bb 62 r4 = 0;
hamaint 0:64e624a996bb 63 }
hamaint 0:64e624a996bb 64
hamaint 0:64e624a996bb 65 int keypad(){
hamaint 0:64e624a996bb 66 int i;
hamaint 0:64e624a996bb 67 int bouton = 0; //nombre:touch 1:1, 2:2, 3:3, 4:A, 5:4, 6:5, 7:6, 8:B, 9:7, 10:8, 11:9, 12:C, 13:*, 14:0, 15:#, 16:D
hamaint 0:64e624a996bb 68
hamaint 0:64e624a996bb 69 for (i=0;i<4;i++){
hamaint 0:64e624a996bb 70
hamaint 0:64e624a996bb 71 switch (i){
hamaint 0:64e624a996bb 72 case 0:
hamaint 0:64e624a996bb 73 switch_all_low();
hamaint 0:64e624a996bb 74 r1 = 1;
hamaint 0:64e624a996bb 75 if (c1)
hamaint 0:64e624a996bb 76 bouton = 1;
hamaint 0:64e624a996bb 77 else if (c2)
hamaint 0:64e624a996bb 78 bouton = 2;
hamaint 0:64e624a996bb 79 else if (c3)
hamaint 0:64e624a996bb 80 bouton = 3;
hamaint 0:64e624a996bb 81 else if (c4)
hamaint 0:64e624a996bb 82 bouton = 4;
hamaint 0:64e624a996bb 83
hamaint 0:64e624a996bb 84 break;
hamaint 0:64e624a996bb 85 case 1:
hamaint 0:64e624a996bb 86 switch_all_low();
hamaint 0:64e624a996bb 87 r2 = 1;
hamaint 0:64e624a996bb 88 if (c1)
hamaint 0:64e624a996bb 89 bouton = 5;
hamaint 0:64e624a996bb 90 else if (c2)
hamaint 0:64e624a996bb 91 bouton = 6;
hamaint 0:64e624a996bb 92 else if (c3)
hamaint 0:64e624a996bb 93 bouton = 7;
hamaint 0:64e624a996bb 94 else if (c4)
hamaint 0:64e624a996bb 95 bouton = 8;
hamaint 0:64e624a996bb 96
hamaint 0:64e624a996bb 97 break;
hamaint 0:64e624a996bb 98 case 2:
hamaint 0:64e624a996bb 99 switch_all_low();
hamaint 0:64e624a996bb 100 r3 = 1;
hamaint 0:64e624a996bb 101 if (c1)
hamaint 0:64e624a996bb 102 bouton = 9;
hamaint 0:64e624a996bb 103 else if (c2)
hamaint 0:64e624a996bb 104 bouton = 10;
hamaint 0:64e624a996bb 105 else if (c3)
hamaint 0:64e624a996bb 106 bouton = 11;
hamaint 0:64e624a996bb 107 else if (c4)
hamaint 0:64e624a996bb 108 bouton = 12;
hamaint 0:64e624a996bb 109
hamaint 0:64e624a996bb 110 break;
hamaint 0:64e624a996bb 111 case 3:
hamaint 0:64e624a996bb 112 switch_all_low();
hamaint 0:64e624a996bb 113 r4 = 1;
hamaint 0:64e624a996bb 114 if (c1)
hamaint 0:64e624a996bb 115 bouton = 13;
hamaint 0:64e624a996bb 116 else if (c2)
hamaint 0:64e624a996bb 117 bouton = 14;
hamaint 0:64e624a996bb 118 else if (c3)
hamaint 0:64e624a996bb 119 bouton = 15;
hamaint 0:64e624a996bb 120 else if (c4)
hamaint 0:64e624a996bb 121 bouton = 16;
hamaint 0:64e624a996bb 122 break;
hamaint 0:64e624a996bb 123
hamaint 0:64e624a996bb 124 }
hamaint 0:64e624a996bb 125 }
hamaint 0:64e624a996bb 126 return bouton;
hamaint 0:64e624a996bb 127 }
hamaint 0:64e624a996bb 128
hamaint 0:64e624a996bb 129
hamaint 0:64e624a996bb 130
hamaint 0:64e624a996bb 131 int main() {
hamaint 0:64e624a996bb 132
hamaint 0:64e624a996bb 133 int state = 0;
hamaint 0:64e624a996bb 134 int key = 0;
hamaint 0:64e624a996bb 135
hamaint 0:64e624a996bb 136 while(1) {
hamaint 0:64e624a996bb 137
hamaint 0:64e624a996bb 138 key = keypad();
hamaint 0:64e624a996bb 139 if (key!=0)
hamaint 0:64e624a996bb 140 printf(" %d,",key);
hamaint 0:64e624a996bb 141
hamaint 0:64e624a996bb 142
hamaint 0:64e624a996bb 143 wait(0.1);
hamaint 0:64e624a996bb 144
hamaint 0:64e624a996bb 145 if (state)
hamaint 0:64e624a996bb 146 ouvrir_porte();
hamaint 0:64e624a996bb 147 else
hamaint 0:64e624a996bb 148 fermer_porte();
hamaint 0:64e624a996bb 149 }
hamaint 0:64e624a996bb 150
hamaint 0:64e624a996bb 151
hamaint 0:64e624a996bb 152
hamaint 0:64e624a996bb 153
hamaint 0:64e624a996bb 154 }
hamaint 0:64e624a996bb 155