Skip to content

Instantly share code, notes, and snippets.

@buzztiaan
Last active December 27, 2015 03:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save buzztiaan/7260296 to your computer and use it in GitHub Desktop.
Save buzztiaan/7260296 to your computer and use it in GitHub Desktop.
as1107 outputting font browser with rotary encoder interrupt based code
/*
Playing around for midi_touch_v2. part 1 (redo 20)
* AS1107 on SPI0 connected to 8x8 matrix
* Rotary Encoder on ;
- PD0
- PD1 (both sides of the rotary)
- PD2 to one of the switch pins
- rest of the rotary pins to ground
This is a energia sketch ment for a stellaris
Niceness about this;
- interrupt based decoding of the rotaryencoder
- hmm dno, font works?
buZz/NURDspace 10/2013
*/
#include <Energia.h>
#include <SPI.h>
#include "EnergiaMax7219.h"
#include "font2.h"
EnergiaMax7219 ledmatrix;
uint32_t numberOfCharacters = sizeof(font) / 8, startingIndex;
static boolean rotating=false;
boolean A_set = false;
boolean B_set = false;
volatile unsigned int encoderpos = 0;
unsigned int lastReportedPos = 1;
volatile long lastDebounceTime = 0;
volatile long debounceDelay = 5;
#define encoderpinA PD_0
#define encoderpinB PD_1
#define encoderClick PD_2
volatile int state = LOW;
volatile int redraw = HIGH;
void setup()
{
// put your setup code here, to run once:
ledmatrix.Initialize(DISPLAY_TEST_OFF, 0x6);
pinMode(encoderpinA, INPUT_PULLUP);
pinMode(encoderpinB, INPUT_PULLUP);
pinMode(encoderClick, INPUT_PULLUP);
attachInterrupt(encoderpinA, doencoderA, CHANGE);
attachInterrupt(encoderpinB, doencoderB, CHANGE);
attachInterrupt(encoderClick, togglestate, FALLING);
}
void matrixCharacterWrite(uint8_t* data,int invert)
{
uint8_t j = 0;
while(j < 8)
{
if (!invert) {
ledmatrix.Write(_max7219_register_digit_0 + j, *(data + j));
} else {
ledmatrix.Write(_max7219_register_digit_0 + j, ~*(data + j));
}
j++;
}
}
void loop()
{
rotating = true;
if((lastReportedPos != encoderpos) || (redraw)) {
encoderpos = constrain(encoderpos,0,numberOfCharacters);
matrixCharacterWrite(&font[encoderpos*8],state);
lastReportedPos = encoderpos;
redraw = 0;
}
}
void doencoderA(){
if ( rotating ) delay (debounceDelay);
if( digitalRead(encoderpinA) != A_set ) {
A_set = !A_set;
if ( A_set && !B_set ) encoderpos += 1;
rotating = false;
}
}
void doencoderB(){
if ( rotating ) delay (debounceDelay);
if( digitalRead(encoderpinB) != B_set ) {
B_set = !B_set;
if( B_set && !A_set ) encoderpos -= 1;
rotating = false;
}
}
void togglestate()
{
if ( rotating ) delay (debounceDelay);
digitalRead(encoderClick);
state = !state;
redraw = HIGH;
rotating = false;
}
#ifndef FONT_H_
#define FONT_H_
uint8_t font[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3E, 0x41, 0x55, 0x41, 0x55, 0x49, 0x3E,
0x00, 0x3E, 0x7F, 0x6B, 0x7F, 0x6B, 0x77, 0x3E,
0x00, 0x22, 0x77, 0x7F, 0x7F, 0x3E, 0x1C, 0x08,
0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08,
0x00, 0x08, 0x1C, 0x2A, 0x7F, 0x2A, 0x08, 0x1C,
0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x08, 0x1C,
0x00, 0x00, 0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00,
0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0xC1, 0xE3, 0xFF,
0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00,
0xFF, 0xFF, 0xE3, 0xDD, 0xDD, 0xDD, 0xE3, 0xFF,
0x00, 0x0F, 0x03, 0x05, 0x39, 0x48, 0x48, 0x30,
0x00, 0x08, 0x3E, 0x08, 0x1C, 0x22, 0x22, 0x1C,
0x00, 0x18, 0x14, 0x10, 0x10, 0x30, 0x70, 0x60,
0x00, 0x0F, 0x19, 0x11, 0x13, 0x37, 0x76, 0x60,
0x00, 0x08, 0x2A, 0x1C, 0x77, 0x1C, 0x2A, 0x08,
0x00, 0x60, 0x78, 0x7E, 0x7F, 0x7E, 0x78, 0x60,
0x00, 0x03, 0x0F, 0x3F, 0x7F, 0x3F, 0x0F, 0x03,
0x00, 0x08, 0x1C, 0x2A, 0x08, 0x2A, 0x1C, 0x08,
0x00, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66,
0x00, 0x3F, 0x65, 0x65, 0x3D, 0x05, 0x05, 0x05,
0x00, 0x0C, 0x32, 0x48, 0x24, 0x12, 0x4C, 0x30,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F,
0x00, 0x08, 0x1C, 0x2A, 0x08, 0x2A, 0x1C, 0x3E,
0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x1C, 0x1C, 0x1C,
0x00, 0x1C, 0x1C, 0x1C, 0x7F, 0x3E, 0x1C, 0x08,
0x00, 0x08, 0x0C, 0x7E, 0x7F, 0x7E, 0x0C, 0x08,
0x00, 0x08, 0x18, 0x3F, 0x7F, 0x3F, 0x18, 0x08,
0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x7F, 0x7F,
0x00, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x3E, 0x7F, 0x7F,
0x00, 0x7F, 0x7F, 0x3E, 0x3E, 0x1C, 0x1C, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18,
0x00, 0x36, 0x36, 0x14, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36,
0x00, 0x08, 0x1E, 0x20, 0x1C, 0x02, 0x3C, 0x08,
0x00, 0x60, 0x66, 0x0C, 0x18, 0x30, 0x66, 0x06,
0x00, 0x3C, 0x66, 0x3C, 0x28, 0x65, 0x66, 0x3F,
0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60,
0x00, 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06,
0x00, 0x00, 0x36, 0x1C, 0x7F, 0x1C, 0x36, 0x00,
0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x60,
0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60,
0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00,
0x00, 0x3C, 0x66, 0x6E, 0x76, 0x66, 0x66, 0x3C,
0x00, 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E,
0x00, 0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E,
0x00, 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C,
0x00, 0x0C, 0x1C, 0x2C, 0x4C, 0x7E, 0x0C, 0x0C,
0x00, 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C,
0x00, 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C,
0x00, 0x7E, 0x66, 0x0C, 0x0C, 0x18, 0x18, 0x18,
0x00, 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C,
0x00, 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C,
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30,
0x00, 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06,
0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60,
0x00, 0x3C, 0x66, 0x06, 0x1C, 0x18, 0x00, 0x18,
0x00, 0x38, 0x44, 0x5C, 0x58, 0x42, 0x3C, 0x00,
0x00, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66,
0x00, 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C,
0x00, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C,
0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C,
0x00, 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E,
0x00, 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60,
0x00, 0x3C, 0x66, 0x60, 0x60, 0x6E, 0x66, 0x3C,
0x00, 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66,
0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C,
0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x6C, 0x6C, 0x38,
0x00, 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66,
0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E,
0x00, 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63,
0x00, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x63, 0x63,
0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C,
0x00, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60,
0x00, 0x3C, 0x66, 0x66, 0x66, 0x6E, 0x3C, 0x06,
0x00, 0x7C, 0x66, 0x66, 0x7C, 0x78, 0x6C, 0x66,
0x00, 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C,
0x00, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18,
0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3E,
0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18,
0x00, 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63,
0x00, 0x63, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x63,
0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18,
0x00, 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E,
0x00, 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E,
0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00,
0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
0x00, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E,
0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C,
0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C,
0x00, 0x06, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E,
0x00, 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C,
0x00, 0x1C, 0x36, 0x30, 0x30, 0x7C, 0x30, 0x30,
0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x3C,
0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66,
0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C,
0x00, 0x0C, 0x00, 0x0C, 0x0C, 0x6C, 0x6C, 0x38,
0x00, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66,
0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x63, 0x77, 0x7F, 0x6B, 0x6B,
0x00, 0x00, 0x00, 0x7C, 0x7E, 0x66, 0x66, 0x66,
0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C,
0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60,
0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x3C, 0x0D, 0x0F,
0x00, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x60, 0x60,
0x00, 0x00, 0x00, 0x3E, 0x40, 0x3C, 0x02, 0x7C,
0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E,
0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18,
0x00, 0x00, 0x00, 0x63, 0x6B, 0x6B, 0x6B, 0x3E,
0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66,
0x00, 0x00, 0x00, 0x66, 0x66, 0x3E, 0x06, 0x3C,
0x00, 0x00, 0x00, 0x3C, 0x0C, 0x18, 0x30, 0x3C,
0x00, 0x0E, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0E,
0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18,
0x00, 0x70, 0x18, 0x18, 0x0C, 0x18, 0x18, 0x70,
0x00, 0x00, 0x00, 0x3A, 0x6C, 0x00, 0x00, 0x00,
0x00, 0x08, 0x1C, 0x36, 0x63, 0x41, 0x41, 0x7F
};
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment