Datorstyrd RC bil med två Arduinos (4 / 8 steg)
Steg 4: Ta emot Arduino: koden.
#include < VirtualWire.h > //Include krävs bibliotek
Vi kommer också definiera vissa konstanter som vi använder för att styra vår bil:
#define framåt '8'
#define bakåt '5'
#define STOP '0'
#define vänster "4"
#define rätt "6"
#define STRAIGHT '/'
#define TIMEOUT 500UL
Därefter kommer variablerna för motor stiften. Värdet av dessa variabler kommer att oavsett pin kabeln är ansluten till på Arduino. Om du trådbunden yours upp olika sätt se till att du uppdaterar din kod här:
int motor1Pin1 = 5; stift 2 på L293D är ansluten till detta stift på Arduino
int motor1Pin2 = 6; stift 7 på L293D"
int enablePin1 = 9; stift 1 på L293D"
int motor2Pin1 = 3; PIN 10 på L293D "int motor2Pin2 = 4; stift 15 på L293D"
int enablePin2 = 10; stift 9 på L293D"
Det finns två variabler att styra motorn rusar:
int motor1Speed = 255; max hastighet 255
int motor2Speed = 255;
Den sista variabeln är för räknaren timeout:
osignerade långa strid;
Setup-funktionen ställer in stift som krävs. Det också ange 's upp virtuella tråd:
void setup()
{
Ställ in pinkodsskydd lägen
pinMode (motor1Pin1, produktionen);
pinMode (motor1Pin2, produktionen);
pinMode (motor2Pin1, produktionen);
pinMode (motor2Pin2, produktionen);
pinMode (enablePin1, produktionen);
pinMode (enablePin2, produktionen);
Ange enablePin till motors hastighet
analogWrite (enablePin1, motor1Speed);
analogWrite (enablePin2, motor2Speed);
Börja med motorer av
digitalWrite (motor1Pin1, låg);
digitalWrite (motor1Pin2, låg);
digitalWrite (motor2Pin1, låg);
digitalWrite (motor2Pin2, låg);
Serial.BEGIN(9600);
Initialisera IO och ISR
vw_set_ptt_inverted(true); Krävs för RX länk modul
vw_setup(2000); Bitar per sekund
vw_set_rx_pin(13); Vi kommer att få på stift 23 (Mega) dvs RX stift från modulen ansluts till detta stift.
vw_rx_start(); Starta mottagaren
}
Loop funktion innehåller följande kod:
void loop()
{
variabler för virtuell tråd
uint8_t buf [VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
Om vi fick ett meddelande från den seriella porten
om (Serial.available())
{
Återställ räknaren timeout
räknare = millis();
Kör den önskade motorn
Drive(Serial.Read());
Annars kolla på ett meddelande från mottagaren
} else om (vw_get_message (buf, och buflen)) / / kontrollera för att se om något har tagits emot
{
Återställ räknaren för timeout
räknare = millis();
int i;
Serial.println("Received"); Felsöka meddelande
Meddelande med en bra-fick.
För varje kommando tas emot
för (jag = 0; jag < buflen; i ++)
{
Drive(BUF[i]); Önskade drivmotorer
}
Om räknaren är större än tidsgränsen (ingen signal tas emot) sedan stanna bilen.
} else om (millis ()-counter > = TIMEOUT) {
Drive(Stop);
Drive(Straight);
}
}
Slutligen måste vi definiera funktionen Drive():
Ogiltig enhet (int dir) {
Kolla vilken riktning begärs (samma för nedan)
om (dir == framåt) {
Serial.println ("framåt"), //Used för felsökning
Ställa in motor följaktligen (samma för nedan)
digitalWrite (motor1Pin1, hög);
digitalWrite (motor1Pin2, låg);
} else om (dir == bakåt) {
Serial.println("Backward");
digitalWrite (motor1Pin1, låg);
digitalWrite (motor1Pin2, hög);
} else om (dir == STOP) {
Serial.println("stop");
digitalWrite (motor1Pin1, låg);
digitalWrite (motor1Pin2, låg);
} annat if(dir == STRAIGHT) {
Serial.println("Straight");
digitalWrite (motor2Pin1, låg);
digitalWrite (motor2Pin2, låg);
} else om (dir == vänster) {
Serial.println("left");
digitalWrite (motor2Pin1, låg);
digitalWrite (motor2Pin2, hög);
} else om (dir == höger) {
Serial.println("Right");
digitalWrite (motor2Pin1, hög);
digitalWrite (motor2Pin2, låg);
}
}
Du kan hämta komplett skissen här: https://dl.dropboxusercontent.com/u/63127140/RC_CA...