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!!

Share Button

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.