Beispiel #1
0
void awp_draw_reel(int rno)
{
	int x = rno + 1;
	char rg[16];

	sprintf(rg,"reel%d", x);
	reelpos[rno] = stepper_get_position(rno);
	if (reelpos[rno] == output_get_value(rg))
	{
		// Not moved, no need to update.
	}
	else
	{
		output_set_value(rg,(reelpos[rno]));

		// if the reel isn't configured don't do this, otherwise you'll get DIV0
		if (stepper_get_max(rno))
		{
			sprintf(rg,"sreel%d", x); // our new scrolling reels are called 'sreel'
			// normalize the value
			int sreelpos = (reelpos[rno] * 0x10000) / stepper_get_max(rno);

			output_set_value(rg,sreelpos);
		}
	}
}
Beispiel #2
0
// Report the current position of the stepper
void
command_stepper_get_position(uint32_t *args)
{
    uint8_t oid = args[0];
    struct stepper *s = stepper_oid_lookup(oid);
    irq_disable();
    uint32_t position = stepper_get_position(s);
    irq_enable();
    sendf("stepper_position oid=%c pos=%i", oid, position - POSITION_BIAS);
}
Beispiel #3
0
void awp_draw_reel(int rno)
{
	int rsteps = steps[rno];
	int rsymbols = symbols[rno];
	int m;
	int x = rno + 1;
	char rg[16], rga[16], rgb[16];

	sprintf(rg,"reel%d", x);
	reelpos[rno] = stepper_get_position(rno);
	if (reelpos[rno] == output_get_value(rg))
	{
		// Not moved, no need to update.
	}
	else
	{
		reelpos[rno] = stepper_get_position(rno)%(stepper_get_max(rno)-1);
		for ( m = 0; m < (rsymbols-1); m++ )
		{
			{
				sprintf(rga,"reel%da%d", x, m);
				output_set_value(rga,(reelpos[rno] + rsteps * m)%stepper_get_max(rno));
			}

			{
				if ((reelpos[rno] - rsteps * m) < 0)
				{
					sprintf(rgb,"reel%db%d", x, m);
					output_set_value(rgb,(reelpos[rno] - (rsteps * m - stepper_get_max(rno))));
				}
				else
				{
					sprintf(rgb,"reel%db%d", x, m);
					output_set_value(rgb,(reelpos[rno] - rsteps * m));
				}
			}
		}
		output_set_value(rg,(reelpos[rno]));
	}
}
Beispiel #4
0
// Stop all moves for a given stepper (used in end stop homing).  IRQs
// must be off.
void
stepper_stop(struct stepper *s)
{
    sched_del_timer(&s->time);
    s->next_step_time = 0;
    s->position = -stepper_get_position(s);
    s->count = 0;
    s->flags = (s->flags & SF_INVERT_STEP) | SF_NEED_RESET;
    gpio_out_write(s->dir_pin, 0);
    gpio_out_write(s->step_pin, s->flags & SF_INVERT_STEP);
    while (s->first) {
        struct stepper_move *next = s->first->next;
        move_free(s->first);
        s->first = next;
    }
}