Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.08 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3. #include <Keypad.h>
  4.  
  5. // LED za LCD
  6. #define BACKLIGHT_PIN     13
  7.  
  8. //0x27 je naslov na katerem je lcd - dobljen iz scannerja
  9. LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  10.  
  11. //PINI:
  12. int pin_zvok = 7;   // digitalni pin 7 za pin_zvok
  13. int pin_temp = 1;   // temperaturni senzor
  14. int pin_svetl=0;    // svetlobni senzor
  15. int pin_buzzer=4;   // aktivni piskač
  16. int pin_hall=2;
  17.  
  18. //Pomožne spremenljivke:
  19. int val_temp;            // prebrana vrednost temperature
  20. int val_prva_temp;
  21. int val_trenutna_temp;
  22. int val_zvok;       // prebrana vrednost zvoka
  23. int val_light;
  24. int val_hall;
  25. int opr_naloge=0;
  26. int prva_n=0, druga_n=0, tretja_n=0, cetrta_n=0, peta_n=0, all=0;
  27.  
  28. // Tabela frekvenc za CanCan
  29. int noteFreqArr[] = {
  30. 49, 52, 55, 59, 62, 66, 70, 74, 78, 83, 88, 93,
  31. 99, 105, 111, 117, 124, 132, 140, 148, 157, 166, 176, 186,
  32. 198, 209, 222, 235, 249, 264, 279, 296, 314, 332, 352, 373,
  33. 395, 419, 444, 470, 498, 527, 559, 592, 627, 665, 704, 746,
  34. 790, 837, 887, 940, 996, 1050, 1110, 1180, 1250, 1320, 1400, 1490,
  35. 1580, 1670, 1770, 1870, 1990, 2100};
  36.  
  37. long mode = 0;
  38.  
  39. //deklaraicija keypada
  40. const byte ROWS = 1; // ena vrstica
  41. const byte COLS = 4; // stiri stolpci
  42. // Define the Keymap, problem z ciframi zato pomesane stevilke
  43. char keys[ROWS][COLS] = {
  44.   {'2','1','4','3'}
  45. };
  46. // Skupni pin 12
  47. byte rowPins[ROWS] = { 12 };
  48. // Pini posameznega gumba
  49. byte colPins[COLS] = { 8, 9, 10, 11};
  50.  
  51. // Keypad
  52. Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
  53.  
  54. char key;
  55. String kombinacija="";
  56. int stevec=0;
  57. String array [4];
  58.  
  59. void setup()
  60. {
  61.  
  62.   // Vklop LED lučke za LCD
  63.   pinMode ( BACKLIGHT_PIN, OUTPUT );
  64.   digitalWrite ( BACKLIGHT_PIN, HIGH );
  65.  
  66.   //init serijske povezave
  67.   Serial.begin(9600);
  68.  
  69.   //definicije vhodnih in izhodnih pinov
  70.   pinMode (pin_zvok, INPUT);    // pin_zvok sensor kto input
  71.   pinMode(pin_buzzer, OUTPUT); // piskač izhod
  72.   pinMode(pin_hall, INPUT);    // magnetni senzor vhod
  73.  
  74.  
  75.   // init LCDja
  76.   lcd.begin(16,2);               // init lcd
  77.   izpis(" ", "    MagicBox    ");
  78.  
  79.   // branje prve temperature
  80.   int temp = func_temperatura();
  81.   val_prva_temp= temp+2;
  82.   Serial.print(val_prva_temp);
  83.  
  84. }
  85.  
  86. void loop()
  87. {
  88.  
  89.   if(prva_n!=1){
  90.     naloga1();    
  91.   }
  92.  
  93.   if(druga_n!=1){
  94.      naloga2();
  95.   }
  96.  
  97.   if(tretja_n!=1){
  98.      naloga3();
  99.   }
  100.  
  101.   if(cetrta_n!=1){
  102.     naloga4();
  103.   }
  104.  
  105.   if(peta_n!=1){
  106.     naloga5();
  107.   }
  108.  
  109.   if(opr_naloge == 5 && all!=1){
  110.     izpis("Vse naloge so", "opravljene!");
  111.     igraj_cancan();
  112.     all=1;
  113.   }
  114. }
  115.  
  116. void naloga1(){
  117.   val_zvok = digitalRead(pin_zvok);
  118.    
  119.     if (val_zvok == 1){
  120.       opr_naloge++;
  121.       pisk();
  122.       izpis("Naloga uspesno", "opravljena :-)");
  123.       delay(2000);
  124.       izpis_naloge();
  125.       prva_n=1;
  126.       Serial.print("zvok done");
  127.      
  128.     }
  129. }
  130.  
  131. void naloga2(){
  132.     val_trenutna_temp=func_temperatura();
  133.  
  134.     if(val_trenutna_temp > val_prva_temp ){
  135.       opr_naloge++;    
  136.       pisk();
  137.       izpis("Naloga uspesno", "opravljena :-)");
  138.       delay(2000);
  139.       izpis_naloge();
  140.       druga_n=1;
  141.       Serial.print(val_prva_temp);
  142.       Serial.print("\n");
  143.       Serial.print(val_trenutna_temp);
  144.       Serial.print("temperatura done");
  145.     }
  146. }
  147.  
  148. void naloga3(){
  149.   val_light = analogRead(pin_svetl);
  150.  
  151.   if(val_light > 350){
  152.     opr_naloge++;
  153.     pisk();
  154.     izpis("Naloga uspesno", "opravljena :-)");
  155.     delay(2000);
  156.     izpis_naloge();
  157.     tretja_n=1;
  158.     Serial.print("light done");
  159.   }
  160. }
  161.  
  162. void naloga4(){
  163.  
  164.   key = kpd.getKey();
  165.  
  166.   if(key){
  167.     switch(key){
  168.       case '1':
  169.         kombinacija+=key;
  170.         izpis("Kombinacija:",kombinacija);
  171.         stevec++;
  172.         break;
  173.       case '2':
  174.         kombinacija+=key;
  175.         izpis("Kombinacija:",kombinacija);
  176.         stevec++;
  177.         break;
  178.       case '3':
  179.         kombinacija+=key;
  180.         izpis("Kombinacija:",kombinacija);
  181.         stevec++;
  182.         break;
  183.       case '4':
  184.         kombinacija+=key;
  185.         izpis("Kombinacija:",kombinacija);
  186.         stevec++;
  187.         break;
  188.       default:
  189.         Serial.print("napaka");
  190.         break;
  191.     }
  192.   }
  193.  
  194.   if(stevec==4){
  195.     if(kombinacija.equals("2413")){
  196.       opr_naloge++;
  197.       pisk();
  198.       izpis("Naloga uspesno", "opravljena :-)");
  199.       delay(2000);
  200.       izpis_naloge();
  201.       cetrta_n=1;
  202.     }else{
  203.       izpis("Nepravilno!","poizkusi ponovno");
  204.       kombinacija="";
  205.       stevec=0;
  206.       delay(2000);
  207.     }
  208.   }
  209. }
  210.  
  211. void naloga5(){
  212.   val_hall=digitalRead(pin_hall);
  213.  
  214.     if(val_hall==HIGH){    // High magnet je zaznan
  215.       opr_naloge++;
  216.       pisk();
  217.       izpis("Naloga uspesno", "opravljena :-)");
  218.       delay(2000);
  219.       izpis_naloge();
  220.       peta_n=1;
  221.       Serial.print("hall done");
  222.     }
  223. }
  224.  
  225. int func_temperatura(){               // prva temperatura in prva temeperatura + 2
  226.     val_temp = analogRead(pin_temp);
  227.     float mv = ( val_temp/1024.0)*5000;
  228.     float cel = mv/10;
  229.     return int(cel);
  230. }
  231.  
  232. void buzz(int targetPin, long frequency, long length) {
  233.   long delayValue = 1000000/frequency/2; // zakasnitev /2 zaradi dveh faz
  234.   long numCycles = frequency * length/ 1000; // ciklov na sekundo krat sekunde
  235.  for (long i=0; i < numCycles; i++){
  236.     digitalWrite(targetPin,HIGH);
  237.     delayMicroseconds(delayValue); // delay
  238.     digitalWrite(targetPin,LOW);
  239.     delayMicroseconds(delayValue);
  240.  
  241.   }
  242. }
  243.  
  244. void izpis(String vrstica1, String vrstica2){
  245.   lcd.clear();
  246.   lcd.home ();                   // home
  247.   lcd.print(vrstica1);  
  248.   lcd.setCursor ( 0, 1 );        // naslednja vrstica
  249.   lcd.print(vrstica2);
  250.   delay ( 250 );
  251. }
  252.  
  253. void izpis_naloge(){
  254.   lcd.clear();
  255.   lcd.home ();                  
  256.   lcd.print("Koncane naloge");  
  257.   lcd.setCursor ( 0, 1 );        
  258.   lcd.print(String(opr_naloge) + String("/5"));
  259.   delay ( 250 );
  260. }
  261.  
  262. void pisk(){
  263.   for(int i=0; i < 2; i++){     // pisk 2x
  264.         buzz(pin_buzzer, 2500, 500); //  pin 4, 2500Hz, 1000 milliseconds
  265.         delay ( 500 );
  266.       }
  267. }
  268.  
  269. void playNote(long noteInt, long length, long mode, long breath = 25) {
  270.   length = length - breath;
  271.  
  272.   long noteInt2 = noteInt + 12; //1 octave up
  273.   long noteInt3 = noteInt + 24; //2 octaves up
  274.   long noteInt4 = noteInt + 36; //3 octaves up
  275.  
  276.   long playLoop = length / 100; //divide length by 4, for use in play sequence
  277.  
  278.   if(mode == 0) { //mode 0 sequence
  279.     for (long i=0; i < playLoop; i++){
  280.       buzz(4, noteFreqArr[noteInt], 20);
  281.       delay(5);
  282.       buzz(4, noteFreqArr[noteInt2], 20);
  283.       delay(5);
  284.       buzz(4, noteFreqArr[noteInt3], 20);
  285.       delay(5);
  286.       buzz(4, noteFreqArr[noteInt4], 20);
  287.       delay(5);
  288.     }
  289.   } else if(mode == 1) { //mode 1 sequence
  290.     for (long i=0; i < playLoop; i++){
  291.       buzz(4, noteFreqArr[noteInt3], 20);
  292.       delay(5);
  293.       buzz(4, noteFreqArr[noteInt4], 20);
  294.       delay(5);
  295.       buzz(4, noteFreqArr[noteInt3], 20);
  296.       delay(5);
  297.       buzz(4, noteFreqArr[noteInt4], 20);
  298.       delay(5);
  299.     }
  300.   } else if(mode == 2) { //mode 2 sequence
  301.     for (long i=0; i < playLoop; i++){
  302.       buzz(4, noteFreqArr[noteInt3], 20);
  303.       delay(5);
  304.       buzz(4, noteFreqArr[noteInt3], 20);
  305.       delay(5);
  306.       buzz(4, noteFreqArr[noteInt3], 20);
  307.       delay(5);
  308.       buzz(4, noteFreqArr[noteInt2], 20);
  309.       delay(5);
  310.     }
  311.   } else if(mode == 3) { //mode 3 sequence
  312.     for (long i=0; i < playLoop; i++){
  313.       buzz(4, noteFreqArr[noteInt4], 40);
  314.       delay(5);
  315.       buzz(4, noteFreqArr[noteInt2], 40);
  316.       delay(5);
  317.     }
  318.   }
  319.   if(breath > 0) { //take a short pause or 'breath' if specified
  320.     delay(breath);
  321.   }
  322. }
  323.  
  324. void igraj_cancan(){
  325.   playNote(12, 500, mode);
  326.  
  327.   playNote(5, 1000, mode);
  328.   playNote(7, 250, mode);
  329.   playNote(10, 250, mode);
  330.   playNote(9, 250, mode);
  331.   playNote(7, 250, mode);
  332.   playNote(12, 500, mode);
  333.   playNote(12, 500, mode);
  334.   playNote(12, 250, mode);
  335.   playNote(14, 250, mode);
  336.   playNote(9, 250, mode);
  337.   playNote(10, 250, mode);
  338.   playNote(7, 500, mode);
  339.   playNote(7, 500, mode);
  340.   playNote(7, 250, mode);
  341.   playNote(10, 250, mode);
  342.   playNote(9, 250, mode);
  343.   playNote(7, 250, mode);
  344.   playNote(5, 250, mode);
  345.   playNote(17, 250, mode);
  346.   playNote(16, 250, mode);
  347.   playNote(14, 250, mode);
  348.   playNote(12, 250, mode);
  349.   playNote(10, 250, mode);
  350.   playNote(9, 250, mode);
  351.   playNote(7, 250, mode);
  352.  
  353.   playNote(5, 1000, mode);
  354.   playNote(7, 250, mode);
  355.   playNote(10, 250, mode);
  356.   playNote(9, 250, mode);
  357.   playNote(7, 250, mode);
  358.   playNote(12, 500, mode);
  359.   playNote(12, 500, mode);
  360.   playNote(12, 250, mode);
  361.   playNote(14, 250, mode);
  362.   playNote(9, 250, mode);
  363.   playNote(10, 250, mode);
  364.   playNote(7, 500, mode);
  365.   playNote(7, 500, mode);
  366.   playNote(7, 250, mode);
  367.   playNote(10, 250, mode);
  368.   playNote(9, 250, mode);
  369.   playNote(7, 250, mode);
  370.   playNote(5, 250, mode);
  371.   playNote(12, 250, mode);
  372.   playNote(7, 250, mode);
  373.   playNote(9, 250, mode);
  374.   playNote(5, 250, mode);
  375.   delay(250);
  376.  
  377.   if(mode == 0) {
  378.     mode = 1;
  379.   } else if(mode == 1) {
  380.     mode = 2;
  381.   } else if(mode == 2) {
  382.     mode = 3;
  383.   } else if(mode == 3) {
  384.     mode = 0;
  385.   }
  386. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement