Skip to content
Snippets Groups Projects
Commit 31e020e6 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Changed the Makefiles to avoid deleting the source files when cleaning.

Added an example to control motions when the actions are not linked.
Added a header file with all the motions ID's.
parent 0efed23d
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -51,5 +51,8 @@ download: $(MAIN_OUT_HEX) ...@@ -51,5 +51,8 @@ download: $(MAIN_OUT_HEX)
fw_downloader -d /dev/ttyUSB0 -f ./$(PROJECT).hex -p cm510 fw_downloader -d /dev/ttyUSB0 -f ./$(PROJECT).hex -p cm510
clean: clean:
-rm $(PROJECT).* -rm $(PROJECT).o
-rm $(PROJECT).map
-rm $(PROJECT).elf
-rm $(PROJECT).hex
-rm $(OBJS) -rm $(OBJS)
PROJECT=movements
########################################################
# afegir tots els fitxers que s'han de compilar aquí
########################################################
SOURCES=movements.c mtn_library.c
OBJS=$(SOURCES:.c=.o)
SRC_DIR=./
DEV_DIR=../../dyn_devices/
COMM_DIR=../../communications/
CONT_DIR=../../controllers/
MAN_DIR=../../motion/
CC=avr-gcc
OBJCOPY=avr-objcopy
MMCU=atmega2561
LIBS=$(MAN_DIR)lib/libmotion_manager.a $(CONT_DIR)lib/libcontrollers.a $(COMM_DIR)lib/libcomm.a $(DEV_DIR)lib/libdyn_devices.a
INCLUDE_DIRS=-I$(DEV_DIR)include -I$(COMM_DIR)include -I$(CONT_DIR)include -I$(MAN_DIR)include
CFLAGS=-mmcu=$(MMCU) -Wall -Os $(defines) -DF_CPU=16000000UL -gdwarf-2 -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wstrict-prototypes
LDFLAGS=-mmcu=$(MMCU) -Wl,-Map=$(PROJECT).map -DF_CPU=16000000UL
HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature
.PHONY: all
all: communications dyn_devices controllers motion_manager $(PROJECT).hex
$(PROJECT).hex: $(PROJECT).elf
$(OBJCOPY) -O ihex $(HEX_FLASH_FLAGS) $< $@
$(PROJECT).elf: $(OBJS)
$(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROJECT).elf
%.o:%.c
$(CC) -c $(CFLAGS) $(INCLUDE_DIRS) -o $@ $<
communications:
$(MAKE) -C $(COMM_DIR)
dyn_devices:
$(MAKE) -C $(DEV_DIR)
controllers:
$(MAKE) -C $(CONT_DIR)
motion_manager:
$(MAKE) -C $(MAN_DIR)
download: $(MAIN_OUT_HEX)
fw_downloader -d /dev/ttyUSB0 -f ./$(PROJECT).hex -p cm510
clean:
-rm $(PROJECT).o
-rm $(PROJECT).map
-rm $(PROJECT).elf
-rm $(PROJECT).hex
-rm $(OBJS)
#include <util/delay.h>
#include <stdio.h>
#include "cm510.h"
#include "balance.h"
#include "exp_board.h"
#include "mtn_library.h"
#include <stdlib.h>
typedef enum {wait_start,wait_walk_ready,wait_cmd,walk} main_states;
void user_init(void)
{
serial_console_init(57600);
balance_init();
balance_calibrate_gyro();
balance_enable_gyro();
mtn_lib_init();
mtn_lib_set_start_foot(left_foot);
}
void user_loop(void)
{
static main_states state=wait_start;
switch(state)
{
case wait_start: if(is_button_rising_edge(BTN_START))
{
action_set_page(31);
action_start_page();
state=wait_walk_ready;
}
else
state=wait_start;
printf("state: wait_start\n");
break;
case wait_walk_ready: if(is_action_running())
state=wait_walk_ready;
else
state=wait_cmd;
printf("state: wait_walk_ready\n");
break;
case wait_cmd: if(is_button_rising_edge(BTN_UP))
{
fast_walk_forward();
state=walk;
}
else
state=wait_cmd;
printf("state: wait_cmd\n");
break;
case walk: if(is_button_rising_edge(BTN_DOWN))
mtn_lib_stop_mtn();
if(fast_walk_forward()==0x01)
state=wait_cmd;
else
state=walk;
printf("state: walk\n");
break;
}
}
#include <avr/io.h>
#include "mtn_library.h"
#include "action_id.h"
#include "action.h"
#include <stdio.h>
// private variables
typedef enum {mtn_fwd=0,mtn_bwd=1,mtn_turn_left=2,mtn_turn_right=3,mtn_left=4,mtn_right=5,mtn_fwd_turn_left=6,mtn_fwd_turn_right=7,
mtn_bwd_turn_left=8,mtn_bwd_turn_right=9,mtn_fwd_left=10,mtn_fwd_right=11,mtn_bwd_left=12,mtn_bwd_right=13,
mtn_fast_fwd=14,mtn_fast_bwd=15} mtn_t;
typedef enum {idle,wait_start,wait_middle,wait_end} full_states;
typedef struct{
uint8_t start_l;
uint8_t start_r;
uint8_t middle_l;
uint8_t middle_r;
uint8_t end_l;
uint8_t end_r;
}TPages;
uint8_t mtn_lib_stop;
foot_t mtn_lib_start_foot;
foot_t mtn_lib_current_foot;
TPages mtn_pages[]={{F_S_L,F_S_R,F_M_L,F_M_R,F_E_L,F_E_R},
{B_S_L,B_S_R,B_M_L,B_M_R,B_E_L,B_E_R},
{LT_S_L,LT_S_R,LT_M_L,LT_M_R,LT_E_L,LT_E_R},
{RT_S_L,RT_S_R,RT_M_L,RT_M_R,RT_E_L,RT_E_R},
{L_S_L,L_S_R,L_M_L,L_M_R,L_E_L,L_E_R},
{R_S_L,R_S_R,R_M_L,R_M_R,R_E_L,R_E_R},
{FLT_S_L,FLT_S_R,FLT_M_L,FLT_M_R,FLT_E_L,FLT_E_R},
{FRT_S_L,FRT_S_R,FRT_M_L,FRT_M_R,FRT_E_L,FRT_E_R},
{BLT_S_L,BLT_S_R,BLT_M_L,BLT_M_R,BLT_E_L,BLT_E_R},
{BRT_S_L,BRT_S_R,BRT_M_L,BRT_M_R,BRT_E_L,BRT_E_R},
{FL_S_L,FL_S_R,FL_M_L,FL_M_R,FL_E_L,FL_E_R},
{FR_S_L,FR_S_R,FR_M_L,FR_M_R,FR_E_L,FR_E_R},
{BL_S_L,BL_S_R,BL_M_L,BL_M_R,BL_E_L,BL_E_R},
{BR_S_L,BR_S_R,BR_M_L,BR_M_R,BR_E_L,BR_E_R},
{fst_F_L_S,fst_F_R_S,fst_F_R_L_M,fst_F_L_R_M,fst_F_L_E,fst_F_R_E},
{fst_B_L_S,fst_B_R_S,fst_B_L_M,fst_B_R_M,fst_B_L_E,fst_B_R_E}};
/* private functions */
uint8_t mtn_lib_full(TPages *pages)
{
static full_states state=idle;
uint8_t done=0x00;
switch(state)
{
case idle: if(mtn_lib_start_foot==left_foot)
action_set_page(pages->start_l);
else
action_set_page(pages->start_r);
action_start_page();
mtn_lib_current_foot=mtn_lib_start_foot;
state=wait_start;
break;
case wait_start: if(is_action_running())
state=wait_start;
else
{
if(mtn_lib_stop==0x01)
{
if(mtn_lib_current_foot==left_foot)
{
action_set_page(pages->end_r);
mtn_lib_current_foot=right_foot;
}
else
{
action_set_page(pages->end_l);
mtn_lib_current_foot=left_foot;
}
action_start_page();
state=wait_end;
}
else
{
if(mtn_lib_current_foot==left_foot)
{
action_set_page(pages->middle_r);
mtn_lib_current_foot=right_foot;
}
else
{
action_set_page(pages->middle_l);
mtn_lib_current_foot=left_foot;
}
action_start_page();
state=wait_middle;
}
}
break;
case wait_middle: if(is_action_running())
state=wait_middle;
else
{
if(mtn_lib_stop==0x01)
{
if(mtn_lib_current_foot==left_foot)
{
action_set_page(pages->end_r);
mtn_lib_current_foot=right_foot;
}
else
{
action_set_page(pages->end_l);
mtn_lib_current_foot=left_foot;
}
action_start_page();
state=wait_end;
}
else
{
if(mtn_lib_current_foot==left_foot)
{
action_set_page(pages->middle_r);
mtn_lib_current_foot=right_foot;
}
else
{
action_set_page(pages->middle_l);
mtn_lib_current_foot=left_foot;
}
action_start_page();
state=wait_middle;
}
}
break;
case wait_end: if(is_action_running())
state=wait_end;
else
{
mtn_lib_stop=0x00;
state=idle;
done=0x01;
}
break;
}
return done;
}
uint8_t mtn_lib_left(TPages *pages)
{
static full_states state=idle;
uint8_t done=0x00;
switch(state)
{
case idle: if(mtn_lib_start_foot==left_foot)
action_set_page(pages->start_l);
else
action_set_page(pages->start_r);
action_start_page();
mtn_lib_current_foot=mtn_lib_start_foot;
state=wait_start;
break;
case wait_start: if(is_action_running())
state=wait_start;
else
{
if(mtn_lib_current_foot==left_foot)
{
if(mtn_lib_stop==0x01)
{
action_set_page(pages->end_r);
state=wait_end;
}
else
{
action_set_page(pages->middle_r);
state=wait_middle;
}
mtn_lib_current_foot=right_foot;
action_start_page();
}
else
{
action_set_page(pages->middle_l);
mtn_lib_current_foot=left_foot;
action_start_page();
state=wait_middle;
}
}
break;
case wait_middle: if(is_action_running())
state=wait_middle;
else
{
if(mtn_lib_current_foot==left_foot)
{
if(mtn_lib_stop==0x01)
{
action_set_page(pages->end_r);
state=wait_end;
}
else
{
action_set_page(pages->middle_r);
state=wait_middle;
}
mtn_lib_current_foot=right_foot;
action_start_page();
}
else
{
action_set_page(pages->middle_l);
mtn_lib_current_foot=left_foot;
action_start_page();
state=wait_middle;
}
}
break;
case wait_end: if(is_action_running())
state=wait_end;
else
{
mtn_lib_stop=0x00;
state=idle;
done=0x01;
}
break;
}
return done;
}
uint8_t mtn_lib_right(TPages *pages)
{
static full_states state=idle;
uint8_t done=0x00;
switch(state)
{
case idle: if(mtn_lib_start_foot==left_foot)
action_set_page(pages->start_l);
else
action_set_page(pages->start_r);
action_start_page();
mtn_lib_current_foot=mtn_lib_start_foot;
state=wait_start;
break;
case wait_start: if(is_action_running())
state=wait_start;
else
{
if(mtn_lib_current_foot==right_foot)
{
if(mtn_lib_stop==0x01)
{
action_set_page(pages->end_l);
state=wait_end;
}
else
{
action_set_page(pages->middle_l);
state=wait_middle;
}
mtn_lib_current_foot=left_foot;
action_start_page();
}
else
{
action_set_page(pages->middle_r);
mtn_lib_current_foot=right_foot;
action_start_page();
state=wait_middle;
}
}
break;
case wait_middle: if(is_action_running())
state=wait_middle;
else
{
if(mtn_lib_current_foot==right_foot)
{
if(mtn_lib_stop==0x01)
{
action_set_page(pages->end_l);
state=wait_end;
}
else
{
action_set_page(pages->middle_l);
state=wait_middle;
}
mtn_lib_current_foot=left_foot;
action_start_page();
}
else
{
action_set_page(pages->middle_r);
mtn_lib_current_foot=right_foot;
action_start_page();
state=wait_middle;
}
}
break;
case wait_end: if(is_action_running())
state=wait_end;
else
{
mtn_lib_stop=0x00;
state=idle;
done=0x01;
}
break;
}
return done;
}
/* public functions */
void mtn_lib_init(void)
{
mtn_lib_stop=0x00;
mtn_lib_start_foot=left_foot;
mtn_lib_current_foot=left_foot;
}
void mtn_lib_stop_mtn(void)
{
mtn_lib_stop=0x01;
}
void mtn_lib_set_start_foot(foot_t foot)
{
mtn_lib_start_foot=foot;
}
uint8_t walk_forward(void)
{
return mtn_lib_full(&mtn_pages[mtn_fwd]);
}
uint8_t walk_backward(void)
{
return mtn_lib_full(&mtn_pages[mtn_bwd]);
}
uint8_t turn_left(void)
{
return mtn_lib_left(&mtn_pages[mtn_turn_left]);
}
uint8_t turn_right(void)
{
return mtn_lib_right(&mtn_pages[mtn_turn_right]);
}
uint8_t walk_left(void)
{
return mtn_lib_left(&mtn_pages[mtn_left]);
}
uint8_t walk_right(void)
{
return mtn_lib_right(&mtn_pages[mtn_right]);
}
uint8_t walk_forward_turn_left(void)
{
return mtn_lib_left(&mtn_pages[mtn_fwd_turn_left]);
}
uint8_t walk_forward_turn_right(void)
{
return mtn_lib_right(&mtn_pages[mtn_fwd_turn_right]);
}
uint8_t walk_backward_turn_left(void)
{
return mtn_lib_left(&mtn_pages[mtn_bwd_turn_left]);
}
uint8_t walk_backward_turn_right(void)
{
return mtn_lib_right(&mtn_pages[mtn_bwd_turn_right]);
}
uint8_t walk_forward_left(void)
{
return mtn_lib_left(&mtn_pages[mtn_fwd_left]);
}
uint8_t walk_forward_right(void)
{
return mtn_lib_right(&mtn_pages[mtn_fwd_right]);
}
uint8_t walk_backward_left(void)
{
return mtn_lib_left(&mtn_pages[mtn_bwd_left]);
}
uint8_t walk_backward_right(void)
{
return mtn_lib_right(&mtn_pages[mtn_bwd_right]);
}
uint8_t fast_walk_forward(void)
{
return mtn_lib_full(&mtn_pages[mtn_fast_fwd]);
}
uint8_t fast_walk_backward(void)
{
return mtn_lib_full(&mtn_pages[mtn_fast_bwd]);
}
uint8_t fast_turn_left(void)
{
}
uint8_t fast_turn_right(void)
{
}
uint8_t fast_walk_left(void)
{
}
uint8_t fast_walk_right(void)
{
}
uint8_t fast_walk_forward_turn_left(void)
{
}
uint8_t fast_walk_forward_turn_right(void)
{
}
uint8_t fast_walk_backward_turn_left(void)
{
}
uint8_t fast_walk_backward_turn_right(void)
{
}
#ifndef _MTN_LIBRARY_H
#define _MTN_LIBRARY_H
typedef enum {left_foot,right_foot} foot_t;
void mtn_lib_init(void);
void mtn_lib_stop_mtn(void);
void mtn_lib_set_start_foot(foot_t foot);
uint8_t walk_forward(void);
uint8_t walk_backward(void);
uint8_t turn_left(void);
uint8_t turn_right(void);
uint8_t walk_left(void);
uint8_t walk_right(void);
uint8_t walk_forward_turn_left(void);
uint8_t walk_forward_turn_right(void);
uint8_t walk_backward_turn_left(void);
uint8_t walk_backward_turn_right(void);
uint8_t walk_forward_left(void);
uint8_t walk_forward_right(void);
uint8_t walk_backward_left(void);
uint8_t walk_backward_right(void);
uint8_t fast_walk_forward(void);
uint8_t fast_walk_backward(void);
uint8_t fast_turn_left(void);
uint8_t fast_turn_right(void);
uint8_t fast_walk_left(void);
uint8_t fast_walk_right(void);
uint8_t fast_walk_forward_turn_left(void);
uint8_t fast_walk_forward_turn_right(void);
uint8_t fast_walk_backward_turn_left(void);
uint8_t fast_walk_backward_turn_right(void);
#endif
...@@ -51,5 +51,8 @@ download: $(MAIN_OUT_HEX) ...@@ -51,5 +51,8 @@ download: $(MAIN_OUT_HEX)
fw_downloader -d /dev/ttyUSB0 -f ./$(PROJECT).hex -p cm510 fw_downloader -d /dev/ttyUSB0 -f ./$(PROJECT).hex -p cm510
clean: clean:
-rm $(PROJECT).* -rm $(PROJECT).o
-rm $(PROJECT).map
-rm $(PROJECT).hex
-rm $(PROJECT).elf
-rm $(OBJS) -rm $(OBJS)
...@@ -51,5 +51,8 @@ download: $(MAIN_OUT_HEX) ...@@ -51,5 +51,8 @@ download: $(MAIN_OUT_HEX)
fw_downloader -d /dev/ttyUSB0 -f ./$(PROJECT).hex -p cm510 fw_downloader -d /dev/ttyUSB0 -f ./$(PROJECT).hex -p cm510
clean: clean:
-rm $(PROJECT).* -rm $(PROJECT).o
-rm $(PROJECT).map
-rm $(PROJECT).hex
-rm $(PROJECT).elf
-rm $(OBJS) -rm $(OBJS)
#ifndef _ACTION_ID_H
#define _ACTION_ID_H
#define BOW 1
#define fst_F_R_S 3
#define fst_F_L_S 4
#define fst_F_R_L_M 5
#define fst_F_L_R_M 6
#define fst_F_R_E 7
#define fst_F_L_E 8
#define fst_FRT_R_M 9
#define fst_FLT_L_M 10
#define fst_B_R_S 11
#define fst_B_L_S 12
#define fst_B_R_M 13
#define fst_B_L_M 14
#define fst_B_R_E 15
#define fst_B_L_E 16
#define fst_RFT 17
#define fst_LFT 18
#define fst_RBT 19
#define fst_LBT 20
#define fst_R 21
#define fst_L 22
#define fst_RT 23
#define fst_LT 24
#define sit_down 25
#define stand_up 26
#define F_getup 27
#define B_getup 28
#define walk_ready 31
#define F_S_L 32
#define F_S_R 34
#define F_M_L 36
#define F_M_R 38
#define F_E_L 40
#define F_E_R 42
#define B_S_L 44
#define B_S_R 46
#define B_M_L 48
#define B_M_R 50
#define B_E_L 52
#define B_E_R 54
#define LT_S_L 56
#define LT_S_R 58
#define LT_M_L 60
#define LT_M_R 62
#define LT_E_L 64
#define LT_E_R 66
#define RT_S_L 68
#define RT_S_R 70
#define RT_M_L 72
#define RT_M_R 74
#define RT_E_L 76
#define RT_E_R 78
#define L_S_L 80
#define L_S_R 82
#define L_M_L 84
#define L_M_R 86
#define L_E_L 88
#define L_E_R 90
#define R_S_L 92
#define R_S_R 94
#define R_M_L 96
#define R_M_R 98
#define R_E_L 100
#define R_E_R 102
#define FLT_S_L 104
#define FLT_S_R 106
#define FLT_M_L 108
#define FLT_M_R 110
#define FLT_E_L 112
#define FLT_E_R 114
#define FRT_S_L 116
#define FRT_S_R 118
#define FRT_M_L 120
#define FRT_M_R 122
#define FRT_E_L 124
#define FRT_E_R 126
#define BLT_S_L 128
#define BLT_S_R 130
#define BLT_M_L 132
#define BLT_M_R 134
#define BLT_E_L 136
#define BLT_E_R 138
#define BRT_S_L 140
#define BRT_S_R 142
#define BRT_M_L 144
#define BRT_M_R 146
#define BRT_E_L 148
#define BRT_E_R 150
#define LTA_S_L 152
#define LTA_S_R 154
#define LTA_M_L 156
#define LTA_M_R 158
#define LTA_E_L 160
#define LTA_E_R 162
#define RTA_S_L 164
#define RTA_S_R 166
#define RTA_M_L 168
#define RTA_M_R 170
#define RTA_E_L 172
#define RTA_E_R 174
#define FL_S_L 176
#define FL_S_R 178
#define FL_M_L 180
#define FL_M_R 182
#define FL_E_L 184
#define FL_E_R 186
#define FR_S_L 188
#define FR_S_R 190
#define FR_M_L 192
#define FR_M_R 194
#define FR_E_L 196
#define FR_E_R 198
#define BL_S_L 200
#define BL_S_R 202
#define BL_M_L 204
#define BL_M_R 206
#define BL_E_L 208
#define BL_E_R 210
#define BR_S_L 212
#define BR_S_R 214
#define BR_M_L 216
#define BR_M_R 218
#define BR_E_L 220
#define BR_E_R 222
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment