byte step = 0;
int duty = 100;
int accel = 1000;
int tarspeed = 3000; // speed in eRPM (target)
int currspeed = 1; // current speed in eRPM
float castota = 0; // in Hz
unsigned long tbstc = 10000; // time between step time changes
unsigned long cas = 0;
unsigned long past = 0;
unsigned long past2 = 0;
float cakaj = 0; // time between steps
void setup() {
TCCR2B = (TCCR2B & 0b11111000) | 0b00000001;
TCCR1B = (TCCR1B & 0b11111000) | 0b00000001;
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
Serial.begin(115200);
Serial.write(10);
Serial.write(10);
Serial.write(10);
Serial.write(10);
Serial.write(10);
Serial.write(10);
tbstc = 1000000 / accel;
}
void loop() {
//yield();
cas = micros();
if(Serial.available() > 2) {
tarspeed = Serial.parseInt();
duty = Serial.parseInt();
accel = Serial.parseInt();
Serial.read();
Serial.read();
Serial.read();
tbstc = 1000000 / accel;
}
if((currspeed < tarspeed) &&( cas - past2 > tbstc)) {
currspeed = currspeed + 1;
//Serial.println(castota);
past2 = cas;
}
if(currspeed == tarspeed) {
currspeed = tarspeed;
}
if((currspeed > tarspeed) &&( cas - past2 > tbstc)) {
currspeed = currspeed - 1;
past2 = cas;
}
castota = currspeed / 60.00;
cakaj = ((1000000 / castota) / 6);
if(cas - past >= cakaj) {
//Serial.println(cas - past);
step = step + 1;
past = cas;
}
switch(step) {
case 0:
analogWrite(9, duty);
analogWrite(10, 0);
analogWrite(11, 0);
break;
case 1:
analogWrite(9, duty);
analogWrite(10, duty);
analogWrite(11, 0);
break;
case 2:
analogWrite(9, 0);
analogWrite(10, duty);
analogWrite(11, 0);
break;
case 3:
analogWrite(9, 0);
analogWrite(10, duty);
analogWrite(11, duty);
break;
case 4:
analogWrite(9, 0);
analogWrite(10, 0);
analogWrite(11, duty);
break;
case 5:
analogWrite(9, duty);
analogWrite(10, 0);
analogWrite(11, duty);
break;
case 6:
step = 0;
break;
}
}