Beispiel #1
0
// use led state buffer and dirty flags
static void monome_ring_enc_loopback(void* op, u32 edata) {
  u8 n;
  s8 val;
  monome_ring_enc_parse_event_data(edata, &n, &val);
  if(val > 0) {
    monomeLedBuffer[val + (n<<6)] = 15;
    monomeFrameDirty |= (1<<n);
  }
}
Beispiel #2
0
// handler for arc encoders event, gets called whenever an encoder is turned
static void handler_MonomeRingEnc(s32 data) { 
	u8 n;
	s8 delta;
	monome_ring_enc_parse_event_data(data, &n, &delta);
	// n will be the encoder # 0..3
	// delta is a signed value which indicates how much the encoder was turned
	// clockwise movement will generate positive delta, CCW - negative
	
	// i find that for simple tasks you might want to "desensitize" the input a bit
	// the following block achieves that by accumulating delta and only reacting to it when it passes the threshold
	// you might want to adjust or change this for your specific needs
	encoderDelta[n] += abs(delta);
	if (encoderDelta[n] < ENCODER_DELTA_SENSITIVITY)
		return;
	encoderDelta[n] = 0;

	// example on processing encoder events - here we update values array accordingly and refresh the arc
	// don't do anything too long here - for long operations consider using timers
	switch(n)
	{
		case 0: // first encoder turned
			if (delta > 0) // turned clockwise
			{
				if (values[0] < 64) values[0]++;
			}
			else // turned counter clockwise
			{
				if (values[0] > 0) values[0]--;
			}
			break;
		case 1: // second encoder turned
			if (delta > 0) // turned clockwise
			{
				if (values[1] < 64) values[1]++;
			}
			else // turned counter clockwise
			{
				if (values[1] > 0) values[1]--;
			}
			break;
		case 2: // third encoder turned
			if (delta > 0) // turned clockwise
			{
				if (values[2] < 64) values[2]++;
			}
			else // turned counter clockwise
			{
				if (values[2] > 0) values[2]--;
			}
			break;
		case 3: // fourth encoder turned
			if (delta > 0) // turned clockwise
			{
				if (values[3] < 64) values[3]++;
			}
			else // turned counter clockwise
			{
				if (values[3] > 0) values[3]--;
			}
			break;
	}
	updateArc();
	updateCvOuts();
}