Den sista pusselbiten i projektet, dvs själva styr programmet kommer här för allmän beskådning
Ska bara försöka få ihop totalkostnaderna för projektet och lägga ut här
För den intresserade så ser programmet ut såhär.
De kunniga får även hjälpa till och rätta om ni ser några fel eller berätta hur ni skulle gjort istället
Kod: Markera allt
// -Prox- Running Target bana
// Program 2017
const int hastighetPotS = A0; // hastighetspot långsam
const int hastighetPot = A1; // hastighetspot snabb
const int fordrojPot = A2; // fördröjningspot
const int hogerGrans = 2; // höger gränsläge
const int vansterGrans = 3; // vänster gränsläge
const int pwmPin = 5; // PWM hastighet motor
const int inaPin = 6; // inA
const int inbPin = 7; // inB
const int autoManBryt = 8; // auto man brytare
const int manStop = 9; // manuell höger
const int manStart = 10; // manuell vänster
int hastighet; // läs värde hastighetspot långsam
int hastighetS; // läs värde hastighetspot snabb
int vantetid; // läs värde fördröjningspot
int readingVansterGrans; // läs vänster gränsläge
int readingHogerGrans; // läs höger gränsläge
int readingManStartSw; // läs manuell V brytare
int readinginaPin;
int readinginbPin;
int readingmanStop;
int readingAutoManBryt; // läs auto man brytare
long time = 0; // tid sen senaste tryck
long debounce = 200; // studstid
void setup() {
pinMode (vansterGrans, INPUT);
pinMode (hogerGrans, INPUT);
pinMode (pwmPin, OUTPUT);
pinMode (inaPin, OUTPUT);
pinMode (inbPin, OUTPUT);
pinMode (manStart, INPUT);
pinMode (manStop, INPUT);
digitalWrite(inaPin, LOW);
digitalWrite(inbPin, LOW);
pinMode (autoManBryt, INPUT);
}
void loop() {
readingAutoManBryt = digitalRead(autoManBryt); // kolla auto/manbrytare
if (readingAutoManBryt == LOW)
{
goto sakta; // gå till långsamma läge
}
if (readingAutoManBryt == HIGH)
{
goto snabb; // gå till snabb läge
}
sakta: // långsamma lopp läge
vantetid = analogRead(fordrojPot);
vantetid = map(vantetid, 0, 1023, 0, 10000);
hastighet = analogRead(hastighetPot);
hastighet = map (hastighet, 0, 1023, 140, 160);
readingVansterGrans = digitalRead(vansterGrans);
readingHogerGrans = digitalRead(hogerGrans);
readingManStartSw = digitalRead(manStart);
readinginaPin = digitalRead(inaPin);
readinginbPin = digitalRead(inbPin);
readingmanStop = digitalRead(manStop);
readingAutoManBryt = digitalRead(autoManBryt);
if (readingVansterGrans == HIGH && readingManStartSw == HIGH)
{
delay(vantetid);
analogWrite(pwmPin, hastighet);
digitalWrite(inaPin, HIGH); // gå vänster
digitalWrite(inbPin, LOW);
}
if (readingHogerGrans == HIGH && readingManStartSw == HIGH)
{
delay(vantetid);
analogWrite(pwmPin, hastighet - 2);
digitalWrite(inaPin, LOW); // gå höger
digitalWrite(inbPin, HIGH);
}
if (readingVansterGrans == HIGH && readinginbPin == HIGH)
{
digitalWrite(inaPin, LOW); // stannar lopp
digitalWrite(inbPin, LOW);
}
if (readingHogerGrans == HIGH && readinginaPin == HIGH)
{
digitalWrite(inaPin, LOW); // stannar lopp
digitalWrite(inbPin, LOW);
}
// Om stop blir aktiverat, gå vänter
// vänster lopp
if (readingmanStop == HIGH && readinginbPin == HIGH && readingHogerGrans == LOW && readingVansterGrans == LOW)
{
delay(200);
digitalWrite(inaPin, LOW); // stannar lopp när stop knapp trycks
digitalWrite(inbPin, LOW);
}
// höger lopp
if (readingmanStop == HIGH && readinginaPin == HIGH && readingHogerGrans == LOW && readingVansterGrans == LOW)
{
delay(200);
digitalWrite(inaPin, LOW); // stannar lopp när stop knapp trycks
digitalWrite(inbPin, LOW);
}
// Om stop har blir aktiverat, gå vänter
if (readingHogerGrans == LOW && readingVansterGrans == LOW && readinginaPin == LOW && readinginbPin == LOW && readingManStartSw == HIGH) //om den stannar mitt på, åk vänster
{
analogWrite(pwmPin, 150);
digitalWrite(inaPin, LOW); // om stop, gå höger vid startsw
digitalWrite(inbPin, HIGH);
delay(100);
}
if (readingAutoManBryt == LOW) {
goto sakta; // fortsätt i långsamt, annars gå till snabb
}
snabb: // Snabb lopp läge
vantetid = analogRead(fordrojPot);
vantetid = map(vantetid, 0, 1023, 0, 10000);
hastighetS = analogRead(hastighetPotS);
hastighetS = map (hastighetS, 0, 1023, 252, 252);
readingVansterGrans = digitalRead(vansterGrans);
readingHogerGrans = digitalRead(hogerGrans);
readingManStartSw = digitalRead(manStart);
readinginaPin = digitalRead(inaPin);
readinginbPin = digitalRead(inbPin);
readingmanStop = digitalRead(manStop);
readingAutoManBryt = digitalRead(autoManBryt);
if (readingVansterGrans == HIGH && readingManStartSw == HIGH)
{
delay(vantetid);
analogWrite(pwmPin, hastighetS);
digitalWrite(inaPin, HIGH); // gå vänster
digitalWrite(inbPin, LOW);
}
if (readingHogerGrans == HIGH && readingManStartSw == HIGH)
{
delay(vantetid);
analogWrite(pwmPin, hastighetS);
digitalWrite(inaPin, LOW); // gå höger
digitalWrite(inbPin, HIGH);
}
if (readingVansterGrans == HIGH && readinginbPin == HIGH)
{
digitalWrite(inaPin, LOW); // stannar lopp
digitalWrite(inbPin, LOW);
}
if (readingHogerGrans == HIGH && readinginaPin == HIGH)
{
digitalWrite(inaPin, LOW); // stannar lopp
digitalWrite(inbPin, LOW);
}
// Om stop blir aktiverat, gå vänter
// vänster lopp
if (readingmanStop == HIGH && readinginbPin == HIGH && readingHogerGrans == LOW && readingVansterGrans == LOW)
{
delay(200);
digitalWrite(inaPin, LOW); // stannar lopp när stop knapp trycks
digitalWrite(inbPin, LOW);
}
// Höger lopp
if (readingmanStop == HIGH && readinginaPin == HIGH && readingHogerGrans == LOW && readingVansterGrans == LOW)
{
delay(200);
digitalWrite(inaPin, LOW); // stannar lopp när stop knapp trycks
digitalWrite(inbPin, LOW);
}
// Om stop har blir aktiverat, gå vänter
if (readingHogerGrans == LOW && readingVansterGrans == LOW && readinginaPin == LOW && readinginbPin == LOW && readingManStartSw == HIGH) //om den stannar mitt på, åk vänster
{
analogWrite(pwmPin, 150);
digitalWrite(inaPin, LOW); // om stop, gå höger vid startsw
digitalWrite(inbPin, HIGH);
delay(100);
}
if (readingAutoManBryt == HIGH) {
goto snabb; // fortsätt i manuellt läge, annars gå till automatikläge
}
}
Finns det någon som kan hjälpa mig med några små saker...
1.
Skulle antingen vilja kunna "kalibrera" lopp tiden till 5sek på långsam och 2,5 sek på snabb.
Men hur skulle det se ut i programmet? iallafall att båda höger och vänster skulle vara lika skulle räcka ganska långt
2.Om jag skulle välja att bygga av en steppermotor, hur skulle programmet då se ut?
skulle då lättare få konstant och jämn hastighet och problemet ovan skulle lösas