diff options
| -rw-r--r-- | client/ui_dirc.c | 49 | 
1 files changed, 33 insertions, 16 deletions
diff --git a/client/ui_dirc.c b/client/ui_dirc.c index cddd2c4..61abaf4 100644 --- a/client/ui_dirc.c +++ b/client/ui_dirc.c @@ -25,26 +25,43 @@ int w2_avg(int* samples, unsigned int sample_count) {  	return (int) total;  } -void w2_ui_dirc() { -	static unsigned int idx = 0; -	int ch = 0; -	unsigned int presses = 0; - -	static double drive_l = 0.f; -	static int drive_l_avg[W2_DIRC_SPL] = {0}; +#define W2_DIRC_MOTOR_DRIVER(name) \ +int w2_dirc_motor_##name(unsigned int forward, unsigned int backward) {\ +	static unsigned int idx = 0;\ +	\ +	static double drive = 0.f;\ +	static int drive_avg[W2_DIRC_SPL] = {0};\ +	\ +	drive *= W2_DIRC_MOD;\ +	drive += W2_DIRC_ADD * forward + -W2_DIRC_ADD * backward;\ +	drive = W2_RANGE(-254, drive, 255);\ +	\ +	idx = (idx + 1) % W2_DIRC_SPL;\ +	drive_avg[idx] = (int) W2_RANGE(-254, drive * W2_DIRC_PAD, 255);\ +	\ +	return w2_avg(drive_avg, W2_DIRC_SPL);\ +} +W2_DIRC_MOTOR_DRIVER(l); +W2_DIRC_MOTOR_DRIVER(r); +void w2_ui_dirc() { +	int ch = 0; +	unsigned int lb = 0; +	unsigned int lf = 0; +	unsigned int rb = 0; +	unsigned int rf = 0;  	while ((ch = getch()) != -1) { -		if (ch == 'a') presses++; +		if (ch == 'a' || ch == 's') lb++; +		if (ch == 'q' || ch == 'w') lf++; +		if (ch == 'd' || ch == 's') rb++; +		if (ch == 'e' || ch == 'w') rf++;  	} -	drive_l *= W2_DIRC_MOD; -	drive_l += W2_DIRC_ADD * presses; -	drive_l = W2_MIN(100, drive_l); - -	idx = (idx + 1) % W2_DIRC_SPL; -	drive_l_avg[idx] = (int) W2_MIN(100, drive_l * W2_DIRC_PAD); +	int drive_l = w2_dirc_motor_l(lf, lb); +	int drive_r = w2_dirc_motor_r(rf, rb); -	mvaddstr(4, 0, "drive: "); -	w2_ui_bar_graph(w2_avg(drive_l_avg, W2_DIRC_SPL)); +	char temp[32] = {0}; +	sprintf(temp, "l: %04i, r: %04i", drive_l, drive_r); +	mvaddstr(4, 0, temp);  }  |