adding digistump encoder arduino code
Former-commit-id: ae89e87ec766ff19f1c3ec92934430065a9205b6
This commit is contained in:
parent
3ea571b62c
commit
b10d5eaca2
|
@ -0,0 +1,92 @@
|
||||||
|
#include "DigiKeyboard.h"
|
||||||
|
|
||||||
|
#define encoder0PinA 0
|
||||||
|
#define encoder0PinB 2
|
||||||
|
|
||||||
|
#define aIn //5 is 0 on the digistump
|
||||||
|
|
||||||
|
#define avgPeriod 100
|
||||||
|
|
||||||
|
static boolean rotating=false;
|
||||||
|
|
||||||
|
float avgRead = 0;
|
||||||
|
float lastRead = 0;
|
||||||
|
unsigned char avgCount = 0;
|
||||||
|
|
||||||
|
float buttonState = 0;
|
||||||
|
|
||||||
|
bool lastButtonState = 0;
|
||||||
|
|
||||||
|
int rotIncrement = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
|
||||||
|
pinMode(encoder0PinA, INPUT);
|
||||||
|
digitalWrite(encoder0PinA, HIGH);
|
||||||
|
pinMode(encoder0PinB, INPUT);
|
||||||
|
digitalWrite(encoder0PinB, HIGH);
|
||||||
|
|
||||||
|
pinMode(1, INPUT);
|
||||||
|
digitalWrite(1, HIGH);
|
||||||
|
|
||||||
|
attachInterrupt(0, rotEncoder, CHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rotEncoder(){
|
||||||
|
rotating=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
DigiKeyboard.update();
|
||||||
|
|
||||||
|
avgRead += (float)analogRead(0) / avgPeriod;
|
||||||
|
avgCount++;
|
||||||
|
|
||||||
|
buttonState += (float)digitalRead(1) / avgPeriod;
|
||||||
|
|
||||||
|
if(avgCount >= avgPeriod) {
|
||||||
|
if(abs(avgRead - lastRead) >= 1) {
|
||||||
|
DigiKeyboard.print(String((int)avgRead, HEX));
|
||||||
|
DigiKeyboard.println("");
|
||||||
|
lastRead = avgRead;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((buttonState > .5) != lastButtonState) {
|
||||||
|
lastButtonState = (buttonState > .5);
|
||||||
|
|
||||||
|
if(lastButtonState) {
|
||||||
|
DigiKeyboard.print("n");
|
||||||
|
} else {
|
||||||
|
DigiKeyboard.print("m");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
avgRead = 0;
|
||||||
|
avgCount = 0;
|
||||||
|
buttonState = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
while(rotating) {
|
||||||
|
delay(2);
|
||||||
|
|
||||||
|
if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) {
|
||||||
|
rotIncrement++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rotIncrement--;
|
||||||
|
}
|
||||||
|
rotating=false; // Reset the flag back to false
|
||||||
|
}
|
||||||
|
|
||||||
|
if(rotIncrement >= 2) {
|
||||||
|
DigiKeyboard.print("z");
|
||||||
|
rotIncrement = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(rotIncrement <= -2) {
|
||||||
|
DigiKeyboard.print("x");
|
||||||
|
rotIncrement = 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,125 @@
|
||||||
|
#include "DigiKeyboard.h"
|
||||||
|
|
||||||
|
#define encoderPinA 0
|
||||||
|
#define encoderPinB 2
|
||||||
|
#define selectPin 1
|
||||||
|
#define sqlPin 0 //5 is 0 on the digistump
|
||||||
|
|
||||||
|
#define bufferPeriod 100
|
||||||
|
|
||||||
|
float encoderPinABuffer = 0;
|
||||||
|
float encoderPinBBuffer = 0;
|
||||||
|
float selectPinBuffer = 0;
|
||||||
|
float sqlPinBuffer = 0;
|
||||||
|
|
||||||
|
int encoderCounter = 0;
|
||||||
|
|
||||||
|
bool encoderPinALast = 0;
|
||||||
|
bool encoderPinBLast = 0;
|
||||||
|
bool selectPinLast = 0;
|
||||||
|
float sqlPinLast = 0;
|
||||||
|
|
||||||
|
int bufferCounter = 0;
|
||||||
|
|
||||||
|
int8_t lookup_table[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};
|
||||||
|
|
||||||
|
uint8_t index = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
|
||||||
|
pinMode(encoderPinA, INPUT);
|
||||||
|
digitalWrite(encoderPinA, HIGH);
|
||||||
|
pinMode(encoderPinB, INPUT);
|
||||||
|
digitalWrite(encoderPinB, HIGH);
|
||||||
|
|
||||||
|
pinMode(selectPin, INPUT);
|
||||||
|
digitalWrite(selectPin, HIGH);
|
||||||
|
|
||||||
|
pinMode(sqlPin, INPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
|
||||||
|
//update buffers
|
||||||
|
|
||||||
|
//encoderPinABuffer += (float)digitalRead(encoderPinA) / bufferPeriod;
|
||||||
|
//encoderPinBBuffer += (float)digitalRead(encoderPinB) / bufferPeriod;
|
||||||
|
selectPinBuffer += (float)digitalRead(selectPin) / bufferPeriod;
|
||||||
|
sqlPinBuffer += (float)analogRead(sqlPin) / bufferPeriod;
|
||||||
|
|
||||||
|
bufferCounter++;
|
||||||
|
|
||||||
|
bool encoderPinAState = (bool)digitalRead(encoderPinA);
|
||||||
|
bool encoderPinBState = (bool)digitalRead(encoderPinB);
|
||||||
|
|
||||||
|
if((encoderPinAState != encoderPinALast) | (encoderPinBState != encoderPinBLast)) {
|
||||||
|
index = (index << 2) & 0b1100;
|
||||||
|
index = index | ((encoderPinAState << 1) + encoderPinBState);
|
||||||
|
|
||||||
|
encoderCounter += lookup_table[index & 0b1111];
|
||||||
|
|
||||||
|
if(encoderCounter > 2) {
|
||||||
|
DigiKeyboard.print("z");
|
||||||
|
encoderCounter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(encoderCounter < -2) {
|
||||||
|
DigiKeyboard.print("x");
|
||||||
|
encoderCounter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
encoderPinALast = encoderPinAState;
|
||||||
|
encoderPinBLast = encoderPinBState;
|
||||||
|
}
|
||||||
|
|
||||||
|
//check pin values
|
||||||
|
if(bufferCounter > bufferPeriod) {
|
||||||
|
//usb keepalive
|
||||||
|
DigiKeyboard.update();
|
||||||
|
|
||||||
|
//bool encoderPinAState = encoderPinABuffer > .5;
|
||||||
|
//bool encoderPinBState = encoderPinBBuffer > .5;
|
||||||
|
bool selectPinState = selectPinBuffer > .5;
|
||||||
|
|
||||||
|
//check encoder pins nd transmit
|
||||||
|
// if(encoderPinAState != encoderPinALast || encoderPinBState != encoderPinBLast) {
|
||||||
|
//
|
||||||
|
// uint8_t index = (encoderPinALast << 4) + (encoderPinBLast << 3) + (encoderPinAState << 1) + encoderPinBState;
|
||||||
|
//
|
||||||
|
// //encoderDetentCounter += lookup_table[index];
|
||||||
|
//
|
||||||
|
// if(lookup_table[index] > 0) {
|
||||||
|
// DigiKeyboard.print("z");
|
||||||
|
// } else if (lookup_table[index] < 0) {
|
||||||
|
// DigiKeyboard.print("x");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// encoderPinALast = encoderPinAState;
|
||||||
|
// encoderPinBLast = encoderPinBState;
|
||||||
|
// }
|
||||||
|
|
||||||
|
//check select pin and transmit
|
||||||
|
if(selectPinState != selectPinLast) {
|
||||||
|
selectPinLast = selectPinState;
|
||||||
|
if(selectPinLast) {
|
||||||
|
DigiKeyboard.print("n");
|
||||||
|
} else {
|
||||||
|
DigiKeyboard.print("m");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//check squelch knob and transmit
|
||||||
|
if(abs(sqlPinBuffer - sqlPinLast) >= 1) {
|
||||||
|
DigiKeyboard.print(String((int)sqlPinBuffer, HEX));
|
||||||
|
DigiKeyboard.println("");
|
||||||
|
sqlPinLast = sqlPinBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset buffers
|
||||||
|
encoderPinABuffer = 0;
|
||||||
|
encoderPinBBuffer = 0;
|
||||||
|
selectPinBuffer = 0;
|
||||||
|
sqlPinBuffer = 0;
|
||||||
|
bufferCounter = 0;
|
||||||
|
}
|
||||||
|
}
|
1
digistump_firmware/libraries/readme.txt
Normal file
1
digistump_firmware/libraries/readme.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
For information on installing libraries, see: http://www.arduino.cc/en/Guide/Libraries
|
60
grid_pc.py
Executable file
60
grid_pc.py
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
import os
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
#Colours
|
||||||
|
WHITE = (255,255,255)
|
||||||
|
|
||||||
|
#os.putenv('SDL_FBDEV', '/dev/fb1')
|
||||||
|
pygame.init()
|
||||||
|
pygame.mouse.set_visible(False)
|
||||||
|
lcd = pygame.display.set_mode((320, 240))
|
||||||
|
|
||||||
|
font_big = pygame.font.Font(None, 100)
|
||||||
|
font_small = pygame.font.Font(None, 18)
|
||||||
|
|
||||||
|
lcd.fill((0,0,0))
|
||||||
|
pygame.display.update()
|
||||||
|
|
||||||
|
top_1 = (0,0,80,40);
|
||||||
|
top_2 = (80,0,80,40);
|
||||||
|
top_3 = (160,0,80,40);
|
||||||
|
top_4 = (240,0,80,40);
|
||||||
|
|
||||||
|
pygame.draw.rect(lcd, (100,100,100), top_1, 2)
|
||||||
|
pygame.draw.rect(lcd, (100,100,100), top_2, 2)
|
||||||
|
pygame.draw.rect(lcd, (100,100,100), top_3, 2)
|
||||||
|
pygame.draw.rect(lcd, (100,100,100), top_4, 2)
|
||||||
|
|
||||||
|
text_surface = font_small.render('DEMOD', True, WHITE)
|
||||||
|
rect = text_surface.get_rect(center=(40, 20))
|
||||||
|
lcd.blit(text_surface, rect)
|
||||||
|
|
||||||
|
text_surface = font_small.render('SQLCH', True, WHITE)
|
||||||
|
rect = text_surface.get_rect(center=(120, 20))
|
||||||
|
lcd.blit(text_surface, rect)
|
||||||
|
|
||||||
|
text_surface = font_small.render('GAIN', True, WHITE)
|
||||||
|
rect = text_surface.get_rect(center=(200, 20))
|
||||||
|
lcd.blit(text_surface, rect)
|
||||||
|
|
||||||
|
text_surface = font_small.render('MENU', True, WHITE)
|
||||||
|
rect = text_surface.get_rect(center=(280, 20))
|
||||||
|
lcd.blit(text_surface, rect)
|
||||||
|
|
||||||
|
|
||||||
|
sql_gain_box = (0,40,32,200)
|
||||||
|
|
||||||
|
pygame.draw.rect(lcd, (10,10,10), sql_gain_box, 2)
|
||||||
|
|
||||||
|
for x in range(0,6):
|
||||||
|
pygame.draw.rect(lcd, (10,10,10), (32 + x * 48,40,48,80),2)
|
||||||
|
text_surface = font_big.render('%d'%x, True, WHITE)
|
||||||
|
rect = text_surface.get_rect(center=(32 + (x + .5) * 48, 80))
|
||||||
|
lcd.blit(text_surface, rect)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
pygame.display.update()
|
||||||
|
sleep(1)
|
Loading…
Reference in a new issue