Помогите доработать скетч (нахаляву)

Понятно. А то я думал откровение в массовом сознании пришло.
…у меня тема наклёвывается, если созрею, то сам в названии добавлю :slight_smile:

1 лайк

Ну, вот Вы его и услышали.

Что-то с благодарностью напряг, похоже, случился.

1 лайк

Вот, что то начал, но увы. Это для двумерного массива. А нужен трехмерный.
Но это тоже, откуда то по частям взято. Тоже не мое. :grinning:

#include <SPI.h>
#include <SD.h>
const int chipSelect = 4;
File myFile;
char* names[7][2];
int motorPins[3][2] = {{2,5},{3,6},{4,7}};
int count;
int count2[3] = {0,0,0};
int val = 0;
int rot=0;
int incomingByte = 0;
int sign=1;
long delayTime;

//Процедура настройки прошивки
void setup() {
  

Serial.begin(57600); //Эта скорость должна совпадать со скоростью, установленной в программе
if (!SD.begin(chipSelect)) {
      Serial.println("Card failed, or not present");
      }
      configSD();  // вызовим функцию для загрузки данных.
int i;      
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
for (i=0; i<3; i++) {
for (count = 0; count < 2; count++) {
 pinMode(motorPins[i][count], OUTPUT); //установка режима работы цифровых pin'ов Ардуино
}
}
delayTime=500; // задержка между шагами
}

//Поворот двигателя с номерм sm на один шаг вперёд
void moveForward(int sm) {
digitalWrite(motorPins[sm][1], HIGH);
digitalWrite(motorPins[sm][0], HIGH);
digitalWrite(motorPins[sm][0], LOW);
}

//Поворот двигателя с номерм sm на один шаг назад
void moveBackward(int sm) {
digitalWrite(motorPins[sm][1], LOW);
digitalWrite(motorPins[sm][0], HIGH);
digitalWrite(motorPins[sm][0], LOW);
}

//Задержка в микосекундах
void delayMicros(long wt){
unsigned long mls;
unsigned int mks;

mls=(unsigned long)(wt /1000);
mks=(unsigned int)(wt % 1000);
if (mls>0) delay(mls);
if (mks>0) delayMicroseconds(mks);
}

//Одновременный поворот двигателей 0, 1, 2 на x, y, z шагов соответственно
void MoveSM(long x, long y, long z) {
 long c[3], c2[3];
 double c1[3], d[3];
 long m, i;
 boolean flg;
 long cm;

 c[0] = x;
 c[1] = y;
 c[2] = z;

 cm=x/2;

 m = 1;
 for (i=0; i<2; i++) {
  if (m < abs(c[i])) m = abs(c[i]);
 }

 for (i=0; i<2; i++) {
  c1[i] = 0;
  d[i] = 1.0 * c[i] / m;
  c2[i] = 0;
 }

 flg = false;
 for (i=0; i<2; i++) {
  if (abs(c1[i]) < abs(c[i])) flg=true;
 }

 while (flg) {
  flg=false;
  for (i=0; i<2; i++) {
   if (abs(c1[i]) < abs(c[i]))
    c1[i] += d[i];
   if (abs(c1[i]) - abs(c2[i]) >= 0.5) {
    if (c[i]>0) {
     c2[i]++;
     moveForward(i);   // Удар при движении вправо
     if (i==0 && x!=0 && z>0 && c2[i]==cm) {
      digitalWrite(10, HIGH);
      delayMicros(z);
      digitalWrite(10, LOW);
     }
     
    } else if (c[i]<0) {
     c2[i]--;
     moveBackward(i);  // Удар при движении влево
     if (i==0 && x!=0 && z>0 && c2[i]==cm) {
      digitalWrite(10, HIGH);
      delayMicros(z);
      digitalWrite(10, LOW);
     }     
    }
   }
   if (abs(c1[i]) < abs(c[i])) flg=true;
  }
  delayMicros(delayTime);
 }
}

//Основной цикл
void loop() {

 
}
void configSD() // функции чтения конфигурационного файла с SD
{
  // вспомогательные переменные
  int h = 0; 
  int q = 0;       
  int d=7;
  char array[d][10];
  char *buffer;
  char symbol2 = 0;
  File configFile = SD.open("TEST3.txt");
  if (configFile) // если файл существует считываем из него данные 
  {
              while  (configFile.available())   
        {
          symbol2 = configFile.read();// считываем байт входящего файла
          if (symbol2==';') // символ конца строки точка с запятой
          {
            array[q][h]='\0'; 
            q++; 
            h=0; 
          }
          else // если еще не конец строки посимвольно добавляем 
          {
            array[q][h] = symbol2; 
            h++;
          }
          delay(2);
        }
      configFile.close(); // закрываем файл
  }
 char *p;
  byte t;
  // разберем полученные строки разделитель запятая
  for (int j=0; j < d; j++) 
  {
    t = 0;
    for( buffer = strtok_r(array[j], ",", &p); buffer; buffer = strtok_r(NULL, ",", &p) )
    {
      names[j][t]=buffer; 
      t++;
    }
  }
 
  for (byte j = 0; j < d; j++) { // Выведем данные в монитор порта 
// данные из массива names[j][0] можно использовать в коде.
        int x= atoi(names[j][0]);
        int y= atoi(names[j][1]); 
         Serial.print(x); 
         Serial.print(","); 
         Serial.print(y); 
         Serial.print(";");
         MoveSM(x,y,1); //Вращаем двигатели на заданное число шагов
     }
}

Из компа приходят только три параметра в строчке, разделенные запятой. После третьего параметра точка с запятой.

Зачем выложили? Вам же сказали, приходите когда будет своё.

Вам что-то непонятно в этой фразе?

Ок, ребята. Ну, тогда тему можно закрывать.
Спасибо.
Всех благ вам.

1 лайк

И Вам не хворать!

1 лайк