![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Test CBS-GPIO-CAN
Dependencies: mbed
Fork of Amplificatore_bomboni_rev2 by
CBS-GPIO_CAN.cpp@8:3c919f5d6036, 2018-07-27 (annotated)
- Committer:
- pinofal
- Date:
- Fri Jul 27 14:27:58 2018 +0000
- Revision:
- 8:3c919f5d6036
Test CBS-GPIO-CAN
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pinofal | 8:3c919f5d6036 | 1 | // Tested : NUCLEO-F401RE NUCLEO-L476LG |
pinofal | 8:3c919f5d6036 | 2 | #include "mbed.h" |
pinofal | 8:3c919f5d6036 | 3 | #include<stdlib.h> |
pinofal | 8:3c919f5d6036 | 4 | |
pinofal | 8:3c919f5d6036 | 5 | // dimensione del pacchetto di comunicazione tra PC e uC |
pinofal | 8:3c919f5d6036 | 6 | #define PACKETDIM 64 |
pinofal | 8:3c919f5d6036 | 7 | |
pinofal | 8:3c919f5d6036 | 8 | // Definizione periferiche |
pinofal | 8:3c919f5d6036 | 9 | Serial pc(USBTX, USBRX); |
pinofal | 8:3c919f5d6036 | 10 | |
pinofal | 8:3c919f5d6036 | 11 | // User Button, LED |
pinofal | 8:3c919f5d6036 | 12 | DigitalIn myButton(USER_BUTTON); |
pinofal | 8:3c919f5d6036 | 13 | |
pinofal | 8:3c919f5d6036 | 14 | // Output di servizio sul LED2 della scheda NUCLEO |
pinofal | 8:3c919f5d6036 | 15 | DigitalOut myLed1(LED1); |
pinofal | 8:3c919f5d6036 | 16 | DigitalOut myLed2(LED2); |
pinofal | 8:3c919f5d6036 | 17 | DigitalOut myLed3(LED3); |
pinofal | 8:3c919f5d6036 | 18 | |
pinofal | 8:3c919f5d6036 | 19 | // Output della NUCLEO e Input del DUT. Saranno inviati dal PC alla NUCLEO, nell'ordine in cui si trovano dichiarati di seguito |
pinofal | 8:3c919f5d6036 | 20 | DigitalOut myOut1(PA_13); |
pinofal | 8:3c919f5d6036 | 21 | DigitalOut myOut2(PA_14); |
pinofal | 8:3c919f5d6036 | 22 | DigitalOut myOut3(PA_15); |
pinofal | 8:3c919f5d6036 | 23 | |
pinofal | 8:3c919f5d6036 | 24 | DigitalOut myTest(PG_2); |
pinofal | 8:3c919f5d6036 | 25 | |
pinofal | 8:3c919f5d6036 | 26 | // Input della NUCLEO e Output del DUT. Saranno inviati dalla NUCLEO al PC, nell'ordine in cui si trovano dichiarati di seguito |
pinofal | 8:3c919f5d6036 | 27 | DigitalIn myIn1(PA_8); |
pinofal | 8:3c919f5d6036 | 28 | DigitalIn myIn2(PB_10); |
pinofal | 8:3c919f5d6036 | 29 | DigitalIn myIn3(PB_4); |
pinofal | 8:3c919f5d6036 | 30 | DigitalIn myIn4(PB_5); |
pinofal | 8:3c919f5d6036 | 31 | DigitalIn myIn5(PB_3); |
pinofal | 8:3c919f5d6036 | 32 | |
pinofal | 8:3c919f5d6036 | 33 | // Output di pilotaggio Relè per test CANBUS |
pinofal | 8:3c919f5d6036 | 34 | DigitalOut myRelayH1(PB_6); |
pinofal | 8:3c919f5d6036 | 35 | DigitalOut myRelayL1(PC_7); |
pinofal | 8:3c919f5d6036 | 36 | DigitalOut myNotRelayH2(PA_9); // A questo Output è collegato un OptoRelay normalmente chiuso e quindi lavora in logica negata |
pinofal | 8:3c919f5d6036 | 37 | DigitalOut myNotRelayL2(PA_10); // A questo Output è collegato un OptoRelay normalmente chiuso e quindi lavora in logica negata |
pinofal | 8:3c919f5d6036 | 38 | DigitalOut myNotRelayH3(PB_8); // A questo Output è collegato un OptoRelay normalmente chiuso e quindi lavora in logica negata |
pinofal | 8:3c919f5d6036 | 39 | DigitalOut myRelayL3(PB_9); |
pinofal | 8:3c919f5d6036 | 40 | |
pinofal | 8:3c919f5d6036 | 41 | |
pinofal | 8:3c919f5d6036 | 42 | // indice per i cicli |
pinofal | 8:3c919f5d6036 | 43 | int nIndex; |
pinofal | 8:3c919f5d6036 | 44 | |
pinofal | 8:3c919f5d6036 | 45 | |
pinofal | 8:3c919f5d6036 | 46 | // comando ricevuto dal PC attraverso la routine di gestione interrupt Rx |
pinofal | 8:3c919f5d6036 | 47 | // 1: read all GPIO |
pinofal | 8:3c919f5d6036 | 48 | // 2: write all GPIO |
pinofal | 8:3c919f5d6036 | 49 | volatile int nReadCmd=0; |
pinofal | 8:3c919f5d6036 | 50 | |
pinofal | 8:3c919f5d6036 | 51 | // stato degli input |
pinofal | 8:3c919f5d6036 | 52 | volatile int myIn1Status; |
pinofal | 8:3c919f5d6036 | 53 | volatile int myIn2Status; |
pinofal | 8:3c919f5d6036 | 54 | volatile int myIn3Status; |
pinofal | 8:3c919f5d6036 | 55 | volatile int myIn4Status; |
pinofal | 8:3c919f5d6036 | 56 | volatile int myIn5Status; |
pinofal | 8:3c919f5d6036 | 57 | |
pinofal | 8:3c919f5d6036 | 58 | |
pinofal | 8:3c919f5d6036 | 59 | |
pinofal | 8:3c919f5d6036 | 60 | //********************************************** |
pinofal | 8:3c919f5d6036 | 61 | // IRQ per la Rx su seriale |
pinofal | 8:3c919f5d6036 | 62 | //********************************************** |
pinofal | 8:3c919f5d6036 | 63 | void RxInterrupt(void) |
pinofal | 8:3c919f5d6036 | 64 | { |
pinofal | 8:3c919f5d6036 | 65 | // array per la ricezione dei messaggi da seriale |
pinofal | 8:3c919f5d6036 | 66 | char caRxPacket[PACKETDIM]; |
pinofal | 8:3c919f5d6036 | 67 | int nRxPacketSize; |
pinofal | 8:3c919f5d6036 | 68 | |
pinofal | 8:3c919f5d6036 | 69 | |
pinofal | 8:3c919f5d6036 | 70 | |
pinofal | 8:3c919f5d6036 | 71 | // pntatore al comando, nella stringa ricevuta sulla seriale |
pinofal | 8:3c919f5d6036 | 72 | char* cCmdPosition; |
pinofal | 8:3c919f5d6036 | 73 | |
pinofal | 8:3c919f5d6036 | 74 | // reset array contenente pacchetto ricevuto |
pinofal | 8:3c919f5d6036 | 75 | nIndex=0; |
pinofal | 8:3c919f5d6036 | 76 | for(nIndex=0;nIndex<PACKETDIM;nIndex++) |
pinofal | 8:3c919f5d6036 | 77 | { |
pinofal | 8:3c919f5d6036 | 78 | caRxPacket[nIndex]='\0'; |
pinofal | 8:3c919f5d6036 | 79 | } |
pinofal | 8:3c919f5d6036 | 80 | |
pinofal | 8:3c919f5d6036 | 81 | // ricevi caratteri su seriale, se disponibili |
pinofal | 8:3c919f5d6036 | 82 | nRxPacketSize =0; |
pinofal | 8:3c919f5d6036 | 83 | while((pc.readable())) |
pinofal | 8:3c919f5d6036 | 84 | { |
pinofal | 8:3c919f5d6036 | 85 | // acquisice stringa in input e relativa dimensione |
pinofal | 8:3c919f5d6036 | 86 | pc.scanf("%s", &caRxPacket); |
pinofal | 8:3c919f5d6036 | 87 | nRxPacketSize = strlen(caRxPacket); |
pinofal | 8:3c919f5d6036 | 88 | } |
pinofal | 8:3c919f5d6036 | 89 | // restituisce il comando ricevuto e la dimensione |
pinofal | 8:3c919f5d6036 | 90 | pc.printf("Command: %s\n\r",caRxPacket); |
pinofal | 8:3c919f5d6036 | 91 | pc.printf("PacketSize: %d\n\r",nRxPacketSize); |
pinofal | 8:3c919f5d6036 | 92 | |
pinofal | 8:3c919f5d6036 | 93 | // COMANDO DI LETTURA INPUT: comando di lettura dei GPIO è "ReadGPIO" |
pinofal | 8:3c919f5d6036 | 94 | // confronta il comando ricevuto con quello di Read GPIO. |
pinofal | 8:3c919f5d6036 | 95 | // Restituisce le seguenti stringhe: |
pinofal | 8:3c919f5d6036 | 96 | // "USER-BUTTON: x"; x = 0/1 |
pinofal | 8:3c919f5d6036 | 97 | // "In1: 0/1"; x = 0/1 |
pinofal | 8:3c919f5d6036 | 98 | // "In2: 0/1"; x = 0/1 |
pinofal | 8:3c919f5d6036 | 99 | // "In3: 0/1"; x = 0/1 |
pinofal | 8:3c919f5d6036 | 100 | // "In4: 0/1"; x = 0/1 |
pinofal | 8:3c919f5d6036 | 101 | // "In5: 0/1"; x = 0/1 |
pinofal | 8:3c919f5d6036 | 102 | nReadCmd = strcmp(caRxPacket, "ReadGPIO"); |
pinofal | 8:3c919f5d6036 | 103 | if(nReadCmd==0) |
pinofal | 8:3c919f5d6036 | 104 | { |
pinofal | 8:3c919f5d6036 | 105 | // rileva lo stato degli input e trasmettili al PC-HOST |
pinofal | 8:3c919f5d6036 | 106 | pc.printf("USER-BUTTON: %d\n\r",myButton.read()); // il primo input è lo User-Button per scopi di diagnostica |
pinofal | 8:3c919f5d6036 | 107 | // myIn1: se legge 0/1, trasmette lo stato al PC |
pinofal | 8:3c919f5d6036 | 108 | if(myIn1==1) |
pinofal | 8:3c919f5d6036 | 109 | { |
pinofal | 8:3c919f5d6036 | 110 | pc.printf("In1: 1\n\r"); |
pinofal | 8:3c919f5d6036 | 111 | } |
pinofal | 8:3c919f5d6036 | 112 | else |
pinofal | 8:3c919f5d6036 | 113 | { |
pinofal | 8:3c919f5d6036 | 114 | pc.printf("In1: 0\n\r"); |
pinofal | 8:3c919f5d6036 | 115 | } |
pinofal | 8:3c919f5d6036 | 116 | |
pinofal | 8:3c919f5d6036 | 117 | // myIn2: se legge 0/1, trasmette lo stato al PC |
pinofal | 8:3c919f5d6036 | 118 | if(myIn2==1) |
pinofal | 8:3c919f5d6036 | 119 | { |
pinofal | 8:3c919f5d6036 | 120 | pc.printf("In2: 1\n\r"); |
pinofal | 8:3c919f5d6036 | 121 | } |
pinofal | 8:3c919f5d6036 | 122 | else |
pinofal | 8:3c919f5d6036 | 123 | { |
pinofal | 8:3c919f5d6036 | 124 | pc.printf("In2: 0\n\r"); |
pinofal | 8:3c919f5d6036 | 125 | } |
pinofal | 8:3c919f5d6036 | 126 | // myIn3: se legge 0/1, trasmette lo stato al PC |
pinofal | 8:3c919f5d6036 | 127 | if(myIn3==1) |
pinofal | 8:3c919f5d6036 | 128 | { |
pinofal | 8:3c919f5d6036 | 129 | pc.printf("In3: 1\n\r"); |
pinofal | 8:3c919f5d6036 | 130 | } |
pinofal | 8:3c919f5d6036 | 131 | else |
pinofal | 8:3c919f5d6036 | 132 | { |
pinofal | 8:3c919f5d6036 | 133 | pc.printf("In3: 0\n\r"); |
pinofal | 8:3c919f5d6036 | 134 | } |
pinofal | 8:3c919f5d6036 | 135 | // myIn4: se legge 0/1, trasmette lo stato al PC |
pinofal | 8:3c919f5d6036 | 136 | if(myIn4==1) |
pinofal | 8:3c919f5d6036 | 137 | { |
pinofal | 8:3c919f5d6036 | 138 | pc.printf("In4: 1\n\r"); |
pinofal | 8:3c919f5d6036 | 139 | } |
pinofal | 8:3c919f5d6036 | 140 | else |
pinofal | 8:3c919f5d6036 | 141 | { |
pinofal | 8:3c919f5d6036 | 142 | pc.printf("In4: 0\n\r"); |
pinofal | 8:3c919f5d6036 | 143 | } |
pinofal | 8:3c919f5d6036 | 144 | |
pinofal | 8:3c919f5d6036 | 145 | // myIn5: se legge 0/1, trasmette lo stato al PC |
pinofal | 8:3c919f5d6036 | 146 | if(myIn5==1) |
pinofal | 8:3c919f5d6036 | 147 | { |
pinofal | 8:3c919f5d6036 | 148 | pc.printf("In5: 1\n\r"); |
pinofal | 8:3c919f5d6036 | 149 | } |
pinofal | 8:3c919f5d6036 | 150 | else |
pinofal | 8:3c919f5d6036 | 151 | { |
pinofal | 8:3c919f5d6036 | 152 | pc.printf("In5: 0\n\r"); |
pinofal | 8:3c919f5d6036 | 153 | } |
pinofal | 8:3c919f5d6036 | 154 | } // if comando ricevuto == ReadGPIO |
pinofal | 8:3c919f5d6036 | 155 | else |
pinofal | 8:3c919f5d6036 | 156 | { |
pinofal | 8:3c919f5d6036 | 157 | // COMANDO PILOTAGGIO OUTPUT: il comando di pilotaggio output è composto da WriteGPIO-abcd |
pinofal | 8:3c919f5d6036 | 158 | // a=1/0: accende/spegne il LED di diagnostica LED2 |
pinofal | 8:3c919f5d6036 | 159 | // b=1/0: Out1 = 1/0 |
pinofal | 8:3c919f5d6036 | 160 | // c=1/0: Out1 = 1/0 |
pinofal | 8:3c919f5d6036 | 161 | // d=1/0: Out1 = 1/0 |
pinofal | 8:3c919f5d6036 | 162 | // verifica se nel comando ricevuto si trova la stringa WriteGPIO |
pinofal | 8:3c919f5d6036 | 163 | cCmdPosition=strstr(caRxPacket, "WriteGPIO"); |
pinofal | 8:3c919f5d6036 | 164 | if(cCmdPosition != NULL) // se il comando ricevuto contiene WriteGPIO, procedi con l'analisi dei dati |
pinofal | 8:3c919f5d6036 | 165 | { |
pinofal | 8:3c919f5d6036 | 166 | // si posiziona sul delimitatore '-' , tra il comando e i dati ed estrae la stringa contenente lo stato da inviare sugli Output |
pinofal | 8:3c919f5d6036 | 167 | cCmdPosition = strtok(caRxPacket,"-"); |
pinofal | 8:3c919f5d6036 | 168 | cCmdPosition = strtok(NULL,"-"); |
pinofal | 8:3c919f5d6036 | 169 | pc.printf("Data: %s\n\r", cCmdPosition); |
pinofal | 8:3c919f5d6036 | 170 | |
pinofal | 8:3c919f5d6036 | 171 | // USER_LED LED2 se il dato ricevto è '0/1' spegni/accendi il LED |
pinofal | 8:3c919f5d6036 | 172 | if(cCmdPosition[0]=='1') |
pinofal | 8:3c919f5d6036 | 173 | { |
pinofal | 8:3c919f5d6036 | 174 | // accendi LED e comunica al PC |
pinofal | 8:3c919f5d6036 | 175 | pc.printf("Led2: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 176 | myLed2 = 1; |
pinofal | 8:3c919f5d6036 | 177 | } |
pinofal | 8:3c919f5d6036 | 178 | else |
pinofal | 8:3c919f5d6036 | 179 | { |
pinofal | 8:3c919f5d6036 | 180 | // spegni LED e comunica al PC |
pinofal | 8:3c919f5d6036 | 181 | pc.printf("Led2: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 182 | myLed2 = 0; |
pinofal | 8:3c919f5d6036 | 183 | } |
pinofal | 8:3c919f5d6036 | 184 | |
pinofal | 8:3c919f5d6036 | 185 | // Out1: se il dato ricevto è '0/1' spegni/accendi l'output |
pinofal | 8:3c919f5d6036 | 186 | if(cCmdPosition[1]=='1') |
pinofal | 8:3c919f5d6036 | 187 | { |
pinofal | 8:3c919f5d6036 | 188 | // accendi Out1 e comunica al PC |
pinofal | 8:3c919f5d6036 | 189 | pc.printf("Out1: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 190 | myOut1 = 1; |
pinofal | 8:3c919f5d6036 | 191 | } |
pinofal | 8:3c919f5d6036 | 192 | else |
pinofal | 8:3c919f5d6036 | 193 | { |
pinofal | 8:3c919f5d6036 | 194 | // spegni Out1 e comunica al PC |
pinofal | 8:3c919f5d6036 | 195 | pc.printf("Out1: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 196 | myOut1 = 0; |
pinofal | 8:3c919f5d6036 | 197 | } |
pinofal | 8:3c919f5d6036 | 198 | |
pinofal | 8:3c919f5d6036 | 199 | // Out2: se il dato ricevto è '0/1' spegni/accendi l'output |
pinofal | 8:3c919f5d6036 | 200 | if(cCmdPosition[2]=='1') |
pinofal | 8:3c919f5d6036 | 201 | { |
pinofal | 8:3c919f5d6036 | 202 | // accendi Out2 e comunica al PC |
pinofal | 8:3c919f5d6036 | 203 | pc.printf("Out2: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 204 | myOut2 = 1; |
pinofal | 8:3c919f5d6036 | 205 | } |
pinofal | 8:3c919f5d6036 | 206 | else |
pinofal | 8:3c919f5d6036 | 207 | { |
pinofal | 8:3c919f5d6036 | 208 | // spegni Out2 e comunica al PC |
pinofal | 8:3c919f5d6036 | 209 | pc.printf("Out2: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 210 | myOut2 = 0; |
pinofal | 8:3c919f5d6036 | 211 | } |
pinofal | 8:3c919f5d6036 | 212 | |
pinofal | 8:3c919f5d6036 | 213 | // Out3: se il dato ricevto è '0/1' spegni/accendi l'output |
pinofal | 8:3c919f5d6036 | 214 | if(cCmdPosition[3]=='1') |
pinofal | 8:3c919f5d6036 | 215 | { |
pinofal | 8:3c919f5d6036 | 216 | // accendi Out3 e comunica al PC |
pinofal | 8:3c919f5d6036 | 217 | pc.printf("Out3: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 218 | myOut3 = 1; |
pinofal | 8:3c919f5d6036 | 219 | } |
pinofal | 8:3c919f5d6036 | 220 | else |
pinofal | 8:3c919f5d6036 | 221 | { |
pinofal | 8:3c919f5d6036 | 222 | // spegni Out3 e comunica al PC |
pinofal | 8:3c919f5d6036 | 223 | pc.printf("Out3: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 224 | myOut3 = 0; |
pinofal | 8:3c919f5d6036 | 225 | } |
pinofal | 8:3c919f5d6036 | 226 | } // if (comando ricevuto contiene "WriteGPIO") |
pinofal | 8:3c919f5d6036 | 227 | |
pinofal | 8:3c919f5d6036 | 228 | |
pinofal | 8:3c919f5d6036 | 229 | // COMANDO DI PILOTAGGIO CANBUS: Il comando ricevuto per il pilotaggio CANBUS è "CAN-abcd" |
pinofal | 8:3c919f5d6036 | 230 | // a=1/0: accende/spegne il LED di diagnostica LED2 |
pinofal | 8:3c919f5d6036 | 231 | // b=1/0: chiude/apre i relay del connettore 1: Relay11 e Relay12 |
pinofal | 8:3c919f5d6036 | 232 | // c=1/0: chiude/apre i relay del connettore 2: Relay21 e Relay22 |
pinofal | 8:3c919f5d6036 | 233 | // d=1/0: chiude/apre i relay del connettore 3: Relay31 e Relay32 |
pinofal | 8:3c919f5d6036 | 234 | // verifica se nel comando ricevuto è presente la strinca CAN; |
pinofal | 8:3c919f5d6036 | 235 | cCmdPosition=strstr(caRxPacket, "CAN"); |
pinofal | 8:3c919f5d6036 | 236 | if(cCmdPosition != NULL) // se il comando ricevuto contiene CAN, procedi con l'analisi dei dati |
pinofal | 8:3c919f5d6036 | 237 | { |
pinofal | 8:3c919f5d6036 | 238 | // si posiziona sul delimitatore '-' , tra il comando e i dati ed estrae la stringa contenente lo stato da inviare sugli Output |
pinofal | 8:3c919f5d6036 | 239 | cCmdPosition = strtok(caRxPacket,"-"); |
pinofal | 8:3c919f5d6036 | 240 | cCmdPosition = strtok(NULL,"-"); |
pinofal | 8:3c919f5d6036 | 241 | pc.printf("CAN-Data: %s\n\r", cCmdPosition); |
pinofal | 8:3c919f5d6036 | 242 | |
pinofal | 8:3c919f5d6036 | 243 | // Resetta: per commutare, apre tutti i relay di commutazione del CANBUS. Negli if() successivi aprirà i canali indirizzati |
pinofal | 8:3c919f5d6036 | 244 | myRelayH1 = 0; |
pinofal | 8:3c919f5d6036 | 245 | myRelayL1 = 0; |
pinofal | 8:3c919f5d6036 | 246 | myNotRelayH2 = 1; |
pinofal | 8:3c919f5d6036 | 247 | myNotRelayL2 = 1; |
pinofal | 8:3c919f5d6036 | 248 | myNotRelayH3 = 1; |
pinofal | 8:3c919f5d6036 | 249 | myRelayL3 = 0; |
pinofal | 8:3c919f5d6036 | 250 | |
pinofal | 8:3c919f5d6036 | 251 | // USER_LED LED2 se il dato ricevto è '0/1' spegni/accendi il LED |
pinofal | 8:3c919f5d6036 | 252 | if(cCmdPosition[0]=='1') |
pinofal | 8:3c919f5d6036 | 253 | { |
pinofal | 8:3c919f5d6036 | 254 | // Accendi LED e comunica al PC |
pinofal | 8:3c919f5d6036 | 255 | pc.printf("Led2: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 256 | myLed2 = 1; |
pinofal | 8:3c919f5d6036 | 257 | } |
pinofal | 8:3c919f5d6036 | 258 | else |
pinofal | 8:3c919f5d6036 | 259 | { |
pinofal | 8:3c919f5d6036 | 260 | // spegni LED e comunica al PC |
pinofal | 8:3c919f5d6036 | 261 | pc.printf("Led2: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 262 | myLed2 = 0; |
pinofal | 8:3c919f5d6036 | 263 | } |
pinofal | 8:3c919f5d6036 | 264 | // CAN1: attiva il CAN sul connettore 1 |
pinofal | 8:3c919f5d6036 | 265 | if(cCmdPosition[1]=='1') |
pinofal | 8:3c919f5d6036 | 266 | { |
pinofal | 8:3c919f5d6036 | 267 | // Chiudi relay del connettore identificato e comunica al PC |
pinofal | 8:3c919f5d6036 | 268 | pc.printf("RelayH1: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 269 | pc.printf("RelayL1: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 270 | myRelayH1 = 1; |
pinofal | 8:3c919f5d6036 | 271 | myRelayL1 = 1; |
pinofal | 8:3c919f5d6036 | 272 | //myTest = 1; // solo per scopi di debug |
pinofal | 8:3c919f5d6036 | 273 | } |
pinofal | 8:3c919f5d6036 | 274 | else |
pinofal | 8:3c919f5d6036 | 275 | { |
pinofal | 8:3c919f5d6036 | 276 | // Apri relay del connettore identificato e comunica al PC |
pinofal | 8:3c919f5d6036 | 277 | pc.printf("RelayH1: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 278 | pc.printf("RelayL1: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 279 | myRelayH1 = 0; |
pinofal | 8:3c919f5d6036 | 280 | myRelayL1 = 0; |
pinofal | 8:3c919f5d6036 | 281 | //myTest = 0; // solo per scopi di debug |
pinofal | 8:3c919f5d6036 | 282 | } |
pinofal | 8:3c919f5d6036 | 283 | // CAN2: attiva il CAN sul connettore 2 |
pinofal | 8:3c919f5d6036 | 284 | if(cCmdPosition[2]=='1') |
pinofal | 8:3c919f5d6036 | 285 | { |
pinofal | 8:3c919f5d6036 | 286 | // Chiudi relay del connettore identificato e comunica al PC |
pinofal | 8:3c919f5d6036 | 287 | pc.printf("RelayH2: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 288 | pc.printf("RelayL2: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 289 | myNotRelayH2 = 0; |
pinofal | 8:3c919f5d6036 | 290 | myNotRelayL2 = 0; |
pinofal | 8:3c919f5d6036 | 291 | } |
pinofal | 8:3c919f5d6036 | 292 | else |
pinofal | 8:3c919f5d6036 | 293 | { |
pinofal | 8:3c919f5d6036 | 294 | // Apri relay del connettore identificato e comunica al PC |
pinofal | 8:3c919f5d6036 | 295 | pc.printf("RelayH2: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 296 | pc.printf("RelayL2: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 297 | myNotRelayH2 = 1; |
pinofal | 8:3c919f5d6036 | 298 | myNotRelayL2 = 1; |
pinofal | 8:3c919f5d6036 | 299 | } |
pinofal | 8:3c919f5d6036 | 300 | // CAN2: attiva il CAN sul connettore 3 |
pinofal | 8:3c919f5d6036 | 301 | if(cCmdPosition[3]=='1') |
pinofal | 8:3c919f5d6036 | 302 | { |
pinofal | 8:3c919f5d6036 | 303 | // Chiudi relay del connettore identificato e comunica al PC |
pinofal | 8:3c919f5d6036 | 304 | pc.printf("RelayH3: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 305 | pc.printf("RelayL3: ON\n\r"); |
pinofal | 8:3c919f5d6036 | 306 | myNotRelayH3 = 0; |
pinofal | 8:3c919f5d6036 | 307 | myRelayL3 = 1; |
pinofal | 8:3c919f5d6036 | 308 | } |
pinofal | 8:3c919f5d6036 | 309 | else |
pinofal | 8:3c919f5d6036 | 310 | { |
pinofal | 8:3c919f5d6036 | 311 | // Apri relay del connettore identificato e comunica al PC |
pinofal | 8:3c919f5d6036 | 312 | pc.printf("RelayH3: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 313 | pc.printf("RelayL3: OFF\n\r"); |
pinofal | 8:3c919f5d6036 | 314 | myNotRelayH3 = 1; |
pinofal | 8:3c919f5d6036 | 315 | myRelayL3 = 0; |
pinofal | 8:3c919f5d6036 | 316 | } |
pinofal | 8:3c919f5d6036 | 317 | }// if (comando ricevuto contiene "CAN") |
pinofal | 8:3c919f5d6036 | 318 | } |
pinofal | 8:3c919f5d6036 | 319 | } |
pinofal | 8:3c919f5d6036 | 320 | |
pinofal | 8:3c919f5d6036 | 321 | //********************************************** |
pinofal | 8:3c919f5d6036 | 322 | // IRQ per la Rx su seriale |
pinofal | 8:3c919f5d6036 | 323 | //********************************************** |
pinofal | 8:3c919f5d6036 | 324 | int main() |
pinofal | 8:3c919f5d6036 | 325 | { |
pinofal | 8:3c919f5d6036 | 326 | // array per la ricezione dei messaggi da seriale |
pinofal | 8:3c919f5d6036 | 327 | //char caRxPacket[PACKETDIM]; |
pinofal | 8:3c919f5d6036 | 328 | //int nRxPacketSize; |
pinofal | 8:3c919f5d6036 | 329 | |
pinofal | 8:3c919f5d6036 | 330 | // puntatore al comando, nella stringa ricevuta sulla seriale |
pinofal | 8:3c919f5d6036 | 331 | //char* cCmdPosition; |
pinofal | 8:3c919f5d6036 | 332 | |
pinofal | 8:3c919f5d6036 | 333 | // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto |
pinofal | 8:3c919f5d6036 | 334 | //pc.baud(56000); // 57600 bps |
pinofal | 8:3c919f5d6036 | 335 | pc.baud(9600); // 9600 bps |
pinofal | 8:3c919f5d6036 | 336 | //pc.baud(19200); // 19200 bps |
pinofal | 8:3c919f5d6036 | 337 | //pc.baud(57600); // a questa velocità CVI sulla USB del PC perde dei dati |
pinofal | 8:3c919f5d6036 | 338 | //pc.baud(921600); // a questa velocità CVI sulla USB del PC perde dei dati |
pinofal | 8:3c919f5d6036 | 339 | |
pinofal | 8:3c919f5d6036 | 340 | // inizializza il LED |
pinofal | 8:3c919f5d6036 | 341 | myLed1 = 1; |
pinofal | 8:3c919f5d6036 | 342 | myLed2 = 1; |
pinofal | 8:3c919f5d6036 | 343 | myLed3 = 1; |
pinofal | 8:3c919f5d6036 | 344 | wait(1); |
pinofal | 8:3c919f5d6036 | 345 | myLed1 = 0; |
pinofal | 8:3c919f5d6036 | 346 | myLed2 = 0; |
pinofal | 8:3c919f5d6036 | 347 | myLed3 = 0; |
pinofal | 8:3c919f5d6036 | 348 | |
pinofal | 8:3c919f5d6036 | 349 | // configura il Button come input PullUp. Non premuto = 1, Premuto = 0; |
pinofal | 8:3c919f5d6036 | 350 | //+++ myButton.mode(PullUp); //Questo funziona con la F401 |
pinofal | 8:3c919f5d6036 | 351 | myButton.mode(PullDown); //Questo funziona con la F207 |
pinofal | 8:3c919f5d6036 | 352 | |
pinofal | 8:3c919f5d6036 | 353 | // configura gli input come PullUp. Aperto = 1; |
pinofal | 8:3c919f5d6036 | 354 | myIn1.mode(PullUp); |
pinofal | 8:3c919f5d6036 | 355 | myIn2.mode(PullUp); |
pinofal | 8:3c919f5d6036 | 356 | myIn3.mode(PullUp); |
pinofal | 8:3c919f5d6036 | 357 | myIn4.mode(PullUp); |
pinofal | 8:3c919f5d6036 | 358 | myIn5.mode(PullUp); |
pinofal | 8:3c919f5d6036 | 359 | |
pinofal | 8:3c919f5d6036 | 360 | /********** START Ciclo di test ******* |
pinofal | 8:3c919f5d6036 | 361 | while(true) |
pinofal | 8:3c919f5d6036 | 362 | { |
pinofal | 8:3c919f5d6036 | 363 | //if(myButton == 0) |
pinofal | 8:3c919f5d6036 | 364 | { |
pinofal | 8:3c919f5d6036 | 365 | myLed1 = 1; |
pinofal | 8:3c919f5d6036 | 366 | myLed2 = 1; |
pinofal | 8:3c919f5d6036 | 367 | myLed3 = 1; |
pinofal | 8:3c919f5d6036 | 368 | |
pinofal | 8:3c919f5d6036 | 369 | myTest = 0; |
pinofal | 8:3c919f5d6036 | 370 | myRelayH1 = 0; |
pinofal | 8:3c919f5d6036 | 371 | myRelayL1 = 0; |
pinofal | 8:3c919f5d6036 | 372 | myRelayH2 = 0; |
pinofal | 8:3c919f5d6036 | 373 | myRelayL2 = 0; |
pinofal | 8:3c919f5d6036 | 374 | myRelayH3 = 0; |
pinofal | 8:3c919f5d6036 | 375 | myRelayL3 = 0; |
pinofal | 8:3c919f5d6036 | 376 | |
pinofal | 8:3c919f5d6036 | 377 | |
pinofal | 8:3c919f5d6036 | 378 | } |
pinofal | 8:3c919f5d6036 | 379 | //else |
pinofal | 8:3c919f5d6036 | 380 | wait (1); |
pinofal | 8:3c919f5d6036 | 381 | { |
pinofal | 8:3c919f5d6036 | 382 | myLed1 = 0; |
pinofal | 8:3c919f5d6036 | 383 | myLed2 = 0; |
pinofal | 8:3c919f5d6036 | 384 | myLed3 = 0; |
pinofal | 8:3c919f5d6036 | 385 | |
pinofal | 8:3c919f5d6036 | 386 | myTest =1; |
pinofal | 8:3c919f5d6036 | 387 | myRelayH1 = 1; |
pinofal | 8:3c919f5d6036 | 388 | myRelayL1 = 1; |
pinofal | 8:3c919f5d6036 | 389 | myRelayH2 = 1; |
pinofal | 8:3c919f5d6036 | 390 | myRelayL2 = 1; |
pinofal | 8:3c919f5d6036 | 391 | myRelayH3 = 1; |
pinofal | 8:3c919f5d6036 | 392 | myRelayL3 = 1; |
pinofal | 8:3c919f5d6036 | 393 | } |
pinofal | 8:3c919f5d6036 | 394 | wait(1); |
pinofal | 8:3c919f5d6036 | 395 | } |
pinofal | 8:3c919f5d6036 | 396 | ********* END Ciclo di test ********/ |
pinofal | 8:3c919f5d6036 | 397 | |
pinofal | 8:3c919f5d6036 | 398 | // Attiva la IRQ per la RX su seriale |
pinofal | 8:3c919f5d6036 | 399 | pc.attach(&RxInterrupt,Serial::RxIrq); |
pinofal | 8:3c919f5d6036 | 400 | |
pinofal | 8:3c919f5d6036 | 401 | // ciclo in cui attende interrupt |
pinofal | 8:3c919f5d6036 | 402 | while(true) |
pinofal | 8:3c919f5d6036 | 403 | { |
pinofal | 8:3c919f5d6036 | 404 | } |
pinofal | 8:3c919f5d6036 | 405 | } |