PFE_MULLER_CAMILLE

Dependencies:   mbed

Committer:
mullercamille
Date:
Fri Feb 12 17:45:09 2016 +0000
Revision:
0:5fb36f7e2cfb
first

Who changed what in which revision?

UserRevisionLine numberNew 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