Ok, so I wrote my question yesterday and I thought I will find a way around these twisting structures Buuuuut, another error showed up! Can anyone help me fix this?
The code is as follows:
int zadane_1[18];
//mapa zadanych polozen
int dir_pin[18];
//tablica kierunku ruchu
int step_pin[18];
// tablica stepow
int polozenie[18];
//tablica aktualnych polozen
boolean kierunek[18];
//tablica wybranego kierunku
int zero[18];
//tablica polozenia poczatkowego
int komenda;
void setup() {
dir_pin[0] = 22;
step_pin[0]= 23;
dir_pin[1] = 24;
step_pin[1] = 25;
dir_pin[2] = 26;
step_pin[2] = 27;
dir_pin[3] = 28;
step_pin[3] = 29;
dir_pin[4] = 30;
step_pin[4] = 31;
dir_pin[4] = 32;
step_pin[5] = 33;
dir_pin[6] = 34;
step_pin[6] = 35;
dir_pin[7] = 36;
step_pin[7] = 37;
dir_pin[8] = 38;
step_pin[8] = 39;
dir_pin[9] = 40;
step_pin[9] = 41;
dir_pin[10] = 42;
step_pin[10] = 43;
dir_pin[11] = 44;
step_pin[11] = 45;
dir_pin[12] = 46;
step_pin[12] = 47;
dir_pin[13] = 48;
step_pin[13] = 49;
dir_pin[14] = 50;
step_pin[14] = 51;
dir_pin[15] = 52;
step_pin[15] = 53;
dir_pin[16] = 2;
step_pin[16] = 3;
dir_pin[17] = 4;
step_pin[17] = 5;
polozenie[0]=0;
polozenie[1]=0;
polozenie[2]=0;
polozenie[3]=0;
polozenie[4]=0;
polozenie[5]=0;
polozenie[6]=0;
polozenie[7]=0;
polozenie[8]=0;
polozenie[9]=0;
polozenie[10]=0;
polozenie[11]=0;
polozenie[12]=0;
polozenie[13]=0;
polozenie[14]=0;
polozenie[15]=0;
polozenie[16]=0;
polozenie[17]=0;
for (int i=0;i<18;i++){
zadane_1[i]=250;
}
for (int i=0;i<18;i++){
zero[i]=0;
}
Serial.begin(9600);
pinMode(dir_pin[0], OUTPUT);
pinMode(step_pin[0], OUTPUT);
pinMode(dir_pin[1], OUTPUT);
pinMode(step_pin[1], OUTPUT);
pinMode(dir_pin[2], OUTPUT);
pinMode(step_pin[2], OUTPUT);
pinMode(dir_pin[3], OUTPUT);
pinMode(step_pin[3], OUTPUT);
pinMode(dir_pin[4], OUTPUT);
pinMode(step_pin[4], OUTPUT);
pinMode(dir_pin[5], OUTPUT);
pinMode(step_pin[5], OUTPUT);
pinMode(dir_pin[6], OUTPUT);
pinMode(step_pin[6], OUTPUT);
pinMode(dir_pin[7], OUTPUT);
pinMode(step_pin[7], OUTPUT);
pinMode(dir_pin[8], OUTPUT);
pinMode(step_pin[8], OUTPUT);
pinMode(dir_pin[9], OUTPUT);
pinMode(step_pin[9], OUTPUT);
pinMode(dir_pin[10], OUTPUT);
pinMode(step_pin[10], OUTPUT);
pinMode(dir_pin[11], OUTPUT);
pinMode(step_pin[11], OUTPUT);
pinMode(dir_pin[12], OUTPUT);
pinMode(step_pin[12], OUTPUT);
pinMode(dir_pin[13], OUTPUT);
pinMode(step_pin[13], OUTPUT);
pinMode(dir_pin[14], OUTPUT);
pinMode(step_pin[14], OUTPUT);
pinMode(dir_pin[15], OUTPUT);
pinMode(step_pin[15], OUTPUT);
pinMode(dir_pin[16], OUTPUT);
pinMode(step_pin[16], OUTPUT);
pinMode(dir_pin[17], OUTPUT);
pinMode(step_pin[17], OUTPUT);
digitalWrite(dir_pin[0],LOW);
digitalWrite(dir_pin[1],LOW);
digitalWrite(dir_pin[2],LOW);
digitalWrite(dir_pin[3],LOW);
digitalWrite(dir_pin[4],LOW);
digitalWrite(dir_pin[5],LOW);
digitalWrite(dir_pin[6],LOW);
digitalWrite(dir_pin[7],LOW);
digitalWrite(dir_pin[8],LOW);
digitalWrite(dir_pin[9],LOW);
digitalWrite(dir_pin[10],LOW);
digitalWrite(dir_pin[11],LOW);
digitalWrite(dir_pin[12],LOW);
digitalWrite(dir_pin[13],LOW);
digitalWrite(dir_pin[14],LOW);
digitalWrite(dir_pin[15],LOW);
digitalWrite(dir_pin[16],LOW);
digitalWrite(dir_pin[17],LOW);
digitalWrite(step_pin[0],LOW);
digitalWrite(step_pin[1],LOW);
digitalWrite(step_pin[2],LOW);
digitalWrite(step_pin[3],LOW);
digitalWrite(step_pin[4],LOW);
digitalWrite(step_pin[5],LOW);
digitalWrite(step_pin[6],LOW);
digitalWrite(step_pin[7],LOW);
digitalWrite(step_pin[8],LOW);
digitalWrite(step_pin[9],LOW);
digitalWrite(step_pin[10],LOW);
digitalWrite(step_pin[11],LOW);
digitalWrite(step_pin[12],LOW);
digitalWrite(step_pin[13],LOW);
digitalWrite(step_pin[14],LOW);
digitalWrite(step_pin[15],LOW);
digitalWrite(step_pin[16],LOW);
digitalWrite(step_pin[17],LOW);
}
void move_to_pos (int dir_pin[18], int step_pin [18], int polozenie[18],boolean kierunek[18], int zadane[18]){
int i;
for( i =0; i<18; i++){ //ustalanie kierunku ruchu na podstawie polozenia i zadanego polozenia
if(zadane[i]>polozenie[i]){
digitalWrite(dir_pin[i],HIGH);
kierunek[i]=true;}
else{
digitalWrite(dir_pin[i],LOW);
kierunek[i]=false;}
}
int t=0; //znajdowanie najwiekszego elementu w tablicy zadanego polozenia
for (int i=0;i<18;i++){
if(zadane[i]>t)
t=zadane[i];}
for(int k=0; i<t;k++){ //jedziemy wszystkim o tą ilość kroków
for(int i=0;i<18;i++){
digitalWrite(step_pin[i],HIGH);}
delayMicroseconds(8000);
for(int i=0;i<18;i++){
if(polozenie[i]!=zadane[i]){
digitalWrite(step_pin[i],LOW);
if(kierunek[i]==true) polozenie[i]++;
if(kierunek[i]==false) polozenie[i]--;}}}
delayMicroseconds(8000);}
void loop (){
if (Serial.available() > 0) {
komenda = Serial.read();
if (komenda == 'Q')
move_to_pos (dir_pin[18],step_pin [18],polozenie[18],kierunek[18],zadane_1[18]);
if (komenda== 'W')
move_to_pos (dir_pin[18],step_pin [18],polozenie[18],kierunek[18],zero[18]);}
}
The questions are:
- What is wrong with static arrays? Why can’t I input them in my function?
- Is it “legal” to input arrays with fixed sizes into function? I’m a bit confused about it… I.e can I input it like I did here:
void move_to_pos (int dir_pin[18], int step_pin [18], int polozenie[18],boolean kierunek[18], int zadane[18]){
or must I put it in empty brackets ( )?
3. How to make it work? I’m puzzled hard