0

Dependencies:   Box_buzz Box_led

Revision:
0:2898785200f6
Child:
1:0c88d5db040a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Feb 24 14:54:45 2022 +0000
@@ -0,0 +1,113 @@
+#include "mbed.h"
+#include "led.h"
+#include "buzzer.h"
+
+
+Timer debounce;                                //tajmer koji koristimo za debounce
+InterruptIn button(D7);                        //definiranje tipke za hardverski prekid
+LED led1(D3);                                  //definiranje pina za crvenu ledicu
+LED led2(D4);                                  //definiranje pina za plavu ledicu
+Beep buzzer(D5);                               //definiranje pina za zvučnik
+DigitalOut ledica(LED2);                       //definiranje ledice na Nucleo pločici
+Ticker blink;                                  //definiranje tickera
+int a=0;                                       //definiranje integera u nulu
+int b=0;
+int x=0;
+ 
+//Frequency                                                                                            //Frekvencija svakog tona melodije
+float a4=440.00;float b3=246.94;float b4b=446;float b4=493.88; 
+float c4=261.63;float c4_1=130;float c5=523.25;float c5s=554.40;
+float d4=293.66;float d4b=277;float d5=587.33;
+float e4=329.63;float e5=659.25; 
+float f4=349.23;float f4s=370.00;float f5=698.46;
+float g3=196; float g4=392.00;float g4s=415.30;float g5=783.99;
+
+//Duration                                                                                               //trajanje tonova
+float t1=16; float t2=8; float t3=4; float t4=2; float t5=6;
+
+
+//"Happy Birthday song"                                                                                  //prva melodija
+float happy_freq[25] = {g4,g4,a4,g4,c5,b4,g4,g4,a4,g4,d5,c5,g4,g4,g5,e5,c5,b4,a4,f5,f5,e5,c5,d5,c5};
+float happy_tempo[25] = {t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t2,t3,t3,t3,t3,t3,t3};                            
+                             
+void song1() 
+{ 
+        for(a=0; a<25; a++) {                                                          //petlja za prvu melodiju 
+            buzzer.beep(happy_freq[a], happy_tempo[a]);
+            led1.state(1);                                                             
+            led2.state(0);
+            wait(0.05);
+            led1.state(0);
+            led2.state(1);
+            wait(1/happy_tempo[a]);                                                    //paljenje i gašenje ledica u ritmu melodije
+            if(x==2){                                                                  //pritiskom na tipkalo petlja se prekida i pokreće druga melodija
+                break;}
+        }
+}
+
+//''Scary song''
+float scary_freq[20]={c5s, f4s, f4s, c5s, f4s, f4s, c5s, f4s, d5, f4s, c5s, f4s, f4s, c5s, f4s, f4s, c5s, f4s, d5, f4s};   
+float scary_tempo[20]={t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5};
+
+void song2() 
+{ 
+        for(b=0; b<20; b++) {
+            buzzer.beep(scary_freq[b], scary_tempo[b]);
+            led2.state(1);
+            led2.state(0);
+            wait(0.05);
+            led2.state(0);
+            led2.state(1);
+            wait(1/scary_tempo[b]);
+            if (x==3){
+                led1.state(0);
+                led2.state(0);
+                buzzer.beep(1000, 0.01);
+                break;}    
+        }
+}
+                                                     //Funkcija za detekciju tipke
+void pressbutton()
+{
+        if(debounce.read_ms()>100) {                 //sprečavanje signala da titra
+        x++;
+    }
+    debounce.reset();
+}
+
+
+                                                       //Funkcija za blicanje zelene tipke kada je sklop aktivan
+void active()
+{
+    if(x==1 or x==2)
+    {
+        ledica=!ledica;
+    }
+    else{
+        ledica=0;
+        }
+}
+                                                        //Postavljanje početnog stanja sklopa
+int main()
+       {
+      led1.state(0);
+      led2.state(0);
+      debounce.start();
+      button.rise(&pressbutton);                         //button koja poziva funkciju pressbutton na rastući brid signala tipke
+      blink.attach(&active,0.5);                         // blink ticker koji poziva funkciju active u intervalu 0.5
+                                                         //while petlja
+       while (true) {
+                 if(x==1){
+                song1();
+                }
+           else{
+                if(x==2){
+                song2();
+                }
+                if(x==3)
+                {
+                x=0;
+                  }
+              }
+        }
+  }
\ No newline at end of file