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
main.cpp@0:64e624a996bb, 2018-11-21 (annotated)
- Committer:
- hamaint
- Date:
- Wed Nov 21 14:05:14 2018 +0000
- Revision:
- 0:64e624a996bb
- Child:
- 1:05e2095f5466
qdfqdsf
Who changed what in which revision?
User | Revision | Line number | New 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 |