Robot a rilevazione di ostacoli
7.SOFTWARE
La programmazione dei PIC avviene mediante 2 software: MPLAB IDE, e IC PROG. Il primo software richiede almeno una conoscenza di base del C. Il programma da noi ideato è il seguente:
#include <p18f452.h> #include <delays.h> #pragma config OSC = HS // 20Mhz #pragma config WDT = OFF // disabilito il watchdog timer #pragma config LVP = OFF // disabilito programmazione LVP void main (void) { TRISA = 0xFF; // Tutti ingressi inutilizzati PORTA = 0x00; TRISB = 0x00; // Tutte uscite x il DRIVER MOTORI PORTB = 0x00; TRISC = 0xFF; // Tutti ingressi inutilizzati PORTC = 0x00; TRISD = 0xFF; // Tutti ingressi inutilizzati PORTD = 0x00; TRISE = 0xFF; // Tutti ingressi inutilizzati PORTE = 0x00; while (1) switch (PORTC) { case 0X03: // MANCA IL PAVIMENTO PORTB = 0x00; // stop!!! Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec PORTB = 0x1B; // indietro Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec PORTB = 0x1D; // girati a sx di 180° Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec break; case 0X08: // OSTACOLO A SX PORTB = 0x00; // stop!!! Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec PORTB = 0x1B; // indietro Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec PORTB = 0x2B; // girati a dx di 180° Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec break; case 0X04: // OSTACOLO A DX PORTB = 0x00; // stop!!! Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec PORTB = 0x1B; // indietro Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec PORTB = 0x1D; // girati a dx di 180° Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec break; case 0X0C: // OSTACOLO A DX E SX PORTB = 0x00; // stop!!! Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec PORTB = 0x1B; // indietro Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec PORTB = 0x1D; // girati a dx di 180° Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec Delay10KTCYx(100); // ritardo di 0.5sec break; case 0X00: PORTB = 0X2D; break; default: {PORTB=0;break;} // IN QUALSIASI ALTRA CONDIZIONE STOP!!