Versione recente
Dependencies: mbed
Revision 20:513676b984bf, committed 2020-09-03
- Comitter:
- francesco01
- Date:
- Thu Sep 03 08:20:54 2020 +0000
- Parent:
- 19:19892c59a33b
- Commit message:
- Versione recente
Changed in this revision
MicRobot-Rev087.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 19892c59a33b -r 513676b984bf MicRobot-Rev087.cpp --- a/MicRobot-Rev087.cpp Thu Jul 09 14:43:47 2020 +0000 +++ b/MicRobot-Rev087.cpp Thu Sep 03 08:20:54 2020 +0000 @@ -79,6 +79,7 @@ DigitalIn AntInNE1 (PB_10); // Input per acquisire i segnali NET1 in output dall'encoder Anteriore DigitalOut WatchDog (PB_0); // output WatchDog che deve oscillare con un periodo t < 1.5 s PwmOut MotoreCoda (PB_8); // Output movimento coda +DigitalInOut SwitchRouter (PB_9, PIN_OUTPUT, OpenDrain, 0); //Uscita opendrain No Pull //carattere di comando ricevuto dal BLE e relativo parametro @@ -216,14 +217,14 @@ cReadChar = myBLE.getc(); // Read character //caRxPacket[nCharCount]=cReadChar; //nCharCount++; - pc.printf("%c", cReadChar); // diagnostica + // pc.printf("%c", cReadChar); // diagnostica // acquisisce il carattere di start comando o coordinate da APP if(cReadChar=='(') { // acquisisce il primo carattere di comando o di coordinate cReadChar = myBLE.getc(); // Read character - pc.printf("%c", cReadChar); // diagnostica + // pc.printf("%c", cReadChar); // diagnostica // +++++++++++++++++ INIZIO gestione Comando da Button +++++++++++++++++ // Ho ricevuto il comando da un Button se il primo carattere è una lettera maiuscola tra A e T @@ -233,13 +234,13 @@ cCommandBLE = cReadChar; // legge e memorizza come paramentro il successivo carattere cReadChar = myBLE.getc(); // legge parametro - pc.printf("%c", cReadChar); // diagnostica + // pc.printf("%c", cReadChar); // diagnostica nParamBLE = cReadChar-0x30; cReadChar = myBLE.getc(); // legge la ')' di chiusura comando - pc.printf("%c", cReadChar); // diagnostica + //pc.printf("%c", cReadChar); // diagnostica // visualizza comando e parametro inviato da BLE - pc.printf("> %c%d \r\n\r",cCommandBLE, nParamBLE); // diagnostica + // pc.printf("> %c%d \r\n\r",cCommandBLE, nParamBLE); // diagnostica } // +++++++++++++++++ FINE gestione Comando da Button +++++++++++++++++ else @@ -253,7 +254,7 @@ cReadChar = myBLE.getc(); // Read character caRxPacket[nCharCount]=cReadChar; nCharCount++; - pc.printf("%c", cReadChar); // diagnostica + // pc.printf("%c", cReadChar); // diagnostica } while((cReadChar >= 0x30) && (cReadChar <= 0x39)); //+++++++++ FINE acquisisce il valore dell'ascissa Xnnn +++++++++++++++ @@ -277,7 +278,7 @@ cReadChar = myBLE.getc(); // Read character caRxPacket[nCharCount]=cReadChar; nCharCount++; - pc.printf("%c", cReadChar); // diagnostica + // pc.printf("%c", cReadChar); // diagnostica } while((cReadChar >= 0x30) && (cReadChar <= 0x39)); //+++++++++ FINE acquisisce il valore dell'ordinata Ynnn +++++++++++++++ @@ -294,27 +295,27 @@ // se riceve la coda del comando ), stampa le coordinate ricevute if(cReadChar==')') { - pc.printf("(fX , fY) = (%.1f , %.1f) \r\n", fX, fY); // diagnostica + // pc.printf("(fX , fY) = (%.1f , %.1f) \r\n", fX, fY); // diagnostica // trasporta x e y nei range desiderati fY= 100 - fY; fX = fX - 100; - pc.printf("\n\r(fX , fY) traslate = (%.1f , %.1f) \r\n\n", fX, fY); // diagnostica + // pc.printf("\n\r(fX , fY) traslate = (%.1f , %.1f) \r\n\n", fX, fY); // diagnostica } else // dopo la Y e i numeri, mi attendo parentesi chiusa ) { - pc.printf("> Errore = %c invece di ) \r\n\n", cReadChar); // diagnostica + pc.printf("> Errore 1 invece di ) \r\n\n"); // diagnostica } } else // dopo la X e i numeri mi aspetto Y { - pc.printf("> Errore = %c invece di Y \r\n\n", cReadChar); // diagnostica + pc.printf("> Errore 2 invece di Y \r\n\n"); // diagnostica } } else // dopo la ( mi aspetto Y { - pc.printf("> Errore = %c invece di X \r\n\n", cReadChar); // diagnostica + pc.printf("> Errore 3 invece di X \r\n\n"); // diagnostica } } // if(comandi alfanumerici) } // if(cReadChar == '(') @@ -368,18 +369,18 @@ nCountRiseEdge=0; // non ci sono variazioni di numero di impulsi fSpeed =0.0; fDistanzaPercorsa = 0.0; - myBLE.printf("*WSpeed= %.2f [m/s]; Trip= %.2f [m]\n\r*",fSpeed, fDistanzaPercorsa ); //*W=carattere di riconoscimento per comunicazione con APP (inviare messaggio) + // myBLE.printf("*WSpeed= %.2f [m/s]; Trip= %.2f [m]\n\r*",fSpeed, fDistanzaPercorsa ); //*W=carattere di riconoscimento per comunicazione con APP (inviare messaggio) } // stimola il watchdog esterno facendo oscillare la linea WatchDog if(WatchDog == 0) { WatchDog = 1; - pc.printf("WatchDog = 1\n\r"); + // pc.printf("WatchDog = 1\n\r"); } else { WatchDog = 0; - pc.printf("WatchDog = 0\n\r"); + // pc.printf("WatchDog = 0\n\r"); } //++++++++++++++++++++++++++ FINE Calcola spostamento odometrico e velocità +++++++++++++++++++++++++++++++++++++++++++++ } @@ -391,16 +392,20 @@ /**********/ int main() { - // inizializza PWM del motore coda - MotoreCoda.period_ms(50); // periodo PWM - bCodaInMovimento = false; // messaggio di benvenuto pc.printf("\r\n************ Hallo ****************** \r\n"); pc.printf("*** Modulo di Ispezione Condutture ***\r\n"); - myBLE.printf("*W \r\nHallo\r\n*"); - myBLE.printf("*W Modulo di Ispezione Condutture \r\n*"); + // myBLE.printf("*W \r\nHallo\r\n*"); + //myBLE.printf("*W Modulo di Ispezione Condutture \r\n*"); + // inizializza PWM del motore coda + MotoreCoda.period_ms(50); // periodo PWM + bCodaInMovimento = false; + MotoreCoda.write (0.0); + // inizializza Opendrain + SwitchRouter.mode (PullNone); + // inizializza variabili da BLE cCommandBLE = 0; // inizialmente nessun comando da BLE cOldCommandBLE = 0; // inizialmente nessun comando da BLE @@ -480,39 +485,18 @@ //++++++++++++++++++++++++++++++ FINE Test WatchDog +++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++ INIZIO Test motore Coda +++++++++++++++++++++++++++++++++++++++++ - /* + //pc.printf("Coda in movimento \n\r"); //diagnostica - while(true) - { - - if ( ( fX != 0 ) || (fY != 0)) - { - if(!bCodaInMovimento) // attiva il PWM solo se la coda è ferma - { - MotoreCoda.write (0.6); - bCodaInMovimento = true; - pc.printf("Coda in movimento \n\r"); - } - } - else - { - // il joystick è in posizione (0,0), ferma la coda e comunica una sola volta che la velocità è 0 - if(bCodaInMovimento) // spegne il PWM solo se la coda è in movimento - { - pc.printf("Coda ferma \n\r"); - MotoreCoda.write (0.0); - bCodaInMovimento = false; - // comunica al cellulare vleocità nulla - // Disattiva/Attiva la IRQ per la RX su seriale e sulla Rx della BLE - //NVIC_DisableIRQ(USART1_IRQn); - myBLE.printf("Speed= %.2f [m/s]; Trip= %.2f [m]\n\r", 100.0, 1000 ); - //NVIC_EnableIRQ(USART1_IRQn); - - } - } - + /* while(true) + { + MotoreCoda.write (0.6); + pc.printf("*** Acceso ***\r\n"); + wait (1); + MotoreCoda.write (0.0); + pc.printf("*** Spento ***\r\n"); + wait (1); } - */ + */ //++++++++++++++++++++++++++++++ FINE Test Motore Coda +++++++++++++++++++++++++++++++++++++++++++ @@ -522,37 +506,34 @@ while(true) { - - //++++++++++++++++++++++++++ INIZIO Interpreta Comandi da Pulsanti della APP ++++++++++++++++++++++++++++++++++++++++++++ - - if ((fX!=0) || (fY!=0)) //la coda non si muove se il Joystick è nella posizione (0,0) - { - // il joystick è in posizione diversa da (0,0), fai muovere la coda - if(!bCodaInMovimento) // attiva il PWM solo se la coda è ferma - { - //pc.printf("Coda in movimento \n\r"); //diagnostica - MotoreCoda.write (0.4); - bCodaInMovimento = true; - - } - } - else - { - // il joystick è in posizione (0,0), ferma la coda e comunica una sola volta che la velocità è 0 - if(bCodaInMovimento) // spegne il PWM solo se la coda è in movimento - { - //pc.printf("Coda ferma \n\r"); //diagnostica - MotoreCoda.write (0.0); - bCodaInMovimento = false; - // comunica al cellulare vleocità nulla - // Disattiva/Attiva la IRQ per la RX su seriale e sulla Rx della BLE - //NVIC_DisableIRQ(USART1_IRQn); - //myBLE.printf("Speed= 0.0 [m/s]; Trip= %.2f [m]\n\r", fDistanzaPercorsa ); - //NVIC_EnableIRQ(USART1_IRQn); - - } - } - + if ((fX!=0) || (fY!=0)) //la coda non si muove se il Joystick è nella posizione (0,0) + { + // il joystick è in posizione diversa da (0,0), fai muovere la coda + if(!bCodaInMovimento) // attiva il PWM solo se la coda è ferma + { + //pc.printf("Coda in movimento \n\r"); //diagnostica + MotoreCoda.write (0.4); + bCodaInMovimento = true; + + } + } + else + { + // il joystick è in posizione (0,0), ferma la coda e comunica una sola volta che la velocità è 0 + if(bCodaInMovimento) // spegne il PWM solo se la coda è in movimento + { + //pc.printf("Coda ferma \n\r"); //diagnostica + MotoreCoda.write (0.0); + bCodaInMovimento = false; + // comunica al cellulare vleocità nulla + // Disattiva/Attiva la IRQ per la RX su seriale e sulla Rx della BLE + //NVIC_DisableIRQ(USART1_IRQn); + //myBLE.printf("Speed= 0.0 [m/s]; Trip= %.2f [m]\n\r", fDistanzaPercorsa ); + //NVIC_EnableIRQ(USART1_IRQn); + + } + } + //++++++++++++++++++++++++++ INIZIO Interpreta Comandi da Pulsanti della APP ++++++++++++++++++++++++++++++++++++++++++++ if((cCommandBLE != cOldCommandBLE) || (nParamBLE != nOldParamBLE)) { switch (cCommandBLE) @@ -561,17 +542,22 @@ { myLed = nParamBLE; } break; + case 'C': // accendi/spegni LED su scheda + { + if (nParamBLE == 1) + { + SwitchRouter = 1; + // pc.printf("acceso\n\r"); + } + else + { + SwitchRouter = 0; + // pc.printf("spento\n\r"); + } + } break; case 'L': // Accendi/spegni illuminazione a LED { Light = nParamBLE; - /* if (nParamBLE == 1) - { - myBLE.printf("*lR250G0B100*"); - } - else - { - myBLE.printf("*lR0G0B0*"); - }*/ } break; case 'R': // Reset odometria e illuminazione { @@ -627,9 +613,8 @@ // comunica al cellulare vleocità e spostamento mentre si sta spostando // Attiva la IRQ per la RX su seriale e sulla Rx della BLE NVIC_DisableIRQ(USART1_IRQn); - myBLE.printf("*WSpeed= %.2f [m/s]; Trip= %.2f [m]\n\r*",fSpeed, fDistanzaPercorsa ); + // myBLE.printf("*WSpeed= %.2f [m/s]; Trip= %.2f [m]\n\r*",fSpeed, fDistanzaPercorsa ); NVIC_EnableIRQ(USART1_IRQn); - // algoritmo di movimentazione delle ruote. if(fR < 0) //Ruota destra motorizzata coincide con quella posteriore { @@ -679,7 +664,6 @@ } AntOutPWB.write(float(fL/100.0)); // DutyCycle del PWM Sinistro (Anteriore) } //if( (fX != fOldX) || (fY != fOldY)) - //++++++++++++++++++++++ FINE Ottieni X e Y dal Joystick e trasformali in comandi per il motore Right e Left +++++++++++++++++++++++++++++ } //while (true) Ciclo principale