Advertisement
Ant0ine64

livrable 4

Nov 15th, 2019
380
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Livrable 4
  2.  
  3. //pins declaration
  4. const int PINS_DIPSWITCH[] = {2, 3, 4, 5};
  5. const int GREEN_LED = 13;
  6. const int RED_LED = 12;
  7. const int BUZZER = 9;
  8.  
  9. //dipswith reading function
  10. int read_level() {
  11.  
  12.   int read_switch[4];
  13.   int level;
  14.  
  15.   for (int i = 0; i < 4; i++) {
  16.      read_switch[i] = digitalRead(PINS_DIPSWITCH[i]);
  17.   }
  18.   //recomposing a decimal number
  19.   level = 1000*read_switch[0] + 100*read_switch[1] + 10*read_switch[2] + read_switch[3];
  20.  
  21.   return level;
  22. }
  23.  
  24.  
  25. bool select_lvl(int level) {
  26.  
  27.   bool result;
  28.   Serial.print("level : ");
  29.   Serial.println(level);
  30.  
  31.   //levels select and function exec
  32.   switch(level) {
  33.     case 0:
  34.       //level 0
  35.       result = true;
  36.       break;
  37.      
  38.     case 1:
  39.       //level 1
  40.       result = question();
  41.       break;
  42.      
  43.     case 10:
  44.       //level 2
  45.       result = code(level);
  46.       break;
  47.      
  48.     case 11:
  49.       //level 3
  50.       result = (question() && code(level));
  51.       break;
  52.      
  53.     case 100:
  54.       //level 4
  55.       result = biometric_scan();
  56.       break;
  57.      
  58.     case 101:
  59.       //level 5
  60.       result = (question() && biometric_scan());
  61.       break;
  62.      
  63.     case 110:
  64.       //level 6
  65.       result = (code(level) && biometric_scan());
  66.       break;
  67.      
  68.     case 111:
  69.       //level 7
  70.       result = (question() && code(level) && biometric_scan());
  71.       break;
  72.  
  73.     default :
  74.       //invalid level (pour le switch n1 car on cable que les switch 2 3 4)
  75.       Serial.println("Enter a right combinaison on the dipswitchs");
  76.      
  77.       result = false;
  78.      
  79.       //blinking one time the red led
  80.       digitalWrite(RED_LED, HIGH);
  81.       delay(500);
  82.       digitalWrite(RED_LED, LOW);
  83.       delay(500);
  84.   }
  85.  
  86.   return result;
  87.  
  88. }
  89.  
  90.  
  91. bool question() {
  92.  
  93.   bool question_bon;
  94.  
  95.   int right_choice = 3;//car on a définit que le bon choix est le numero 3
  96.   int user_choice;
  97.  
  98.   Serial.println("Quel est le nom de votre chien ?");
  99.   Serial.println("1 - Teddy");
  100.   Serial.println("2 - Rox");
  101.   Serial.println("3 - Albert");
  102.  
  103.   Serial.println("Entrer votre réponse (1, 2 ou 3) :"); //serial.print : permet d'écrire et ln = retour à la ligne
  104.   //wait for serial message
  105.   while (!Serial.available()); //attend message
  106.   //write serial message to user_code
  107.   user_choice = Serial.parseInt(); //serial.parseint = lecture de la réponse de l'utilisateur
  108.  
  109.   question_bon = (right_choice == user_choice);
  110.  
  111.   Serial.end();
  112.   Serial.begin(9600);
  113.   return question_bon;
  114.  
  115. }
  116.  
  117.  
  118. bool code(int seed) {
  119.  
  120.   bool code_bon;
  121.  
  122.   int code = 42 * seed; //seed étant la référence au numero du case (1,10,11,100,101, etc...)
  123.   int user_code; // par exemple, ici, pour le niv 2, l'utilisateur va taper 42*10 soit 420
  124.  
  125.   Serial.println("Entrer votre code :");
  126.  
  127.  
  128.   //wait for serial message
  129.   while (!Serial.available());
  130.  
  131.   //write serial message to user_code
  132.   user_code = Serial.parseInt();
  133.  
  134.   code_bon = (code == user_code);
  135.  
  136.   return code_bon;
  137. }
  138.  
  139.  
  140. bool biometric_scan() {
  141.  
  142.   bool code_bon;
  143.  
  144.   String right_string = "boitecostaud"; //string est l'équivalent de scanf
  145.   String user_string = ""; //l'utilisateur doit donc écrire "boitecostaud" qui est le bon code
  146.  
  147.  
  148.   Serial.println("Entrer votre mot de passe :");
  149.   //wait for serial message
  150.   while (!Serial.available());
  151.   //write serial message to user_code
  152.   user_string = Serial.readString();
  153.  
  154.   user_string.trim(); //permet d'enlever les espaces
  155.  
  156.   code_bon = (right_string.equalsIgnoreCase(user_string)); // compare "right_string" et "user_string" en ignorant les majuscules
  157.  
  158.   return code_bon;
  159. }
  160.  
  161.  
  162. void toneYes(){
  163.   tone(BUZZER, 370); //BUZZER branché sur le PIN 9 et 370 est la fréquence du buzzer
  164.   delay(100); //delai de 100ms
  165.   tone(BUZZER, 1000);
  166.   delay(200);        
  167.   noTone(BUZZER); //arrete le buzzer  
  168.   delay(1000);        
  169. }
  170.  
  171. void toneNo(){
  172.   tone(BUZZER,300);
  173.   delay(200);
  174.   noTone(BUZZER);
  175.   delay(100);
  176.   tone(BUZZER,300);
  177.   delay(200);
  178.   noTone(BUZZER);
  179.  
  180. }
  181.  
  182.  
  183. void setup() {
  184.  
  185.   //settins I/O
  186.  
  187.   //setting dipswiths pin as input
  188.   for (int i = 0; i < 4; i++) {
  189.     pinMode(PINS_DIPSWITCH[i], INPUT_PULLUP); //INTPUT PULLUP permet de pas avoir bcp de branchements mais ON équivaut à 0 et OFF renvoie 1
  190.   }
  191.  
  192.   //setting leds pins as output
  193.   pinMode(GREEN_LED, OUTPUT); //OUTPUT et pas INPUT car on sort de l'électricité par la LED
  194.   pinMode(RED_LED, OUTPUT);
  195.  
  196.   pinMode(BUZZER, OUTPUT);
  197.  
  198.   //initialising Serial
  199.   Serial.begin(9600);
  200.  
  201.   Serial.setTimeout(12000);
  202.  
  203. }
  204.  
  205.  
  206. void loop() {
  207.  
  208.   int level = read_level();
  209.   bool result = false;
  210.  
  211.   result = select_lvl(level);
  212.  
  213.   if (result == true){
  214.     //sequence checking : true
  215.     Serial.println("True sequence");
  216.     digitalWrite (GREEN_LED, HIGH);
  217.     digitalWrite(RED_LED, LOW);
  218.     toneYes();
  219.    
  220.     //door should open
  221.  
  222.     //stop the program execution with infinite loop
  223.     while (result);
  224.    
  225.   }
  226.   else{
  227.     //sequence checking : false
  228.     Serial.println("False  sequence");
  229.     digitalWrite(RED_LED, HIGH);    
  230.     digitalWrite (GREEN_LED, LOW);
  231.     toneNo();
  232.    
  233.     delay(500);
  234.   }
  235.  
  236.   //slow down the loop
  237.   delay(1000);
  238.  
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement