Nie wstawiałem kodu bo myślałem że to tylko pogorszy sprawę. Chodzi o to że do arduino muszę przesłać 500 cyfr(int albo double), następnie jak arduino otzyma te 500 wartości to musi przejść dalej czyli zająć się obsługą silnika krokowego. Te 500 wartości to będą odpowiednio delay`e do sterowania prędkością pacy silnika.
Kod:
//511 to wtedy mam 360 stopni
//krok to +/- 0.7045 stopnia 14 kroków to skok co 9,86 stopni
const int s1 = 0;
const int s2 = 1;
const int s3 = 2;
const int s4 = 3;
int del = 1000;
int teller = 0;
int chose = 0;
int stepp = 0;
String data[5] = "";
int dell[500];
void setup() {
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(s4, OUTPUT);
}
void loop() {
// del = 900; // delay im mniejszy tym szybciej sie wykona obrot
//900 max szybko
chose = 1;
//chose = (getValue(data, '-', 0)).toInt();
//stepp = (getValue(data, '-', 1)).toInt();
//Serial.flush();
//menu();
for (int i=0; i<=500; i++){
//del = (getValue(data, ';', i)).toInt();
del = dell[i]
Serial.print(del);
Serial.print("\n");
if(chose == 1) forwards();
else if(chose == 2) backwards();
motorOff();
// forwardsFull();
// backwardsFull();
}
motorOff();
delay(10);
}
void menu(){
int a = 0;
while(!Serial.available());
data[0] = Serial.readString();
Serial.flush();
for (int i=0; i<=500; i++){
//del = (getValue(data, ';', i)).toInt();
dell[a] = (getValue(data[0], ';', i)).toInt();
a = a+1;
}
/*chose = Serial.parseInt();
Serial.flush();
Serial.print("Ilosc krokow");
while(!Serial.available()) ;
stepp = Serial.parseInt();
Serial.flush();
Serial.print("Szybosc max 900");
while(!Serial.available()) ;
del = Serial.parseInt();*/
}
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = { 0, -1 };
int maxIndex = data.length() - 1;
for (int i = 0; i <= maxIndex && found <= index; i++) {
if (data.charAt(i) == separator || i == maxIndex) {
found++;
strIndex[0] = strIndex[1] + 1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}
void information()
{
Serial.print("\n\nWybrales opcje nr ");
Serial.print(chose);
Serial.print(" silnik obroci sie o ");
double radius = stepp * 0.7045;
Serial.print(radius);
Serial.print(" stopni");
}
void motorOff(){
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
}
void backwards(){
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
digitalWrite(s4, HIGH);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, HIGH);
delayMicroseconds(del);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, HIGH);
delayMicroseconds(del);
}
void forwards(){
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, HIGH);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, HIGH);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
digitalWrite(s4, HIGH);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del);
}
void backwardsFull(){
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del*2);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
digitalWrite(s4, LOW);
delayMicroseconds(del*2);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
digitalWrite(s4, HIGH);
delayMicroseconds(del*2);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, HIGH);
delayMicroseconds(del*2);
}
void forwardsFull(){
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, HIGH);
delayMicroseconds(del*2);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
digitalWrite(s4, LOW);
delayMicroseconds(del*2);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del*2);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(s4, LOW);
delayMicroseconds(del*2);
}
Tak wygląda strnig który jest przesyłany do arduino 1111,1;2222,2;3333,3;.... itd.Separator to ; i są to wartości double ale mogę zrobić na int bo w arduino konwertuje to na inta