pleasedontcode

MPR121 Relays rev_02

Sep 4th, 2025
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /********* Pleasedontcode.com **********
  2.  
  3.     Pleasedontcode thanks you for automatic code generation! Enjoy your code!
  4.  
  5.     - Terms and Conditions:
  6.     You have a non-exclusive, revocable, worldwide, royalty-free license
  7.     for personal and commercial use. Attribution is optional; modifications
  8.     are allowed, but you're responsible for code maintenance. We're not
  9.     liable for any loss or damage. For full terms,
  10.     please visit pleasedontcode.com/termsandconditions.
  11.  
  12.     - Project: MPR121 Relays
  13.     - Source Code NOT compiled for: ESP32 DevKit V1
  14.     - Source Code created on: 2025-09-04 18:20:10
  15.  
  16. ********* Pleasedontcode.com **********/
  17.  
  18. /****** SYSTEM REQUIREMENTS *****/
  19. /****** SYSTEM REQUIREMENT 1 *****/
  20.     /* clontrol 8 SSD relay with IR remote and MPR121 */
  21.     /* touch pad */
  22. /****** END SYSTEM REQUIREMENTS *****/
  23.  
  24.  
  25. /* START CODE */
  26.  
  27. /****** DEFINITION OF LIBRARIES *****/
  28. #include <Relay.h>  //https://github.com/rafaelnsantos/Relay
  29. #include <Wire.h>
  30. #include <Adafruit_MPR121.h>
  31. #include <IRrecv.h>
  32. #include <IRutils.h>
  33.  
  34. /****** CONSTANTS AND PIN DEFINITIONS *****/
  35. #define NUM_RELAYS 8
  36.  
  37. // Relay pin mapping (ESP32 GPIOs). Ensure these pins are suitable for your board and relay driver wiring.
  38. const uint8_t RELAY_PINS[NUM_RELAYS] = {
  39.   2, 4, 5, 12, 13, 14, 15, 16
  40. };
  41.  
  42. // I2C pins for MPR121
  43. #define MPR_SDA_PIN 21
  44. #define MPR_SCL_PIN 22
  45.  
  46. // IR receiver
  47. #define IR_PIN 27
  48.  
  49. /****** FUNCTION PROTOTYPES *****/
  50. void setup(void);
  51. void loop(void);
  52.  
  53. // MPR121 touch support
  54. Adafruit_MPR121 cap = Adafruit_MPR121();
  55.  
  56. // IR receiver object
  57. IRrecv irrecv(IR_PIN);
  58. decode_results results;
  59.  
  60. // Relay modules (explicit pin mapping for clarity)
  61. Relay relays[NUM_RELAYS] = {
  62.   Relay(2, true),
  63.   Relay(4, true),
  64.   Relay(5, true),
  65.   Relay(12, true),
  66.   Relay(13, true),
  67.   Relay(14, true),
  68.   Relay(15, true),
  69.   Relay(16, true)
  70. };
  71.  
  72. // Previous touch states for MPR121 electrodes (we use first 8 electrodes)
  73. bool prevTouch[NUM_RELAYS];
  74.  
  75. // Helper to toggle a relay state
  76. void toggleRelay(uint8_t idx) {
  77.   if (idx >= NUM_RELAYS) return;
  78.   if (relays[idx].getState()) {
  79.     relays[idx].turnOff();
  80.   } else {
  81.     relays[idx].turnOn();
  82.   }
  83. }
  84.  
  85. // Process IR remote codes (example mappings for common NEC-like remotes)
  86. void processIR(uint32_t code) {
  87.   switch (code) {
  88.     case 0xFF30CF: toggleRelay(0); break; // Key 1
  89.     case 0xFF18E7: toggleRelay(1); break; // Key 2
  90.     case 0xFF7A85: toggleRelay(2); break; // Key 3
  91.     case 0xFF10EF: toggleRelay(3); break; // Key 4
  92.     case 0xFF38C7: toggleRelay(4); break; // Key 5
  93.     case 0xFF5AA5: toggleRelay(5); break; // Key 6
  94.     case 0xFF42BD: toggleRelay(6); break; // Key 7
  95.     case 0xFF4AB5: toggleRelay(7); break; // Key 8
  96.     default: break;
  97.   }
  98. }
  99.  
  100. void setup(void)
  101. {
  102.   // Initialize serial for debugging
  103.   Serial.begin(115200);
  104.   while (!Serial) { ; }
  105.  
  106.   // Initialize Relay modules and reset touch states
  107.   for (uint8_t i = 0; i < NUM_RELAYS; i++) {
  108.     relays[i].begin();
  109.     prevTouch[i] = false;
  110.   }
  111.  
  112.   // Initialize I2C for MPR121 on defined pins
  113.   Wire.begin(MPR_SDA_PIN, MPR_SCL_PIN);
  114.   if (!cap.begin(0x5A)) {
  115.     Serial.println("MPR121 not found");
  116.     while (1);
  117.   }
  118.  
  119.   // Initialize IR receiver
  120.   irrecv.enableIRIn();
  121.  
  122.   Serial.println("System ready");
  123. }
  124.  
  125. void loop(void)
  126. {
  127.   // IR remote handling
  128.   if (irrecv.decode(&results)) {
  129.     processIR(results.value);
  130.     irrecv.resume();
  131.   }
  132.  
  133.   // MPR121 touch handling (toggle relays on touch edge)
  134.   uint16_t touches = cap.touched();
  135.   for (uint8_t i = 0; i < NUM_RELAYS; i++) {
  136.     bool isTouched = (touches & (1 << i)) != 0;
  137.     if (isTouched && !prevTouch[i]) {
  138.       toggleRelay(i);
  139.     }
  140.     prevTouch[i] = isTouched;
  141.   }
  142.  
  143.   delay(20);
  144. }
  145.  
  146. /* END CODE */
  147.  
Advertisement
Add Comment
Please, Sign In to add comment