Stap 6: Motors en fotocellen
motoren. Typ in de volgende code, verifiëren, en uploaden naar de Arduino. Zodra dat is gebeurd, probeer bedekken de fotocellen één tegelijk.
• Wanneer je de up fotocel te dekken, de linker motor zou moeten draaien tegen de klok in
en de juiste motor met de klok mee moet draaien.
• Wanneer je de omlaag fotocel te dekken, de linker motor moet Draai rechtsom
en de juiste motor zou moeten draaien tegen de klok in.
• Wanneer je de linker fotocel te dekken, beide motoren moeten wenden
tegen de klok in.
• Wanneer je de juiste fotocel te dekken, moeten beide motoren Draai rechtsom.
/*
Met behulp van fotocellen tot station twee stappenmotoren
met een Arduino via Sparkfun de EasyDriver v4.3
CC-GNU GPL door Ben Leduc-molens en Dustyn Roberts
Gemaakt: 2010.06
*/
#include //import stepper bibliotheek
#define stappen 200 / / 360/1.8 (stap hoek) = 200 stappen/revolutie
nieuwe stepper objecten uit stepper-bibliotheek (één per motor) declareren
Stepper right_motor (stappen 6, 7); 6 = DIR, 7 = STAP
Stepper left_motor (stappen, 11, 12); 11 = DIR, 12 = STAP
int afstand; Hoe ver de motoren moeten gaan
int laagste; variabele laagste fotocel waarde op te slaan
int i; voor de looping
variabelen voor 4 fotocel waarden
int photo_up;
int photo_down;
int photo_left;
int photo_right;
VOID Setup {}
Serial.begin(9600); seriële afdruk te beginnen zodat we kunnen dingen zien
instellenin motor snelheid (RPM)
right_motor.setSpeed(200);
left_motor.setSpeed(200);
}
void loop {}
lezen en afdrukken van alle fotocel waarden van analoge pins 0-3
photo_up = analogRead(0);
Serial.Print("up");
Serial.println(photo_up);
photo_down = analogRead(1);
Serial.Print("down");
Serial.println(photo_down);
photo_left = analogRead(2);
Serial.Print("left");
Serial.println(photo_left);
photo_right = analogRead(3);
Serial.Print("right");
Serial.println(photo_right);
delay(1000); Geef me tijd om ze te lezen in de monitor
fotocel waarden opslaan in een array
int photoValues [] = {photo_up, photo_down, photo_left, photo_right};
laagste = 9999; Dit hoger ingesteld dan mogelijk fotocel waarden
lus te vinden van de laagste waarde van de fotocel
voor (ik = 0; ik < 4; i ++) //4 = aantal fotocellen
{
Serial.println(photoValues[i]); Print photoValue matrix
werkelijke fotocel waarde aan "laagste" variabele toewijzen als het lager
dan wat "laagste" is ingesteld op (begint bij 9999)
Als (laagste > = photoValues [i]) {}
laagste = photoValues [i];
}
uitprinten om te bevestigen dat de laagste waarde wordt geselecteerd
Serial.Print("lowest:");
Serial.println(lowest);
delay(1000); Wacht één seconde voordat het zodat kunnen wij het lezen van de waarden in een lus
} //end voor
afstand = laagste; set reizen afstand variabele = laagste waarde
vinden van de sensor die overeenkomt met de laagste, gaan die richting
Zie hieronder voor wat de omhoog, omlaag, naar links, rechts functies doen
Als (laagste == photoValues[0]) {}
omhoog (afstand);
}
anders als (laagste == photoValues[1]) {}
neer (afstand);
}
anders als (laagste == photoValues[2]) {}
links (afstand);
}
anders als (laagste == photoValues[3]) {}
recht (afstand);
}
} //end lus
/*
Hier zijn de directionele functies. Lus van grootte = afstand.
Positieve Stapnummers zijn met de klok mee, tegen de klok in negatieve
*/
ongeldig omhoog (int afstand) {}
voor (ik = 0; ik < afstand; i ++) {}
right_motor.Step(10);
left_motor.Step(-10);
}
}
VOID neer (int afstand) {}
voor (ik = 0; ik < afstand; i ++) {}
right_motor.Step(-10);
left_motor.Step(10);
}
}
leegte achtergelaten (int afstand) {}
voor (ik = 0; ik < afstand; i ++) {}
right_motor.Step(-10);
left_motor.Step(-10);
}
}
VOID recht (int afstand) {}
voor (ik = 0; ik < afstand; i ++) {}
right_motor.Step(10);
left_motor.Step(10);
}
}