Resumé
Vous avez besoin de deux hubs et de deux roues de chaque type. J'utilise des joints toriques de 30 mm x 40 mm x 5 mm disponibles sur Amazon. Vous avez besoin de 4 vis M3 x 25 mm pour fixer les moteurs et de 2 vis de 8-32 3/4" pour un ensemble de roues. Vous avez besoin de deux moteurs disponibles chez Sparkfun (2 moteurs hobby pour 5 $), d'un contrôleur de moteur à balais de Spark
https://www.youtube.com/watch?v=ioGz1LwgC6o
Il semble que certaines des inclusions dans le code confondent le processeur HTML.
/*
- Fichier : R06Main.c
- Auteur : hmikelson.
- Créé le 4 septembre 2018, à 18h11.
*/
inclure
inclure
inclure
Pragma configure MCLRE=OFF, CP=OFF, WDTE=OFF, FOSC=INTOSC
Définissez _XTAL_FREQ à 16000000.
char non signé sPORTA, sPORTC, pwmax=31 ;
void init()
{
//Configurez le port GPIO.
TRISA = 0b110000000 ; // Définissez toutes les sorties.
TRISC = 0b110001000 ; //Configurez la broche 3 pour l'entrée.
OSCCONbits.IRCF = 0b1111 ;
OSCCONbits.SCS = 0b00 ;
//OPTION_REG = 0b01111111 ; //Activation globale des tirages de résistance faibles.
//WPUC = 0b00001000 ; //Activer les pull-ups faibles avec un 1.
// Configurer l'entrée analogique.
ANSELCbits.ANSC3 = 1 ;
ADCON0 = 0b00011101 ; // Canal (CHS4 : 0 bits 6-2), le bit ADON 1 active l'analogique.
ADCON1bits.ADCS = 0b111 ; // sélection de l'horloge pour l'oscillateur dédié.
ADCON1bits.ADNREF = 0 ; // référence négative
ADCON1bits.ADPREF = 0 ; // configuration + tension avec vdd
ADCON1bits.ADFM = 1 ; //format justifié à gauche
ADRESH = 0x00 ; // Initialise le registre AD.
ADRESL = 0x00 ; // Je ne pense pas que cela soit nécessaire.
)
void vdelay(int n)
{
int i ;
pour (i=0;i<=n;i++)
{
__delay_us(100);
}
}
int read_v()
// Lire la tension de l'entrée.
{
int val,v1,v2 ;
__delay_ms(1);
ADCON0bits.GO_nDONE = 1 ;
Tant que (ADCON0bits.GO_nDONE == 1) ;
v1 = ADRESH ;
v2 = ADRESL ;
val = (v1 << 8) + v2 ;
retourne val ;
}
// Faire avancer le robot.
void RobotFd(int temps, caractère non signé vitesse)
{
int i, j ;
pour (i=0;i<temps;i++)
{
pour (j=0 ; j<pwmax ; j++)
{
si (j<vitesse)
{
PORTA = 0b00111110 ; //
PORTC = 0b00010110 ; // Activer sur la broche 4
vdelay(pwmax/speed);
}
sinon
{
PORTA = 0b00000110 ; // Je pense qu'il y a une sortie d'horloge sur la broche 4, mais je ne sais pas comment la désactiver.
PORTC = 0b00010010 ; // Activer sur la broche 4
vdelay(pwmax/speed);
}
)
// Conduire le robot en arrière.
void RobotBk(int time, unsigned char speed)
{
int i, j ;
pour (i=0;i<temps;i++)
{
pour (j=0 ; j<pwmax ; j++)
{
si (j<vitesse)
{
PORTA = 0b00111101 ;
PORTC = 0b00010101 ;
vdelay(pwmax/speed);
}
sinon
{
PORTA = 0b00000101 ;
PORTC = 0b00010001 ;
vdelay(pwmax/speed);
}
}
void RobotRt(int time, unsigned char speed)
{
int i, j ;
pour (i=0;i<temps;i++)
{
pour (j=0 ; j<pwmax ; j++)
{
si (j<vitesse)
{
PORTA = 0b00111110 ;
PORTC = 0b00010101 ;
vdelay(pwmax/speed);
}
sinon
{
PORTA = 0b00000110 ;
PORTC = 0b00001001 ;
vdelay(pwmax/speed);
}
}
void RobotLt(int time, unsigned char speed)
{
int i, j ;
pour (i=0;i<temps;i++)
{
pour (j=0 ; j<pwmax ; j++)
{
si (j<vitesse)
{
PORTA = 0b00111101 ;
PORTC = 0b00110110 ;
vdelay(pwmax/speed);
}
sinon
{
PORTA = 0b00000101 ;
PORTC = 0b00001010 ;
vdelay(pwmax/speed);
}
)
void RobotSt(int temps)
{
int i ;
pour (i=0;i<temps;i++)
{
PORTA = 0b00000100 ;
PORTC = 0b00001100 ;
__delay_ms(10);
}
)
void main()
{
int rmode, rtime, volts,mt=31 ;
Un caractère non signé rspeed, nactions=0 ;
init();
RobotFd(100, pwmax/2);
RobotSt(1);
RobotRt(100,pwmax/2);
RobotSt(1);
RobotBk(100,pwmax/2);
RobotSt(1);
RobotLt(100,pwmax/2);
RobotSt(1);
pendant(1)
{
si (nations > 0)
{
rmode = (rand() & 7) + 1 ;
nations=nations-1 ;
}
sinon
{
rmode = 0 ;
}
rtime = (rand() & 7) + 1 ;
rspeed = rand() & pwmax ;
switch (rmode)
{
Case 1 :
RobotFd(rtime <)mt,rspeed);
RobotSt(1);
Pause ;
Cas 2 :
RobotBk(rtimemt,rspeed);
RobotSt(1);
pause ;
Cas 3 :
RobotRt(rtime <-- Ce code n'est pas correctement formaté. Il devrait ressembler à ceci : RobotRtmt,rspeed);
RobotSt(1);
Pause ;
Case 4 :
RobotLt (temps restant)mt,rspeed);
RobotSt(1);
pause ;
Cas 0 :
RobotSt(1);
volts = read_v();
si (volts>50)
{
nations = 10 ;
//blink(volts);
}
pause ;
Par défaut :
RobotSt(10);
pause ;
}
}
}
Tags
Modellquelle
