Advertisement
Guest User

Iot-kadai2

a guest
Sep 9th, 2019
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "pitches.h"
  2. #include "ramen.h"
  3. #include "onkai.h"
  4.  
  5. #define LEDC_CHANNEL_0 0
  6. #define LEDC_TIMER_13_BIT  13
  7. #define LEDC_BASE_FREQ  5000
  8.  
  9. #define bzz 16
  10.  
  11. #define start_sw 4
  12. #define inter_sw 32
  13.  
  14. #define LED_G 5
  15. #define LED_R 14
  16.  
  17. #define tempo_l 1000
  18. #define delayTime 100
  19. #define onkai_s 20
  20. #define onkai_max 8
  21.  
  22. portMUX_TYPE mux_1 = portMUX_INITIALIZER_UNLOCKED;
  23. #define DI_1() portENTER_CRITICAL_ISR(&mux_1);  //割込み禁止
  24. #define EI_1() portEXIT_CRITICAL_ISR(&mux_1);   //割込み許可
  25.  
  26. /*
  27. int arrayN2 = sizeof onkai;
  28. int c2 = sizeof onkai[0];
  29. int arrayS2 = arrayN2 / c2;
  30. */
  31.  
  32. int arrayN = sizeof melody;
  33. int c = sizeof melody[0];
  34. int arrayS = arrayN / c;
  35.  
  36. int start_flag = 0; //スタート検知
  37. volatile int intersw_flag = 0; //割り込みスイッチの変化
  38.  
  39. void IRAM_ATTR handleInterrupt(){
  40.   DI_1();
  41.   if(start_flag)intersw_flag = 1;
  42.   EI_1();
  43. }
  44.  
  45. void setup() {
  46.  
  47.   ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);
  48.   ledcAttachPin(bzz, LEDC_CHANNEL_0);
  49.  
  50.   pinMode(bzz, OUTPUT);
  51.   pinMode(LED_G, OUTPUT);
  52.   pinMode(LED_R, OUTPUT);
  53.   pinMode(start_sw, INPUT_PULLUP);
  54.   pinMode(inter_sw, INPUT_PULLUP);
  55.   attachInterrupt (digitalPinToInterrupt(inter_sw), handleInterrupt, FALLING);
  56.  
  57. }
  58. void tone_n(int channel, int frq, int time_w) {
  59.   ledcWriteTone (channel, frq);
  60.   delay(time_w);
  61.   ledcWriteTone (channel, 0);
  62. }
  63.  
  64. void loop() {
  65.   start_flag =!(digitalRead(start_sw));
  66.   digitalWrite(LED_G, HIGH);
  67.  
  68.   if (start_flag) {
  69.     digitalWrite(LED_G, LOW);
  70.     delay(tempo_l-onkai_s);
  71.  
  72.     for (int cnt = 0; cnt < onkai_max; cnt++) {
  73.     if(intersw_flag)break;
  74.     digitalWrite(LED_R, HIGH);
  75.     tone_n(LEDC_CHANNEL_0, onkai[cnt], onkai_s);
  76.     digitalWrite(LED_R, LOW);
  77.     delay(tempo_l-onkai_s);
  78.   }
  79.     digitalWrite(LED_R, LOW);
  80.     digitalWrite(LED_G, HIGH);
  81.  
  82.     for (int cnt = 0; cnt < arrayS; cnt++) {
  83.     if(intersw_flag)break;
  84.     tone_n(LEDC_CHANNEL_0, melody[cnt], tempo[cnt]);
  85.     delay(delayTime);
  86.   }
  87.   ledcWriteTone (LEDC_CHANNEL_0, 0);
  88.   intersw_flag = 0;
  89.   start_flag = 0;
  90.   }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement