Camille Muller
/
PFE_MOTORISATION
PFE_MULLER_CAMILLE
main.cpp@0:5fb36f7e2cfb, 2016-02-12 (annotated)
- Committer:
- mullercamille
- Date:
- Fri Feb 12 17:45:09 2016 +0000
- Revision:
- 0:5fb36f7e2cfb
first
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mullercamille | 0:5fb36f7e2cfb | 1 | #include "mbed.h" |
mullercamille | 0:5fb36f7e2cfb | 2 | |
mullercamille | 0:5fb36f7e2cfb | 3 | |
mullercamille | 0:5fb36f7e2cfb | 4 | #define ADR_MOTEUR_NUMBER 0 |
mullercamille | 0:5fb36f7e2cfb | 5 | #define ADR_MODULE 1 |
mullercamille | 0:5fb36f7e2cfb | 6 | |
mullercamille | 0:5fb36f7e2cfb | 7 | |
mullercamille | 0:5fb36f7e2cfb | 8 | |
mullercamille | 0:5fb36f7e2cfb | 9 | Serial pc(USBTX, USBRX); // tx, rx |
mullercamille | 0:5fb36f7e2cfb | 10 | Serial serial_(PA_9,PA_10); |
mullercamille | 0:5fb36f7e2cfb | 11 | |
mullercamille | 0:5fb36f7e2cfb | 12 | |
mullercamille | 0:5fb36f7e2cfb | 13 | struct s_val |
mullercamille | 0:5fb36f7e2cfb | 14 | { |
mullercamille | 0:5fb36f7e2cfb | 15 | char v1; |
mullercamille | 0:5fb36f7e2cfb | 16 | char v2; |
mullercamille | 0:5fb36f7e2cfb | 17 | char v3; |
mullercamille | 0:5fb36f7e2cfb | 18 | char v4; |
mullercamille | 0:5fb36f7e2cfb | 19 | }typedef val; |
mullercamille | 0:5fb36f7e2cfb | 20 | |
mullercamille | 0:5fb36f7e2cfb | 21 | enum reply_code |
mullercamille | 0:5fb36f7e2cfb | 22 | { |
mullercamille | 0:5fb36f7e2cfb | 23 | success =100, //Successfully executed, no error |
mullercamille | 0:5fb36f7e2cfb | 24 | loaded_into_TMCL= 101, // Command loaded into TMCL™program EEPROM |
mullercamille | 0:5fb36f7e2cfb | 25 | wrong_checksum = 1, //Wrong checksum |
mullercamille | 0:5fb36f7e2cfb | 26 | invalid_cmd = 2, //Invalid command |
mullercamille | 0:5fb36f7e2cfb | 27 | wrong_type =3, // Wrong type |
mullercamille | 0:5fb36f7e2cfb | 28 | invalid_value = 4, // Invalid value |
mullercamille | 0:5fb36f7e2cfb | 29 | eeprom_locked = 5, //Configuration EEPROM locked |
mullercamille | 0:5fb36f7e2cfb | 30 | cmd_non_available = 6 // Command not available |
mullercamille | 0:5fb36f7e2cfb | 31 | }; |
mullercamille | 0:5fb36f7e2cfb | 32 | |
mullercamille | 0:5fb36f7e2cfb | 33 | |
mullercamille | 0:5fb36f7e2cfb | 34 | |
mullercamille | 0:5fb36f7e2cfb | 35 | enum type_commande{ |
mullercamille | 0:5fb36f7e2cfb | 36 | |
mullercamille | 0:5fb36f7e2cfb | 37 | // Motion command |
mullercamille | 0:5fb36f7e2cfb | 38 | ROL = 2, // Rotate left |
mullercamille | 0:5fb36f7e2cfb | 39 | ROR = 1, // Rotate right |
mullercamille | 0:5fb36f7e2cfb | 40 | MVP = 4, // Move to position |
mullercamille | 0:5fb36f7e2cfb | 41 | MST = 3, // Motor stop |
mullercamille | 0:5fb36f7e2cfb | 42 | RFS = 13, // Reference search |
mullercamille | 0:5fb36f7e2cfb | 43 | SCO = 30, // Store coordinate |
mullercamille | 0:5fb36f7e2cfb | 44 | CCO = 32, // Capture coordinate |
mullercamille | 0:5fb36f7e2cfb | 45 | GCO = 31, // Get coordinate |
mullercamille | 0:5fb36f7e2cfb | 46 | // Parameter command |
mullercamille | 0:5fb36f7e2cfb | 47 | SAP = 5, // Set axis parameter |
mullercamille | 0:5fb36f7e2cfb | 48 | GAP = 6, // Get axis parameter |
mullercamille | 0:5fb36f7e2cfb | 49 | STAP = 7, // Store axis parameter into EEPROM |
mullercamille | 0:5fb36f7e2cfb | 50 | RSAP = 8, // Restore axis parameter from EEPROM |
mullercamille | 0:5fb36f7e2cfb | 51 | SGP = 9, //Set global parameter |
mullercamille | 0:5fb36f7e2cfb | 52 | GGP = 10, // Get global parameter |
mullercamille | 0:5fb36f7e2cfb | 53 | STGP = 11, // Store global parameter into EEPROM |
mullercamille | 0:5fb36f7e2cfb | 54 | RSGP = 12, // Restore global parameter from EEPROM |
mullercamille | 0:5fb36f7e2cfb | 55 | // IO command |
mullercamille | 0:5fb36f7e2cfb | 56 | SIO = 14, // Set output |
mullercamille | 0:5fb36f7e2cfb | 57 | GIO = 15, //Get input |
mullercamille | 0:5fb36f7e2cfb | 58 | }; |
mullercamille | 0:5fb36f7e2cfb | 59 | |
mullercamille | 0:5fb36f7e2cfb | 60 | struct s_cmd |
mullercamille | 0:5fb36f7e2cfb | 61 | { |
mullercamille | 0:5fb36f7e2cfb | 62 | unsigned char module_adr; |
mullercamille | 0:5fb36f7e2cfb | 63 | enum type_commande command_number; |
mullercamille | 0:5fb36f7e2cfb | 64 | unsigned char type_number; |
mullercamille | 0:5fb36f7e2cfb | 65 | unsigned char motor_or_bank_number; |
mullercamille | 0:5fb36f7e2cfb | 66 | val val; |
mullercamille | 0:5fb36f7e2cfb | 67 | unsigned char checksum; |
mullercamille | 0:5fb36f7e2cfb | 68 | }typedef cmd; |
mullercamille | 0:5fb36f7e2cfb | 69 | |
mullercamille | 0:5fb36f7e2cfb | 70 | struct s_reply |
mullercamille | 0:5fb36f7e2cfb | 71 | { |
mullercamille | 0:5fb36f7e2cfb | 72 | unsigned char reply_adr; |
mullercamille | 0:5fb36f7e2cfb | 73 | unsigned char motor_or_bank_number; |
mullercamille | 0:5fb36f7e2cfb | 74 | unsigned char status; |
mullercamille | 0:5fb36f7e2cfb | 75 | enum type_commande command_number; |
mullercamille | 0:5fb36f7e2cfb | 76 | int val; |
mullercamille | 0:5fb36f7e2cfb | 77 | unsigned char checksum; |
mullercamille | 0:5fb36f7e2cfb | 78 | }typedef reply; |
mullercamille | 0:5fb36f7e2cfb | 79 | |
mullercamille | 0:5fb36f7e2cfb | 80 | |
mullercamille | 0:5fb36f7e2cfb | 81 | |
mullercamille | 0:5fb36f7e2cfb | 82 | |
mullercamille | 0:5fb36f7e2cfb | 83 | |
mullercamille | 0:5fb36f7e2cfb | 84 | // Add checksum to command |
mullercamille | 0:5fb36f7e2cfb | 85 | cmd* add_cs(cmd* Command) |
mullercamille | 0:5fb36f7e2cfb | 86 | { |
mullercamille | 0:5fb36f7e2cfb | 87 | unsigned char Checksum; |
mullercamille | 0:5fb36f7e2cfb | 88 | //Set the “Command” array to the desired command |
mullercamille | 0:5fb36f7e2cfb | 89 | Checksum = Command->module_adr; |
mullercamille | 0:5fb36f7e2cfb | 90 | Checksum+=Command->command_number; |
mullercamille | 0:5fb36f7e2cfb | 91 | Checksum+=Command->type_number; |
mullercamille | 0:5fb36f7e2cfb | 92 | Checksum+=Command->motor_or_bank_number; |
mullercamille | 0:5fb36f7e2cfb | 93 | Checksum+=Command->val.v1; |
mullercamille | 0:5fb36f7e2cfb | 94 | Checksum+=Command->val.v2; |
mullercamille | 0:5fb36f7e2cfb | 95 | Checksum+=Command->val.v3; |
mullercamille | 0:5fb36f7e2cfb | 96 | Checksum+=Command->val.v4; |
mullercamille | 0:5fb36f7e2cfb | 97 | |
mullercamille | 0:5fb36f7e2cfb | 98 | Command->checksum =Checksum; //insert checksum as last byte of the command |
mullercamille | 0:5fb36f7e2cfb | 99 | //Now, send it to the module |
mullercamille | 0:5fb36f7e2cfb | 100 | return Command; |
mullercamille | 0:5fb36f7e2cfb | 101 | } |
mullercamille | 0:5fb36f7e2cfb | 102 | |
mullercamille | 0:5fb36f7e2cfb | 103 | void reverse_val(int speed,val *valeur) |
mullercamille | 0:5fb36f7e2cfb | 104 | { |
mullercamille | 0:5fb36f7e2cfb | 105 | char t1,t2,t3,t4; |
mullercamille | 0:5fb36f7e2cfb | 106 | ((int*)valeur)[0] = speed; |
mullercamille | 0:5fb36f7e2cfb | 107 | |
mullercamille | 0:5fb36f7e2cfb | 108 | t1 = valeur->v1; |
mullercamille | 0:5fb36f7e2cfb | 109 | t2 = valeur->v2; |
mullercamille | 0:5fb36f7e2cfb | 110 | t3 = valeur->v3; |
mullercamille | 0:5fb36f7e2cfb | 111 | t4 = valeur->v4; |
mullercamille | 0:5fb36f7e2cfb | 112 | valeur->v1 = t4; |
mullercamille | 0:5fb36f7e2cfb | 113 | valeur->v2 = t3; |
mullercamille | 0:5fb36f7e2cfb | 114 | valeur->v3 = t2; |
mullercamille | 0:5fb36f7e2cfb | 115 | valeur->v4 = t1; |
mullercamille | 0:5fb36f7e2cfb | 116 | |
mullercamille | 0:5fb36f7e2cfb | 117 | } |
mullercamille | 0:5fb36f7e2cfb | 118 | |
mullercamille | 0:5fb36f7e2cfb | 119 | |
mullercamille | 0:5fb36f7e2cfb | 120 | cmd* cmd_rotate_left(int speed) |
mullercamille | 0:5fb36f7e2cfb | 121 | { |
mullercamille | 0:5fb36f7e2cfb | 122 | cmd* tab = (cmd *) malloc(sizeof(s_cmd));; |
mullercamille | 0:5fb36f7e2cfb | 123 | tab->motor_or_bank_number = ADR_MOTEUR_NUMBER; |
mullercamille | 0:5fb36f7e2cfb | 124 | tab->module_adr = ADR_MODULE; |
mullercamille | 0:5fb36f7e2cfb | 125 | tab->command_number = ROL; // -> LEFT |
mullercamille | 0:5fb36f7e2cfb | 126 | reverse_val(speed,&(tab->val)); |
mullercamille | 0:5fb36f7e2cfb | 127 | tab->type_number = 0; // don't care |
mullercamille | 0:5fb36f7e2cfb | 128 | |
mullercamille | 0:5fb36f7e2cfb | 129 | return add_cs(tab); |
mullercamille | 0:5fb36f7e2cfb | 130 | } |
mullercamille | 0:5fb36f7e2cfb | 131 | |
mullercamille | 0:5fb36f7e2cfb | 132 | cmd* cmd_rotate_right(int speed) |
mullercamille | 0:5fb36f7e2cfb | 133 | { |
mullercamille | 0:5fb36f7e2cfb | 134 | cmd* tab = (cmd *) malloc(sizeof(s_cmd));; |
mullercamille | 0:5fb36f7e2cfb | 135 | tab->motor_or_bank_number = ADR_MOTEUR_NUMBER; |
mullercamille | 0:5fb36f7e2cfb | 136 | tab->module_adr = ADR_MODULE; |
mullercamille | 0:5fb36f7e2cfb | 137 | tab->command_number = ROR; |
mullercamille | 0:5fb36f7e2cfb | 138 | reverse_val(speed,&(tab->val)); |
mullercamille | 0:5fb36f7e2cfb | 139 | tab->type_number = 0; // don't care |
mullercamille | 0:5fb36f7e2cfb | 140 | |
mullercamille | 0:5fb36f7e2cfb | 141 | return add_cs(tab); |
mullercamille | 0:5fb36f7e2cfb | 142 | } |
mullercamille | 0:5fb36f7e2cfb | 143 | |
mullercamille | 0:5fb36f7e2cfb | 144 | cmd* cmd_stop() |
mullercamille | 0:5fb36f7e2cfb | 145 | { |
mullercamille | 0:5fb36f7e2cfb | 146 | cmd* tab = (cmd *) malloc(sizeof(s_cmd));; |
mullercamille | 0:5fb36f7e2cfb | 147 | tab->motor_or_bank_number = ADR_MOTEUR_NUMBER; |
mullercamille | 0:5fb36f7e2cfb | 148 | tab->module_adr = ADR_MODULE; |
mullercamille | 0:5fb36f7e2cfb | 149 | tab->command_number = MST; |
mullercamille | 0:5fb36f7e2cfb | 150 | //tab->val = (val) 0; // Don't care |
mullercamille | 0:5fb36f7e2cfb | 151 | tab->type_number = 0; // don't care |
mullercamille | 0:5fb36f7e2cfb | 152 | return add_cs(tab); |
mullercamille | 0:5fb36f7e2cfb | 153 | } |
mullercamille | 0:5fb36f7e2cfb | 154 | |
mullercamille | 0:5fb36f7e2cfb | 155 | |
mullercamille | 0:5fb36f7e2cfb | 156 | void send_data(Serial* unport,cmd * cmd) |
mullercamille | 0:5fb36f7e2cfb | 157 | { |
mullercamille | 0:5fb36f7e2cfb | 158 | int itr =0; |
mullercamille | 0:5fb36f7e2cfb | 159 | for( ; itr < 9; itr++) |
mullercamille | 0:5fb36f7e2cfb | 160 | { |
mullercamille | 0:5fb36f7e2cfb | 161 | char val= ((char) ((const char*)cmd)[itr]); |
mullercamille | 0:5fb36f7e2cfb | 162 | unport->putc(val); |
mullercamille | 0:5fb36f7e2cfb | 163 | } |
mullercamille | 0:5fb36f7e2cfb | 164 | } |
mullercamille | 0:5fb36f7e2cfb | 165 | |
mullercamille | 0:5fb36f7e2cfb | 166 | int main() { |
mullercamille | 0:5fb36f7e2cfb | 167 | |
mullercamille | 0:5fb36f7e2cfb | 168 | wait(0.5); |
mullercamille | 0:5fb36f7e2cfb | 169 | pc.baud(9600); |
mullercamille | 0:5fb36f7e2cfb | 170 | serial_.baud(9600); |
mullercamille | 0:5fb36f7e2cfb | 171 | |
mullercamille | 0:5fb36f7e2cfb | 172 | |
mullercamille | 0:5fb36f7e2cfb | 173 | cmd * cmd = cmd_rotate_right(350); |
mullercamille | 0:5fb36f7e2cfb | 174 | send_data(&serial_,cmd); |
mullercamille | 0:5fb36f7e2cfb | 175 | while(1) |
mullercamille | 0:5fb36f7e2cfb | 176 | { |
mullercamille | 0:5fb36f7e2cfb | 177 | if(serial_.readable()) |
mullercamille | 0:5fb36f7e2cfb | 178 | pc.putc(serial_.getc()); |
mullercamille | 0:5fb36f7e2cfb | 179 | } |
mullercamille | 0:5fb36f7e2cfb | 180 | |
mullercamille | 0:5fb36f7e2cfb | 181 | } |
mullercamille | 0:5fb36f7e2cfb | 182 | |
mullercamille | 0:5fb36f7e2cfb | 183 |