Elektriska Arduino Go-kart (6 / 6 steg)
Steg 6: Ytterligare bilder + kod
Vänster och höger styra lådor som inrymmer alla av elektronik,- och batterihållaren. Ja, jag vet det är rörigt, men otroligt nog finns ingen kortslutning.
Tack! Välkommen att ställa frågor. Om du vill ha mer specifika bilder eller scheman kan jag göra de också. Ino filen bifogas om koden här inte är visas korrekt.
Här är koden. Det är verkligen, verkligen är specifika för min bygga, men snuttar kanske användbar till er. Du kan använda den så mycket som du vill men ge kredit om du vill distribuera den.
#include < SimpleTimer.h > / / http://playground.arduino.cc/Code/SimpleTimer
#include < FancyLED.h > / / http://playground.arduino.cc/Code/SimpleTimer
#include < Servo.h > / / standard arduino servo bibliotek
#include < UTFT.h > / / http://playground.arduino.cc/Code/SimpleTimer >
extern uint8_t BigFont [];
CONST int throttlePin = A11;
Servo esc;
CONST int escPWRSwitch = 16.
CONST int escPWR = A13;
flyktiga byte rotationer;
unsigned int varvtal.
osignerade långa timeold;
float spänning;
CONST int voltagePin = A9;
flyta ström;
CONST int currentPin = A10;
UTFT myGLCD(ITDB32S,38,39,40,41);
lång previousMillis = 0;
långa intervall = 300;
SimpleTimer timer;
FancyLED left_1 = FancyLED (8, hög).
FancyLED left_2 = FancyLED (6, hög).
FancyLED right_1 = FancyLED (11, hög).
FancyLED right_2 = FancyLED (7, hög).
FancyLED brake_1 = FancyLED (3, hög).
FancyLED brake_2 = FancyLED (10, hög).
FancyLED brake_ind = FancyLED (44, hög).
CONST int styrspak = A14;
int gear = 0;
int gaspådrag = 34.
lång indicatorInterval;
int leftIndicatorF;
int rightIndicatorF;
R - 11,7 (L - 8,6)
int indicatorState;
void setup()
{
ESC.attach(45);
pinMode (escPWR, produktionen);
pinMode (A1, utgång);
pinMode (A2, OUTPUT);
pinMode (A3, OUTPUT);
pinMode (A4, OUTPUT);
pinMode (A5, OUTPUT);
pinMode (A6, OUTPUT);
pinMode (A12, OUTPUT); < /p >< p > digitalWrite (escPWR, hög);
myGLCD.InitLCD(PORTRAIT);
myGLCD.setFont(BigFont);
left_1.turnOff();
left_2.turnOff();
right_1.turnOff();
right_2.turnOff();
leftIndicatorF = timer.setInterval (450, leftIndicatorFunct);
rightIndicatorF = timer.setInterval (450, rightIndicatorFunct);
timer.Disable(rightIndicatorF);
timer.Disable(leftIndicatorF); < /p >< p > myGLCD.clrScr();
myGLCD.fillScr (255, 0, 0);
myGLCD.setColor (255, 255, 255);
myGLCD.setBackColor (255, 0, 0);
Om åsidosätta knappen hålls under starten, ange "grundläggande mode" - endast spjäll och displayen är funktionella
int basic_test = digitalRead(14);
om (basic_test == hög)
{
myGLCD.print ("BASIC MODE", CENTER, CENTER);
pinMode (13, OUTPUT); < /p >< p > digitalWrite 13, hög.
Basic();
}
}
void loop()
{
//////////
Nuvarande = ((analogRead(currentPin)));
/////////
spänning = (analogRead(voltagePin)) * (0.02441);
//////////
om (digitalRead(escPWRSwitch) == hög) {
digitalWrite (escPWR, låg);
}
annat {
digitalWrite (escPWR, hög);
}
< /p >< p > spjäll = analogRead(throttlePin);
gaspådrag = karta (gasspjäll, 0, 1023, 0, 179); < /p >< p > om (redskap > 0)
{
om (spjäll > 35)
{
gaspådrag = karta (spjäll, 0, 179, 35, ((140 / 8) * redskap) + 40);
}
}
annars om (redskap == 0)
{
gaspådrag = 34.
}
annars om (redskap == -1)
{
gaspådrag = 34. < /p >< p >}
annars om (redskap == -2)
{
gaspådrag = 0;
} < /p >< p > om (analogRead(A8) > 1000)
{
ESC.write(Throttle);
}
annat
{
ESC.write(34);
} < /p >< p > / / /
osignerade långa currentMillis = millis();
int joystick_val = analogRead(joystick); < /p >< p > om (currentMillis - previousMillis > intervall) {
om (joystick_val < 1000)
{
om (830 < joystick_val)
{
upp
om (redskap < 8 & & redskap > 0)
{
Gear ++;
}
annars om (redskap! = 8)
{
Gear = 1;
{} < /p >< p >}
annars om (680 < joystick_val)
{
ned
om (redskap > 1)
{
Gear--;
}
}
annars om (350 < joystick_val)
{
vänster (bakåt)
Gear = -1;
} < /p >< p > annars om (70 < joystick_val)
{
höger
om (redskap == 0)
{
Gear = -2;
}
annat {
Gear = 0;
}
}}
}
//////////////
om (redskap == 1)
{
digitalWrite (A3, låg);
digitalWrite (A2, hög);
digitalWrite (A6, låg);
digitalWrite (A4, hög);
digitalWrite (A1, låg);
digitalWrite (A12, låg);
digitalWrite (A5, låg); < /p >< p >}
annars om (redskap == 2)
{
digitalWrite (A3, hög);
digitalWrite (A2, låg);
digitalWrite (A6, hög);
digitalWrite (A4, hög);
digitalWrite (A1, hög);
digitalWrite (A12, låg);
digitalWrite (A5, hög); < /p >< p >}
annars om (redskap == 3)
{
digitalWrite (A3, hög);
digitalWrite (A2, låg);
digitalWrite (A6, hög);
digitalWrite (A4, låg);
digitalWrite (A1, hög);
digitalWrite (A12, hög);
digitalWrite (A5, hög); < /p >< p >}
annars om (redskap == 4)
{
digitalWrite (A3, låg);
digitalWrite (A2, hög);
digitalWrite (A6, hög);
digitalWrite (A4, låg);
digitalWrite (A1, låg);
digitalWrite (A12, hög);
digitalWrite (A5, hög); < /p >< p >}
annars om (redskap == 5)
{
digitalWrite (A3, hög);
digitalWrite (A2, hög);
digitalWrite (A6, hög);
digitalWrite (A4, låg);
digitalWrite (A1, hög);
digitalWrite (A12, hög);
digitalWrite (A5, låg); < /p >< p >}
annars om (redskap == 6)
{
digitalWrite (A3, hög);
digitalWrite (A2, hög);
digitalWrite (A6, hög);
digitalWrite (A4, hög);
digitalWrite (A1, hög);
digitalWrite (A12, hög);
digitalWrite (A5, låg); < /p >< p >}
annars om (redskap == 7)
{
digitalWrite (A3, hög);
digitalWrite (A2, låg);
digitalWrite (A6, låg);
digitalWrite (A4, låg);
digitalWrite (A1, låg);
digitalWrite (A12, hög);
digitalWrite (A5, hög); < /p >< p >}
annars om (redskap == 8)
{
digitalWrite (A3, hög);
digitalWrite (A2, hög);
digitalWrite (A6, hög);
digitalWrite (A4, hög);
digitalWrite (A1, hög);
digitalWrite (A12, hög);
digitalWrite (A5, hög); < /p >< p >}
annars om (redskap == 0)
{
digitalWrite (A3, låg);
digitalWrite (A2, låg);
digitalWrite (A6, hög);
digitalWrite (A4, hög);
digitalWrite (A1, låg);
digitalWrite (A12, hög);
digitalWrite (A5, låg); < /p >< p >}
annars om (redskap == -2)
{
digitalWrite (A3, hög);
digitalWrite (A2, hög);
digitalWrite (A6, hög);
digitalWrite (A4, hög);
digitalWrite (A1, låg);
digitalWrite (A12, låg);
digitalWrite (A5, hög); < /p >< p >}
annars om (redskap == -1)
{
digitalWrite (A3, hög);
digitalWrite (A2, hög);
digitalWrite (A6, hög);
digitalWrite (A4, hög);
digitalWrite (A1, låg);
digitalWrite (A12, hög);
digitalWrite (A5, hög); < /p >< p >} < /p >< p > / / /
om (analogRead(A15) > 1000)
{
digitalWrite 12, hög.
digitalWrite (4, hög).
digitalWrite 5, hög,
digitalWrite (9, hög).
}
annars om (analogRead(A15) < 10)
{
digitalWrite 12, låg.
digitalWrite (4, låg).
digitalWrite (5, låg).
digitalWrite (9, låg).
}
annat
{
analogWrite (12, 128);
analogWrite (4, 128);
analogWrite (5, 128);
analogWrite (9, 128);
} < /p >< p > / / /
om (digitalRead(15) == hög)
{
timer.enable(rightIndicatorF);
timer.enable(leftIndicatorF);
indicatorState = 1;
}
annars om (timer.isEnabled(leftIndicatorF) & & timer.isEnabled(rightIndicatorF) & & digitalRead(15) == låg)
{
timer.Disable(rightIndicatorF);
timer.Disable(leftIndicatorF);
left_1.turnOff();
left_2.turnOff();
right_1.turnOff();
right_2.turnOff();
indicatorState = 0;
}
annars om ((analogRead(A7) > 1000 || analogRead(A7) < 10) & & indicatorInterval == 0)
{
indicatorInterval = millis();
} < /p >< p > om (millis() - indicatorInterval > 250 & & indicatorInterval! = 0)
{
om (analogRead(A7) > 990)
{
timer.Toggle(leftIndicatorF);
om (! timer.isEnabled(leftIndicatorF))
{
left_1.turnOff();
left_2.turnOff();
indicatorState = 0;
}
annat
{indicatorState = 2;
}
timer.Disable(rightIndicatorF);
right_1.turnOff();
right_2.turnOff(); < /p >< p >}
annars om (analogRead(A7) < 30)
{
timer.Toggle(rightIndicatorF); < /p >< p > om (! timer.isEnabled(rightIndicatorF))
{
right_1.turnOff();
right_2.turnOff();
indicatorState = 0; < /p >< p >}
annat
{indicatorState = 3;
}
timer.Disable(leftIndicatorF);
left_1.turnOff();
left_2.turnOff(); < /p >< p >}
indicatorInterval = 0;
}
timer.Run();
//////////////
om (throttle < 35 || digitalRead(16) == låg || analogRead(A8) < 1000)
{
brake_1.turnOn();
brake_2.turnOn();
brake_ind.turnOn();
}
annat
{
brake_1.turnOff();
brake_2.turnOff();
brake_ind.turnOff(); < /p >< p >}
< /p >< p > om (currentMillis - previousMillis > intervall) {
previousMillis = currentMillis;
myGLCD.printNumF (spänning, 3, CENTER, 10);
om (digitalRead(16) == hög)
{
myGLCD.print ("ESC på", CENTER, 40);
}
annat
{
myGLCD.print ("ESC OFF", CENTER, 40);
}
om (analogRead(A8) > 1000)
{
myGLCD.print ("aktiva", CENTER, 70);
}
annat
{
myGLCD.print ("", CENTER, 70);
}
om (analogRead(A15) > 1000)
{
myGLCD.print ("strålkastare 100%", CENTER, 100);
}
annars om (analogRead(A15) < 10)
{
myGLCD.print ("strålkastare OFF", CENTER, 100);
}
annat
{
myGLCD.print ("strålkastare 50%", CENTER, 100);
}
/////////
om (indicatorState == 1)
{
myGLCD.print ("faror", CENTER, 170).
}
annat if (indicatorState == 2)
{
myGLCD.print ("<---", CENTER, 170);
}
annat if (indicatorState == 3)
{
myGLCD.print ("--->", CENTER, 170);
}
annat if (indicatorState == 0)
{
myGLCD.print ("", CENTER, 170);
}
om (spänning < 18,5)
{
myGLCD.print ("LV varning", CENTER, 200);
}
annat
{
myGLCD.print ("", CENTER, 200);
}
myGLCD.printNumI (gas, CENTER, 140, 3);
myGLCD.printNumI (redskap, CENTER, 240, 3); < /p >< p > myGLCD.printNumF (nuvarande, 3, centrera, 280);
}
////////////
} < /p >< p > void leftIndicatorFunct()
{
left_1.Toggle();
left_2.Toggle();
} < /p >< p > void rightIndicatorFunct()
{
right_1.Toggle();
right_2.Toggle();
} < /p >< p > void basic() {
grundläge för att testa ändamål
digitalWrite (escPWR, låg); < /p >< p > medan (sant)
{
gaspådrag = analogRead(throttlePin); < /p >< p > spjäll = karta (gasspjäll, 0, 1023, 0, 179);
myGLCD.printNumI (spjäll, CENTER, 140, 3); < /p >< p > esc.write(throttle);
}
} < /p >