Tehnicko Veleuciliste Zagreb konstrukcijski rad Bozicne lampice

Dependencies:   mbed flasher

Pri pokretanju programa svijetle led lampice redoslijedom crvena, zelena, žuta u razmaku od 0.2 sekunde i svira melodija we wish You a Merry Christmas. Dovođenjem prekidača sw1 u položaj 0 led lampice se skupa pale i gase također u razmaku od 0.2 sekunde. Ticker služi za provjeru rada programa i treperi plavom led lampicom u razmaku od 0.8 sekundi. Hardverski interrupt radi pritiskom na user button pri čemu program staje na 5 sekundi i pali se led2 na Nucleo pločici. Nakon isteka 5 sek program nastavlja dalje s radom ali led2 ostaje upaljena do ponovog pokretanja interrupat-a.

main.cpp

Committer:
zdenko12
Date:
2021-12-01
Revision:
0:aeccbc47e077

File content as of revision 0:aeccbc47e077:

#include "mbed.h"
#include"flasher.h"

PwmOut buzzer(D7);
DigitalIn sw1(D8);
DigitalOut led1(D2); //ticker plava ledica
Ticker flipper1;
InterruptIn button(USER_BUTTON);
DigitalOut workingLED(LED2); //interupt ledica
Timer debounce;
void interrupt(void);
void flip1() {
    led1=!led1;
    }
//frekvencija melodije
float a4=440.00;
float b3=246.94;
float b4=493.88;
float c4=261.63;
float c5=523.25;
float c5s=554.40;
float d4=293.66;
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 g4=392.00;
float g4s=415.30;
float g5=783.99;
//trajanje tona
float t1=16;
float t2=8;
float t3=4;
float t4=2;
float t5=1;

float wish_freq[30] = {e4,a4,a4,b4,a4,g4s,f4s,f4s,f4s,b4,b4,c5s,b4,a4,g4s,e4,e4,c5s,c5s,d5,c5s,b4,a4,f4s,e4,e4,f4s,b4,g4s,a4};
float wish_tempo[30] = {t3,t3,t2,t2,t2,t2,t3,t3,t3,t3,t2,t2,t2,t2,t3,t3,t3,t3,t2,t2,t2,t2,t3,t3,t2,t2,t3,t3,t3,t4};


int main()
{
    debounce.start();
    button.rise(&interrupt);
    
         led1 = 1;
         led1 = 0;
 flipper1.attach(&flip1, 0.8); 
 

    sw1.mode(PullUp);
    while(1) {

          for (int i=0; i<=30; i++) {
             buzzer.period(0.2/(wish_freq[i]));
             buzzer=0.8;
             wait(0.02 *wish_tempo[i]);
             if(sw1 == 1) {
         bozicnelampice(); //poziv funkcije
         }
          else if(sw1==0) { //ako promjenimo polozaj prekidaca
            redled = 1;
            greenled = 1;
            yellowled = 1;
            wait(0.2);
            redled = 0;
            greenled = 0;
            yellowled = 0;
            wait(0.2);
}
}
}
}

//Zaustavlja rad na 5 sec
void interrupt()
{

    if (debounce.read_ms()>200) {
        workingLED = !workingLED;
        wait_us(5000000);//Zaustavlja rad na 5 sec
    }
    debounce.reset();
}