Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- #include <Keypad.h>
- // LED za LCD
- #define BACKLIGHT_PIN 13
- //0x27 je naslov na katerem je lcd - dobljen iz scannerja
- LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
- //PINI:
- int pin_zvok = 7; // digitalni pin 7 za pin_zvok
- int pin_temp = 1; // temperaturni senzor
- int pin_svetl=0; // svetlobni senzor
- int pin_buzzer=4; // aktivni piskač
- int pin_hall=2;
- //Pomožne spremenljivke:
- int val_temp; // prebrana vrednost temperature
- int val_prva_temp;
- int val_trenutna_temp;
- int val_zvok; // prebrana vrednost zvoka
- int val_light;
- int val_hall;
- int opr_naloge=0;
- int prva_n=0, druga_n=0, tretja_n=0, cetrta_n=0, peta_n=0, all=0;
- // Tabela frekvenc za CanCan
- int noteFreqArr[] = {
- 49, 52, 55, 59, 62, 66, 70, 74, 78, 83, 88, 93,
- 99, 105, 111, 117, 124, 132, 140, 148, 157, 166, 176, 186,
- 198, 209, 222, 235, 249, 264, 279, 296, 314, 332, 352, 373,
- 395, 419, 444, 470, 498, 527, 559, 592, 627, 665, 704, 746,
- 790, 837, 887, 940, 996, 1050, 1110, 1180, 1250, 1320, 1400, 1490,
- 1580, 1670, 1770, 1870, 1990, 2100};
- long mode = 0;
- //deklaraicija keypada
- const byte ROWS = 1; // ena vrstica
- const byte COLS = 4; // stiri stolpci
- // Define the Keymap, problem z ciframi zato pomesane stevilke
- char keys[ROWS][COLS] = {
- {'2','1','4','3'}
- };
- // Skupni pin 12
- byte rowPins[ROWS] = { 12 };
- // Pini posameznega gumba
- byte colPins[COLS] = { 8, 9, 10, 11};
- // Keypad
- Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- char key;
- String kombinacija="";
- int stevec=0;
- String array [4];
- void setup()
- {
- // Vklop LED lučke za LCD
- pinMode ( BACKLIGHT_PIN, OUTPUT );
- digitalWrite ( BACKLIGHT_PIN, HIGH );
- //init serijske povezave
- Serial.begin(9600);
- //definicije vhodnih in izhodnih pinov
- pinMode (pin_zvok, INPUT); // pin_zvok sensor kto input
- pinMode(pin_buzzer, OUTPUT); // piskač izhod
- pinMode(pin_hall, INPUT); // magnetni senzor vhod
- // init LCDja
- lcd.begin(16,2); // init lcd
- izpis(" ", " MagicBox ");
- // branje prve temperature
- int temp = func_temperatura();
- val_prva_temp= temp+2;
- Serial.print(val_prva_temp);
- }
- void loop()
- {
- if(prva_n!=1){
- naloga1();
- }
- if(druga_n!=1){
- naloga2();
- }
- if(tretja_n!=1){
- naloga3();
- }
- if(cetrta_n!=1){
- naloga4();
- }
- if(peta_n!=1){
- naloga5();
- }
- if(opr_naloge == 5 && all!=1){
- izpis("Vse naloge so", "opravljene!");
- igraj_cancan();
- all=1;
- }
- }
- void naloga1(){
- val_zvok = digitalRead(pin_zvok);
- if (val_zvok == 1){
- opr_naloge++;
- pisk();
- izpis("Naloga uspesno", "opravljena :-)");
- delay(2000);
- izpis_naloge();
- prva_n=1;
- Serial.print("zvok done");
- }
- }
- void naloga2(){
- val_trenutna_temp=func_temperatura();
- if(val_trenutna_temp > val_prva_temp ){
- opr_naloge++;
- pisk();
- izpis("Naloga uspesno", "opravljena :-)");
- delay(2000);
- izpis_naloge();
- druga_n=1;
- Serial.print(val_prva_temp);
- Serial.print("\n");
- Serial.print(val_trenutna_temp);
- Serial.print("temperatura done");
- }
- }
- void naloga3(){
- val_light = analogRead(pin_svetl);
- if(val_light > 350){
- opr_naloge++;
- pisk();
- izpis("Naloga uspesno", "opravljena :-)");
- delay(2000);
- izpis_naloge();
- tretja_n=1;
- Serial.print("light done");
- }
- }
- void naloga4(){
- key = kpd.getKey();
- if(key){
- switch(key){
- case '1':
- kombinacija+=key;
- izpis("Kombinacija:",kombinacija);
- stevec++;
- break;
- case '2':
- kombinacija+=key;
- izpis("Kombinacija:",kombinacija);
- stevec++;
- break;
- case '3':
- kombinacija+=key;
- izpis("Kombinacija:",kombinacija);
- stevec++;
- break;
- case '4':
- kombinacija+=key;
- izpis("Kombinacija:",kombinacija);
- stevec++;
- break;
- default:
- Serial.print("napaka");
- break;
- }
- }
- if(stevec==4){
- if(kombinacija.equals("2413")){
- opr_naloge++;
- pisk();
- izpis("Naloga uspesno", "opravljena :-)");
- delay(2000);
- izpis_naloge();
- cetrta_n=1;
- }else{
- izpis("Nepravilno!","poizkusi ponovno");
- kombinacija="";
- stevec=0;
- delay(2000);
- }
- }
- }
- void naloga5(){
- val_hall=digitalRead(pin_hall);
- if(val_hall==HIGH){ // High magnet je zaznan
- opr_naloge++;
- pisk();
- izpis("Naloga uspesno", "opravljena :-)");
- delay(2000);
- izpis_naloge();
- peta_n=1;
- Serial.print("hall done");
- }
- }
- int func_temperatura(){ // prva temperatura in prva temeperatura + 2
- val_temp = analogRead(pin_temp);
- float mv = ( val_temp/1024.0)*5000;
- float cel = mv/10;
- return int(cel);
- }
- void buzz(int targetPin, long frequency, long length) {
- long delayValue = 1000000/frequency/2; // zakasnitev /2 zaradi dveh faz
- long numCycles = frequency * length/ 1000; // ciklov na sekundo krat sekunde
- for (long i=0; i < numCycles; i++){
- digitalWrite(targetPin,HIGH);
- delayMicroseconds(delayValue); // delay
- digitalWrite(targetPin,LOW);
- delayMicroseconds(delayValue);
- }
- }
- void izpis(String vrstica1, String vrstica2){
- lcd.clear();
- lcd.home (); // home
- lcd.print(vrstica1);
- lcd.setCursor ( 0, 1 ); // naslednja vrstica
- lcd.print(vrstica2);
- delay ( 250 );
- }
- void izpis_naloge(){
- lcd.clear();
- lcd.home ();
- lcd.print("Koncane naloge");
- lcd.setCursor ( 0, 1 );
- lcd.print(String(opr_naloge) + String("/5"));
- delay ( 250 );
- }
- void pisk(){
- for(int i=0; i < 2; i++){ // pisk 2x
- buzz(pin_buzzer, 2500, 500); // pin 4, 2500Hz, 1000 milliseconds
- delay ( 500 );
- }
- }
- void playNote(long noteInt, long length, long mode, long breath = 25) {
- length = length - breath;
- long noteInt2 = noteInt + 12; //1 octave up
- long noteInt3 = noteInt + 24; //2 octaves up
- long noteInt4 = noteInt + 36; //3 octaves up
- long playLoop = length / 100; //divide length by 4, for use in play sequence
- if(mode == 0) { //mode 0 sequence
- for (long i=0; i < playLoop; i++){
- buzz(4, noteFreqArr[noteInt], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt2], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt3], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt4], 20);
- delay(5);
- }
- } else if(mode == 1) { //mode 1 sequence
- for (long i=0; i < playLoop; i++){
- buzz(4, noteFreqArr[noteInt3], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt4], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt3], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt4], 20);
- delay(5);
- }
- } else if(mode == 2) { //mode 2 sequence
- for (long i=0; i < playLoop; i++){
- buzz(4, noteFreqArr[noteInt3], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt3], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt3], 20);
- delay(5);
- buzz(4, noteFreqArr[noteInt2], 20);
- delay(5);
- }
- } else if(mode == 3) { //mode 3 sequence
- for (long i=0; i < playLoop; i++){
- buzz(4, noteFreqArr[noteInt4], 40);
- delay(5);
- buzz(4, noteFreqArr[noteInt2], 40);
- delay(5);
- }
- }
- if(breath > 0) { //take a short pause or 'breath' if specified
- delay(breath);
- }
- }
- void igraj_cancan(){
- playNote(12, 500, mode);
- playNote(5, 1000, mode);
- playNote(7, 250, mode);
- playNote(10, 250, mode);
- playNote(9, 250, mode);
- playNote(7, 250, mode);
- playNote(12, 500, mode);
- playNote(12, 500, mode);
- playNote(12, 250, mode);
- playNote(14, 250, mode);
- playNote(9, 250, mode);
- playNote(10, 250, mode);
- playNote(7, 500, mode);
- playNote(7, 500, mode);
- playNote(7, 250, mode);
- playNote(10, 250, mode);
- playNote(9, 250, mode);
- playNote(7, 250, mode);
- playNote(5, 250, mode);
- playNote(17, 250, mode);
- playNote(16, 250, mode);
- playNote(14, 250, mode);
- playNote(12, 250, mode);
- playNote(10, 250, mode);
- playNote(9, 250, mode);
- playNote(7, 250, mode);
- playNote(5, 1000, mode);
- playNote(7, 250, mode);
- playNote(10, 250, mode);
- playNote(9, 250, mode);
- playNote(7, 250, mode);
- playNote(12, 500, mode);
- playNote(12, 500, mode);
- playNote(12, 250, mode);
- playNote(14, 250, mode);
- playNote(9, 250, mode);
- playNote(10, 250, mode);
- playNote(7, 500, mode);
- playNote(7, 500, mode);
- playNote(7, 250, mode);
- playNote(10, 250, mode);
- playNote(9, 250, mode);
- playNote(7, 250, mode);
- playNote(5, 250, mode);
- playNote(12, 250, mode);
- playNote(7, 250, mode);
- playNote(9, 250, mode);
- playNote(5, 250, mode);
- delay(250);
- if(mode == 0) {
- mode = 1;
- } else if(mode == 1) {
- mode = 2;
- } else if(mode == 2) {
- mode = 3;
- } else if(mode == 3) {
- mode = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement