Compare commits
6 Commits
7e05b6e4ae
...
81b8bab3b9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81b8bab3b9 | ||
|
|
cd96bfbcba | ||
|
|
08f0c7fb8a | ||
|
|
73104c90c8 | ||
|
|
a15766cdea | ||
|
|
a7e19b5b8e |
60
code/main.c
60
code/main.c
@ -25,7 +25,9 @@
|
||||
|
||||
// Rotary Encoder Parameters
|
||||
#define ROT_PULSE_COUNT 12
|
||||
#define ROT_WHEEL_RAD 12
|
||||
#define ROT_DETENTS 24
|
||||
#define ROT_WHEEL_RAD 13.875
|
||||
//#define ROT_REVERSE
|
||||
|
||||
// Input masks
|
||||
#define BUTTON_V 0x01
|
||||
@ -39,7 +41,7 @@
|
||||
#define INPUT_MASK (BUTTON_M | ENCODER_M)
|
||||
|
||||
// Event queue macros
|
||||
#define MAX_EVENT_COUNT 16
|
||||
#define MAX_EVENT_COUNT 64
|
||||
#define PTR_INC(x) ((x) = events + ((((x) - events) + 1) % MAX_EVENT_COUNT))
|
||||
|
||||
enum event_e
|
||||
@ -66,6 +68,7 @@ uint8_t *event_write = events;
|
||||
|
||||
uint32_t ms = 0;
|
||||
|
||||
#ifdef ROT_REVERSE
|
||||
const uint8_t PROGMEM rot_table[16] =
|
||||
{
|
||||
EVENT_NONE, EVENT_ROT_CCW, EVENT_ROT_CW, EVENT_NONE,
|
||||
@ -73,6 +76,15 @@ const uint8_t PROGMEM rot_table[16] =
|
||||
EVENT_ROT_CCW, EVENT_NONE, EVENT_NONE, EVENT_ROT_CW,
|
||||
EVENT_NONE, EVENT_ROT_CW, EVENT_ROT_CCW, EVENT_NONE
|
||||
};
|
||||
#else
|
||||
const uint8_t PROGMEM rot_table[16] =
|
||||
{
|
||||
EVENT_NONE, EVENT_ROT_CW, EVENT_ROT_CCW, EVENT_NONE,
|
||||
EVENT_ROT_CCW, EVENT_NONE, EVENT_NONE, EVENT_ROT_CW,
|
||||
EVENT_ROT_CW, EVENT_NONE, EVENT_NONE, EVENT_ROT_CCW,
|
||||
EVENT_NONE, EVENT_ROT_CCW, EVENT_ROT_CW, EVENT_NONE
|
||||
};
|
||||
#endif
|
||||
|
||||
const uint8_t PROGMEM unfold_table[16] =
|
||||
{
|
||||
@ -297,21 +309,10 @@ int main()
|
||||
}
|
||||
}
|
||||
|
||||
if (rot_value / 2 != 0)
|
||||
if (rot_value / (ROT_PULSE_COUNT * 4 / ROT_DETENTS) != 0)
|
||||
{
|
||||
int8_t rot_abs;
|
||||
int8_t adjust;
|
||||
|
||||
rot_abs = rot_value;
|
||||
adjust = 1;
|
||||
if (rot_value < 0)
|
||||
{
|
||||
rot_abs = -rot_abs;
|
||||
adjust = -1;
|
||||
}
|
||||
|
||||
rot_value -= (rot_abs * adjust);
|
||||
count_value_fine += (rot_coeff * adjust * rot_abs);
|
||||
count_value_fine += rot_coeff * rot_value;
|
||||
rot_value = 0;
|
||||
|
||||
if (count_value_fine < 0)
|
||||
{
|
||||
@ -340,7 +341,7 @@ int main()
|
||||
}
|
||||
count_value = (uint32_t) count_value_fine;
|
||||
|
||||
if (0 != sleep_when_ms)
|
||||
if ((0 != sleep_when_ms) && (sleep_when_ms > ms))
|
||||
{
|
||||
needs_update = 1;
|
||||
}
|
||||
@ -360,6 +361,7 @@ int main()
|
||||
{
|
||||
display_enable(0);
|
||||
do_sleep();
|
||||
sleep_when_ms = 1;
|
||||
}
|
||||
|
||||
// STATE_COUNTING
|
||||
@ -604,7 +606,19 @@ void display_init()
|
||||
|
||||
void display_enable(uint8_t en)
|
||||
{
|
||||
display_send_cmd(0xAE | (en & 0x01));
|
||||
static uint8_t old_state = 1;
|
||||
|
||||
if (en != 0)
|
||||
{
|
||||
en = 1;
|
||||
}
|
||||
|
||||
if (en != old_state)
|
||||
{
|
||||
display_send_cmd(0xAE | (en & 0x01));
|
||||
}
|
||||
|
||||
old_state = en;
|
||||
}
|
||||
|
||||
void get_symbol16(uint8_t index, uint8_t *out)
|
||||
@ -925,8 +939,8 @@ void write_eeprom_val(uint16_t idx, uint32_t value, uint8_t dir)
|
||||
|
||||
void do_sleep()
|
||||
{
|
||||
// Disable clock to Timer1, USI, ADC
|
||||
PRR |= (1 << PRTIM1) | (1 << PRUSI) | (1 << PRADC);
|
||||
// Disable clock to USI, ADC
|
||||
PRR |= (1 << PRUSI) | (1 << PRADC);
|
||||
|
||||
// Enable sleep
|
||||
MCUCR |= (1 << SE);
|
||||
@ -936,14 +950,14 @@ void do_sleep()
|
||||
|
||||
// Reset ms counter
|
||||
cli();
|
||||
ms = 0;
|
||||
ms = 2;
|
||||
sei();
|
||||
|
||||
// Disable sleep
|
||||
MCUCR &= ~(1 << SE);
|
||||
|
||||
// Enable clock to Timer1, USI, ADC
|
||||
PRR &= ~((1 << PRTIM1) | (1 << PRUSI) | (1 << PRADC));
|
||||
// Enable clock to USI, ADC
|
||||
PRR &= ~((1 << PRUSI) | (1 << PRADC));
|
||||
}
|
||||
|
||||
void update_display(uint32_t value, uint32_t highlight, uint8_t dir, uint8_t dir_highlight)
|
||||
|
||||
@ -1,11 +1,15 @@
|
||||
x_size = 75;
|
||||
y_size = 40;
|
||||
z_size = 6;
|
||||
z_size = 9;
|
||||
pcb_x = 70;
|
||||
pcb_y = 35;
|
||||
wall_size = 1;
|
||||
hole_rad = 2;
|
||||
filament_x = 10;
|
||||
hole_rad = 1.5;
|
||||
filament_x = 57.5 - pcb_x/2 - 13 - 1;
|
||||
filament_size = 2;
|
||||
|
||||
difference()
|
||||
{
|
||||
union()
|
||||
{
|
||||
difference()
|
||||
@ -19,17 +23,12 @@ union()
|
||||
cube([x_size - 2 * wall_size, y_size - 2 * wall_size, z_size], center = true);
|
||||
}
|
||||
|
||||
// Fillament Hole
|
||||
translate([filament_x, 0, wall_size])
|
||||
{
|
||||
cube([filament_size, y_size + 1, z_size], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// Hole Mounts
|
||||
for (i = [-1:1:1])
|
||||
// Bottom Hole Mounts
|
||||
for (i = [-1:2:1])
|
||||
{
|
||||
translate([i * 32, ((i == 0) ? 1 : 0) * 29 - 14.5, 0])
|
||||
translate([i * (pcb_x/2 - 3) - 1, -(pcb_y/2 - 3) - 1, -0.5])
|
||||
{
|
||||
difference()
|
||||
{
|
||||
@ -42,22 +41,62 @@ union()
|
||||
}
|
||||
}
|
||||
|
||||
// Bearing Mount
|
||||
translate([3, 0, 0])
|
||||
{
|
||||
cylinder(z_size, 2, 2, $fn = 360, center = true);
|
||||
}
|
||||
|
||||
// Left Walls for fillament
|
||||
for (i = [-1:2:1])
|
||||
{
|
||||
translate([filament_x + i * ((filament_size + wall_size) / 2), 0, 0])
|
||||
// Top Hole Mount
|
||||
translate([(41 - pcb_x/2) - 1, pcb_y/2 - 3 - 1, -0.5])
|
||||
difference()
|
||||
{
|
||||
difference()
|
||||
cylinder(z_size - 1, hole_rad + 1, hole_rad + 1, $fn = 360, center = true);
|
||||
translate([0, 0, wall_size])
|
||||
{
|
||||
cube([wall_size, y_size, z_size - 1], center = true);
|
||||
cube([wall_size + 1, 5.625 + i * 0.875, z_size], center = true);
|
||||
cylinder(z_size - 1, hole_rad, hole_rad, $fn = 360, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// Fillament Block
|
||||
translate([filament_x, 0, -0.5])
|
||||
{
|
||||
difference()
|
||||
{
|
||||
cube([filament_size + wall_size * 2, y_size, z_size - 1], center = true);
|
||||
translate([13, pcb_y/2 - 12.5 - 1, 0])
|
||||
{
|
||||
cylinder(z_size, 13.5, 13.5, $fn = 360, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Bottom Holes
|
||||
for (i = [-1:2:1])
|
||||
{
|
||||
translate([i * (pcb_x/2 - 3) - 1, -(pcb_y/2 - 3) - 1, -z_size/2 + 1])
|
||||
{
|
||||
cylinder(2, 2.8, hole_rad, $fn = 360, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// Top Hole
|
||||
translate([(41 - pcb_x/2) - 1, pcb_y / 2 - 3 - 1, -z_size/2 + 1])
|
||||
{
|
||||
cylinder(2, 2.8, hole_rad, $fn = 360, center = true);
|
||||
}
|
||||
|
||||
// Filament Hole
|
||||
translate([filament_x, 0, -0.5])
|
||||
{
|
||||
rotate([90, 0, 0])
|
||||
{
|
||||
cylinder(y_size + 1, filament_size/2, filament_size/2, $fn = 360, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// Temp
|
||||
*translate([-x_size/2, y_size/5, 0])
|
||||
{
|
||||
cube([x_size, y_size, z_size], center = true);
|
||||
}
|
||||
*translate([x_size/1.5, y_size/5, 0])
|
||||
{
|
||||
cube([x_size, y_size, z_size], center = true);
|
||||
}
|
||||
}
|
||||
69
openscad/Front.scad
Normal file
69
openscad/Front.scad
Normal file
@ -0,0 +1,69 @@
|
||||
x_size = 75;
|
||||
y_size = 40;
|
||||
z_size = 13;
|
||||
pcb_x = 70;
|
||||
pcb_y = 35;
|
||||
wall_size = 1;
|
||||
hole_rad = 2;
|
||||
screen_x = 30;
|
||||
screen_y = 12;
|
||||
|
||||
union()
|
||||
{
|
||||
difference()
|
||||
{
|
||||
// Main
|
||||
cube([x_size, y_size, z_size], center = true);
|
||||
|
||||
// Hollow
|
||||
translate([0, 0, wall_size])
|
||||
{
|
||||
cube([x_size - 2 * wall_size, y_size - 2 * wall_size, z_size], center = true);
|
||||
}
|
||||
|
||||
// Display Cutout
|
||||
translate([pcb_x/2 - screen_x/2 + 1 - 5, pcb_y/2 - screen_y/2 - 1, 0])
|
||||
{
|
||||
cube([screen_x, screen_y, z_size + 1], center = true);
|
||||
}
|
||||
|
||||
// Button Cutout
|
||||
translate([-16 + 1, -12.5 - 1, 0])
|
||||
{
|
||||
cube([8, 8, z_size + 1], center = true);
|
||||
}
|
||||
|
||||
// Switch Cutout
|
||||
translate([0 + 1, -y_size/2 + wall_size/2, z_size/2 - 6/2])
|
||||
{
|
||||
cube([5, wall_size * 2, 6], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// Bottom Hole Mounts
|
||||
for (i = [-1:2:1])
|
||||
{
|
||||
translate([i * (pcb_x/2 - 3) + 1, -(pcb_y/2 - 3) - 1, 0])
|
||||
{
|
||||
difference()
|
||||
{
|
||||
cylinder(z_size, hole_rad + 1, hole_rad + 1, $fn = 360, center = true);
|
||||
translate([0, 0, wall_size])
|
||||
{
|
||||
cylinder(z_size, hole_rad, hole_rad, $fn = 360, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Top Hole Mount
|
||||
translate([-((41 - pcb_x/2)) + 1, pcb_y/2 - 3 - 1, 0])
|
||||
difference()
|
||||
{
|
||||
cylinder(z_size, hole_rad + 1, hole_rad + 1, $fn = 360, center = true);
|
||||
translate([0, 0, wall_size])
|
||||
{
|
||||
cylinder(z_size, hole_rad, hole_rad, $fn = 360, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,25 +1,20 @@
|
||||
seg = 360;
|
||||
seg2 = 60;
|
||||
outer = 12;
|
||||
height = 5;
|
||||
height = 6;
|
||||
rad = 1;
|
||||
dist = 1.5;
|
||||
dist = 4;
|
||||
|
||||
rotate_extrude($fn = seg)
|
||||
difference()
|
||||
{
|
||||
square([outer, height]);
|
||||
translate([0, 1.5, 0])
|
||||
translate([0, height - 3.5, 0])
|
||||
{
|
||||
square([10.5, height]);
|
||||
square([10.5, 3.5]);
|
||||
}
|
||||
|
||||
translate([12, height/2 + dist, 0])
|
||||
{
|
||||
circle(rad, $fn = seg);
|
||||
}
|
||||
|
||||
translate([12, height/2 - dist, 0])
|
||||
translate([outer, height - dist, 0])
|
||||
{
|
||||
circle(rad, $fn = seg);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user