CapTouchTones.ino
 1  // SPDX-FileCopyrightText: 2020 Carter Nelson for Adafruit Industries
 2  //
 3  // SPDX-License-Identifier: MIT
 4  
 5  ////////////////////////////////////////////////////////////////////////////
 6  // Circuit Playground Capacitive Touch Tones
 7  //
 8  // Play a tone for each touch pad.
 9  // Using 4th octave note frequencies, to nearest 1Hz.
10  // https://www.seventhstring.com/resources/notefrequencies.html
11  //
12  // Author: Carter Nelson
13  // MIT License (https://opensource.org/licenses/MIT)
14  
15  #include <Adafruit_CircuitPlayground.h>
16  
17  #define CAP_THRESHOLD   50
18  
19  uint8_t pads[] = {3, 2, 0, 1, 12, 6, 9, 10};
20  uint8_t numberOfPads = sizeof(pads)/sizeof(uint8_t);
21  
22  ////////////////////////////////////////////////////////////////////////////
23  void takeAction(uint8_t pad) {
24    Serial.print("PAD "); Serial.print(pad); Serial.print(" playing note: ");
25    switch (pad) {
26      case 3:
27        Serial.println("C");
28        CircuitPlayground.playTone(262, 100, false);
29        break;
30      case 2:
31        Serial.println("D");
32        CircuitPlayground.playTone(294, 100, false);
33        break;
34      case 0:
35        Serial.println("E");
36        CircuitPlayground.playTone(330, 100, false);
37        break;
38      case 1:
39        Serial.println("F");
40        CircuitPlayground.playTone(349, 100, false);
41        break;
42      case 12:
43        Serial.println("G");
44        CircuitPlayground.playTone(392, 100, false);
45        break;
46      case 6:
47        Serial.println("A");
48        CircuitPlayground.playTone(440, 100, false);
49        break;
50      case 9:
51        Serial.println("B");
52        CircuitPlayground.playTone(494, 100, false);
53        break;
54      case 10:
55        Serial.println("C");
56        CircuitPlayground.playTone(523, 100, false);
57        break;
58      default:
59        Serial.println("THIS SHOULD NEVER HAPPEN.");
60    }
61  }
62  
63  ////////////////////////////////////////////////////////////////////////////
64  boolean capButton(uint8_t pad) {
65    // Check if capacitive touch exceeds threshold.
66    if (CircuitPlayground.readCap(pad) > CAP_THRESHOLD) {
67      return true;  
68    } else {
69      return false;
70    }
71  }
72  
73  ////////////////////////////////////////////////////////////////////////////
74  void setup() {
75    // Initialize serial.
76    Serial.begin(9600); 
77    
78    // Initialize Circuit Playground library.
79    CircuitPlayground.begin();
80  
81  }
82  
83  ////////////////////////////////////////////////////////////////////////////
84  void loop() {
85    // Loop over every pad.
86    for (int i=0; i<numberOfPads; i++) {
87      
88      // Check if pad is touched.
89      if (capButton(pads[i])) {
90        
91        // Do something.
92        takeAction(pads[i]);
93      }
94    }
95  }