Zusammenfassung
Du brauchst zwei Hubs und zwei von jeder Art von Rädern. Ich verwende 30 mm x 40 mm x 5 mm O-Ringe, die bei Amazon erhältlich sind. Du brauchst 4 M3 x 25 mm Schrauben, um die Motoren zu befestigen, und 2 x 8-32 3/4" Schrauben für einen Satz Räder. Du brauchst zwei Motoren, die bei Sparkfun erhältlich sind (Hobby-Motoren zu 2 $ pro Stück), einen bürstenbehafteten
https://www.youtube.com/watch?v=ioGz1LwgC6o
Es sieht so aus, als ob einige der Includes im Code den HTML-Prozessor verwirren.
/*
- Datei: R06Main.c
- Autor: hmikelson
- Erstellt am 4. September 2018, 18:11 Uhr
*/
einbeziehen
einbeziehen
einbeziehen
Pragma-Konfiguration MCLRE=OFF, CP=OFF, WDTE=OFF, FOSC=INTOSC
Define _XTAL_FREQ 16000000
Unsignierter Charakter sPORTA, sPORTC, pwmax=31;
void init()
{
//GPIO-Port konfigurieren
TRISA = 0b110000000; //Setze alle Ausgänge
TRISC = 0b110001000; // Richten Sie Pin 3 für Eingang ein
OSCCONbits.IRCF = 0b1111;
OSCCONbits.SCS = 0b00;
//OPTION_REG = 0b01111111; //Global aktiviere schwache Pullups
//WPUC = 0b00001000; //Aktiviere schwache Pullups mit einer 1
// Richten Sie den analogen Eingang ein
ANSELCbits.ANSC3 = 1;
ADCON0 = 0b00011101; //Kanal (CHS4: 0 Bits 6-2), ADON Bit 1 aktiviert Analog
ADCON1bits.ADCS = 0b111; // Taktwahl für dedizierten Oszillator
ADCON1bits.ADNREF = 0; //negativer Bezugspunkt
ADCON1bits.ADPREF = 0; // Konfiguration + Spannung mit VDD
ADCON1bits.ADFM = 1; //Format linksbündig
ADRESH = 0x00; //Initiere das AD-Register
ADRESL = 0x00; // Ich glaube nicht, dass das nötig ist.
)
void vdelay(int n)
{
int i;
für (i=0;i<=n;i++)
{
__delay_us(100);
}
}
int read_v()
// Spannung vom Eingang lesen
{
int val,v1,v2;
__delay_ms(1);
ADCON0bits.GO_nDONE = 1;
während (ADCON0bits.GO_nDONE == 1);
v1 = ADRESH;
v2 = ADRESL;
val = (v1 << 8) + v2;
return val;
}
// Den Roboter nach vorne fahren
void RobotFd(int Zeit, unsigned char Geschwindigkeit)
{
int i, j;
für (i=0;i<time;i++)
{
für (j=0;j<pwmax;j++)
{
wenn (j<Geschwindigkeit)
{
PORTA = 0b00111110; //
PORTC = 0b00010110; // Aktivieren auf Pin 4
vdelay(pwmax/geschwindigkeit);
}
sonst
{
PORTA = 0b00000110; // Ich denke, es gibt einen Takt-Ausgang an Pin 4, den ich nicht deaktivieren kann.
PORTC = 0b00010010; // Aktivieren auf Pin 4
vdelay(pwmax/geschwindigkeit);
}
)
// Den Roboter rückwärts fahren
void RobotBk(int Zeit, unsigned char Geschwindigkeit)
{
int i, j;
für (i=0;i<time;i++)
{
für (j=0;j<pwmax;j++)
{
wenn (j<Geschwindigkeit)
{
PORTA = 0b00111101;
PORTC = 0b00010101;
vdelay(pwmax/geschwindigkeit);
}
sonst
{
PORTA = 0b00000101;
PORTC = 0b00010001;
vdelay(pwmax/geschwindigkeit);
}
)
void RobotRt(int Zeit, unsigned char Geschwindigkeit)
{
int i, j;
für (i=0;i<time;i++)
{
für (j=0;j<pwmax;j++)
{
wenn (j<Geschwindigkeit)
{
PORTA = 0b00111110;
PORTC = 0b00010101;
vdelay(pwmax/geschwindigkeit);
}
sonst
{
PORTA = 0b00000110;
PORTC = 0b00001001;
vdelay(pwmax/geschwindigkeit);
}
)
void RobotLt(int Zeit, unsigned char Geschwindigkeit)
{
int i, j;
für (i=0;i<time;i++)
{
für (j=0;j<pwmax;j++)
{
wenn (j<Geschwindigkeit)
{
PORTA = 0b00111101;
PORTC = 0b00110110;
vdelay(pwmax/geschwindigkeit);
}
sonst
{
PORTA = 0b00000101;
PORTC = 0b00001010;
vdelay(pwmax/geschwindigkeit);
}
)
void RobotSt(int Zeit)
{
int i;
für (i=0;i<time;i++)
{
PORTA = 0b00000100;
PORTC = 0b00001100;
__delay_ms(10);
}
)
void main()
{
int rmode, rtime, volts,mt=31;
unsigned char 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);
während (1)
{
wenn (nactions > 0)
{
rmode=(rand() & 7) + 1;
nactions=nactions-1;
}
sonst
{
rmode = 0;
}
rtime = (rand() & 7)+1;
rspeed = rand() & pwmax;
switch (rmode)
{
Fall 1:
RobotFd(rtime <mt,rspeed);
RobotSt(1);
Pause;
Fall 2:
RobotBk(rtimemt,rspeed);
RobotSt(1);
break;
Fall 3:
RobotRt(rtime <mt,rspeed);
RobotSt(1);
Pause;
Fall 4:
RobotLt(rtimemt,rspeed);
RobotSt(1);
break;
Fall 0:
RobotSt(1);
Volts = read_v();
wenn (Volt>50)
{
nations = 10;
//blink(volts);
}
break;
Standard:
RobotSt(10);
break;
}
}
}
Etiquetas
Fuente del modelo
