Wow, thank you for your response
@HazardsMind Ill read trough your code shortly, and see how i can optimize mine
@PeterH I use strings because it was the first thing which came in my mind. Thank you for your hint, that i wasnt wayting for the whole string. I fixet that.
Current state of the programm (The functions wor now, i testet them on an arduino but not all are finished, because i want to test them one by one to prevent mistakes)
// Modes:
// R (Rotate) format: R<Ticks>,<Speed>;
// S (Spinn) format: S<Speed>,<Time>;
// C (Constant) format: C<r/l><Speed>;
#include <SoftwareSerial.h>
//declare variables for the motor pins
int motorPin1 = 3; // Blue - 28BYJ48 pin 1
int motorPin2 = 4; // Pink - 28BYJ48 pin 2
int motorPin3 = 2; // Yellow - 28BYJ48 pin 3
int motorPin4 = 1; // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
int rxPin = 0; //Serial recieve pin
int motorSpeed = 0; //variable to set stepper speed
SoftwareSerial mySerial(rxPin, -1); // RX, TX
String cue = "";
void setup() {
//declare the motor pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
getData();
switch (cue.charAt(0)) {
case 'R':
rotate();
break;
case 'S':
spinn();
break;
case 'C':
constant();
break;
}
}
void rotate() { // R (Rotate) format: R<Ticks>,<Speed>;
}
void spinn() { // S (Spinn) format: S<Speed>,<Time>;
}
void constant() { // C (Constant) format: C<r/l><Speed>;
String smotorSpeed;
for (int i = 0; i < cue.length(); i++) {
if (cue.charAt(i) == ';') {
break;
} else {
smotorSpeed.concat(cue.charAt(i));
}
}
motorSpeed = stringtonumber(smotorSpeed);
if(cue.charAt(1) == 'r') {
while(true) {
clockwise();
if(mySerial.available()) {
break;
}
}
} else {
while(true) {
counterclockwise();
if(mySerial.available()) {
break;
}
}
}
deleteOld();
}
void getData() {
char character;
while(true) {
if (mySerial.available() > 0) {
character = mySerial.read();
cue.concat(mySerial.read());
if (cue.charAt(cue.length() - 1) == ';') {
break;
}
}
}
}
int stringtonumber(String snumber) {
int number = 0;
for (int z = 0; z < snumber.length(); z++) {
number = (number*10) + (snumber.charAt(z) - 48);
}
return number;
}
void counterclockwise (){
// 1
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(motorSpeed);
// 2
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay (motorSpeed);
// 3
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(motorSpeed);
// 4
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(motorSpeed);
// 5
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(motorSpeed);
// 6
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay (motorSpeed);
// 7
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(motorSpeed);
// 8
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(motorSpeed);
}
void clockwise(){
// 1
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay(motorSpeed);
// 2
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay (motorSpeed);
// 3
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay(motorSpeed);
// 4
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delay(motorSpeed);
// 5
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delay(motorSpeed);
// 6
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, HIGH);
delay (motorSpeed);
// 7
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delay(motorSpeed);
// 8
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delay(motorSpeed);
}
void deleteOld() {
if(cue.length() != 0) {
int n = 1;
for (n = 1; n < cue.length(); n++) {
if (cue.charAt(n) == ';') {
break;
}
}
cue = cue.substring(n + 1);
}
}
As i wanted to test it on my Attiny45 i rann into the problem of compiling it (Arduino 1.0.1 following THIS tutorial).
The reason: 6.372 Bytes is the size of the compiled sketch. Attiny45 has only 4 so ill get an 85, it has 8k memmory. Seems like SoftwareSerial is quite a big library