Test CBS-GPIO-CAN

Dependencies:   mbed

Fork of Amplificatore_bomboni_rev2 by Giuseppe Falagario

Committer:
pinofal
Date:
Fri Jul 27 14:27:58 2018 +0000
Revision:
8:3c919f5d6036
Test CBS-GPIO-CAN

Who changed what in which revision?

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