Kód: Vybrat vše
/*
8mm.ino
JeDe Robot s.r.o., duben 2020
Potenciometr - A5
Tlačítko STOP - D2
Tlačítko VPŘED - D4
Tlačítko VZAD - D5
Signál STEP - D6
Signál DIR - D7
Spoušť - D13
Tlačítka jsou zapojena proti GND
Signál Spoušť je aktivní v log. 1
*/
// PŘIŘAZENÍ PINŮ
#define SPEED_PIN 5
// potenciometr (1-10k) na pinu A5
#define STOP 2
// tlačítko stop na pinu D2
#define FWD 4
// tlačítko vpřed na pinu D4
#define BWD 5
// tlačítko vzad na pinu D5
#define STP 6
// signál STEP na pinu D6
#define DIR 7
// signál DIR na pinu D7
#define TRIG 13
// spoušť na pinu D13
// KONSTANTY
#define SPR 400
// počet kroků na jednu otáčku motoru
#define MAX_SPEED 500
// maximální rychlost otáčení
#define MIN_SPEED 5000
// minimální rychlost otáčení
// PROMĚNNĚ
int spd = 0;
int hlt = 1;
// ZAČÁTEK PROGRAMU
void setup()
{
pinMode(STOP, INPUT_PULLUP);
// pin STOP vstup + pullUp
pinMode(FWD, INPUT_PULLUP);
// pin FWD vstup + pullUp
pinMode(BWD, INPUT_PULLUP);
// pin BWD vstup + pullUp
pinMode(STP, OUTPUT);
// pin STP výstup
pinMode(DIR, OUTPUT);
// pin DIR výstup
pinMode(TRIG, OUTPUT);
// pin TRIG výstup
attachInterrupt(digitalPinToInterrupt(STOP), halt, FALLING);
}
void loop()
{
while (hlt == 1)
// pokud bylo stisknuto tlačítko stop, čeká se na...
{
if (digitalRead(FWD) == LOW)
// stisk tlačítka FWD...
{
digitalWrite(DIR, HIGH);
// směr otáčení
rot();
}
if (digitalRead(BWD) == LOW)
// ... nebo na stisk tlačítka BWD
{
digitalWrite(DIR, LOW);
// opačný směr otáčení
rot();
}
}
while (hlt == 0)
// pokud je otáčení povoleno
{
rot();
// toč zvoleným směrem a rychlostí
}
}
// FUNKCE
void rot()
//jedna otáčka o 360 st.
{
hlt = 0;
// nuluj příznak stisku tlačítka STOP
spd = analogRead(SPEED_PIN);
// přečteme napětí na pinu A5
spd = map(spd,0,1023,MAX_SPEED,MIN_SPEED);
// rozsah proměnné spd převedeme z 0 až 1023 na...
// ... rozsah daný konstantami MAX_SPEED a MIN_SPEED
for (int i=0; i<SPR; i++)
// generuj počet kroků, určený konstantou SPR
{
digitalWrite(STP, HIGH);
delayMicroseconds(50);
// puls STP trvá 50 us
digitalWrite(STP, LOW);
delayMicroseconds(spd);
// proměná spd určuje rychlost otáčení motoru
}
digitalWrite(TRIG, HIGH);
// výstup TRIG nastav do log. 1 na...
delay(500);
// ... 0,5 sekundy
digitalWrite(TRIG, LOW);
// výstup TRIG nastav do log. 0...
delay(500);
// ... a čekej 0,5 sekundy
}
void halt()
// když je tlačítko stop stisknuto
{
hlt = 1;
}