#include "pins.h"
-int16_t plate_pos_x = 0,plate_pos_y = 0;
-
-void print_steps_in_mm(int16_t steps) {
- int16_t predot,postdot;
+#define UM_PER_ROUND 3000
+#define STEPS_PER_ROUND 200
+
+int32_t plate_pos_x = 0,plate_pos_y = 0;
+
+int32_t steps_to_um (int32_t steps){
+ return steps*UM_PER_ROUND/STEPS_PER_ROUND;
+}
+
+int32_t um_to_steps (int32_t um){
+ return um*STEPS_PER_ROUND/UM_PER_ROUND;
+}
- predot = steps/24;
- postdot = ((abs(steps)%24)*417)/10;
- uart_print_signed_number(predot,3);
+void print_steps_in_mm(int32_t steps) {
+ int32_t um = steps_to_um(steps);
+ uint16_t predot = abs(um/1000);
+ uint16_t postdot = abs(um%1000);
+ uart_print_sign(steps);
+ uart_print_number(predot,3);
uart_putc('.');
uart_print_number_wlzeros(postdot,3);
-
}
+
+
void pos_report(void){
uart_puts("x_pos: ");
}
- int16_t steps = 0,dest=0;
+ int32_t steps = 0,dest=0;
switch (action) {
case GOTO:
uart_puts("GOTO ");
uart_putc(88+axis);// x or y
uart_putc(' ');
- uart_print_signed_number(predot*num_sign,3);
+ uart_print_sign(num_sign);
+ uart_print_number(predot,3);
uart_putc('.');
uart_print_number_wlzeros(postdot,3);
uart_puts("\r\n");
- dest = num_sign *( predot*24 +(postdot*10)/416);
+ dest = um_to_steps(num_sign*(((int32_t) predot) *1000 + ((int32_t) postdot)));
if (axis == X) {
steps = dest - plate_pos_x; // experimental correction!
uart_puts("MOVE ");
uart_putc(88+axis);// x or y
uart_putc(' ');
- uart_print_signed_number(predot*num_sign,3);
+ uart_print_sign(num_sign);
+ uart_print_number(predot,3);
uart_putc('.');
uart_print_number_wlzeros(postdot,3);
uart_puts("\r\n");
- steps = num_sign *( predot*24 +(postdot*10)/416);
+ steps = um_to_steps(num_sign*(((int32_t) predot) *1000 + ((int32_t) postdot)));
if (axis == X) {
move_plate(steps,0);
void uart_print_number(uint32_t zahl, uint8_t no_digits) {
- my_uitoa(abs(zahl),stringbuffer,no_digits,' ');
+ my_uitoa(zahl,stringbuffer,no_digits,' ');
uart_puts(stringbuffer);
}
void uart_print_number_wlzeros(uint32_t zahl, uint8_t no_digits) {
- my_uitoa(abs(zahl),stringbuffer,no_digits,'0');
+ my_uitoa(zahl,stringbuffer,no_digits,'0');
uart_puts(stringbuffer);
}
-void uart_print_signed_number(uint32_t zahl, uint8_t no_digits) {
+void uart_print_signed_number(int32_t zahl, uint8_t no_digits) {
my_uitoa(abs(zahl),stringbuffer,no_digits,' ');
- if (sign(zahl) < 0) {
+ if (zahl < 0) {
uart_putc('-');
} else {
uart_putc('+');
}
uart_puts(stringbuffer);
+}
+
+void uart_print_sign(int32_t zahl){
+ if (zahl < 0) {
+ uart_putc('-');
+ } else {
+ uart_putc('+');
+ }
}
\ No newline at end of file
-
+// int32_t plate_pos_x = 0,plate_pos_y = 0;
+//
+// int32_t get_plate_pos_x(){
+// return plate_pos_x;
+// }
+// void set_plate_pos_x(int32_t value){
+// plate_pos_x = value;
+// }
+// int32_t get_plate_pos_y(){
+// return plate_pos_x;
+// }
+// void set_plate_pos_y(int32_t value){
+// plate_pos_x = value;
+// }
/* motor stuff */
-uint8_t move_plate(int16_t dx, int16_t dy){
- static int16_t todo_x,todo_y = 0;
+uint8_t move_plate(int32_t dx, int32_t dy){
+ static int32_t todo_x,todo_y = 0;
int8_t signum;
uint8_t busy = 0;
todo_x += dx;