drumduino_firmware.ino 981 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #define PORT_CNT 6
  2. #define CHAN_CNT 8
  3. #define MULTIPLEX_PIN_A 2
  4. #define MULTIPLEX_PIN_B 3
  5. #define MULTIPLEX_PIN_C 4
  6. void multiplexSelectChan(uint8_t chan)
  7. {
  8. digitalWrite(MULTIPLEX_PIN_A, chan & 0x1);
  9. digitalWrite(MULTIPLEX_PIN_B, chan & 0x2);
  10. digitalWrite(MULTIPLEX_PIN_C, chan & 0x4);
  11. }
  12. byte valueFrame[1 + CHAN_CNT* PORT_CNT] = {0xff, 0};
  13. void setup()
  14. {
  15. // Setup MultiplexSelection Pins
  16. pinMode(MULTIPLEX_PIN_A, OUTPUT);
  17. pinMode(MULTIPLEX_PIN_B, OUTPUT);
  18. pinMode(MULTIPLEX_PIN_C, OUTPUT);
  19. // Setup AD Pins
  20. analogReference(DEFAULT);
  21. // Setup Serial
  22. Serial.begin(115200);
  23. Serial.flush();
  24. }
  25. void loop()
  26. {
  27. for(uint8_t chan = 0; chan < CHAN_CNT; ++chan) {
  28. multiplexSelectChan(chan);
  29. for(uint8_t port = 0; port < PORT_CNT; ++port) {
  30. int channelNumber = port * CHAN_CNT + chan;
  31. byte& value = *(valueFrame + 1 + channelNumber);
  32. value = byte(analogRead(port) / 8); //map [0..1023] -> [0..127]
  33. }
  34. }
  35. Serial.write(valueFrame, sizeof(valueFrame));
  36. }