Создание скетча

Тема в разделе "Arduino & Shields", создана пользователем Artclonic, 4 янв 2018.

  1. Artclonic

    Artclonic Нерд

    Код (C++):
    #include <SD.h>// подключаем библиотеку CD

    // ШД №1  -двигатель радиусного поворота кисти
    // ШД №2  -двигатель поднятия/опускания кисти
    // ШД №3  -двигатель перемешения по пикселям в одной строке
    // ШД №1  -двигатель перемещения по строкам

    const int OB11=2; // ШД №1 обмотка №1
    const int OB12=3; // ШД №1 обмотка №2
    const int OB21=4; // ШД №2 обмотка №1
    const int OB22=5; // ШД №2 обмотка №2
    const int OB31=2; // ШД №3 обмотка №1
    const int OB32=3; // ШД №3 обмотка №2
    const int OB41=4; // ШД №4 обмотка №1
    const int OB42=5; // ШД №4 обмотка №2
    const int chipSelect = 10;

    void setup() // процедура setup
    {
    // Конфигурируем вывод подключения обмоток ШД как выход (OUTPUT)
    pinMode(OB11, OUTPUT);
    pinMode(OB12, OUTPUT);
    pinMode(OB21, OUTPUT);
    pinMode(OB22, OUTPUT);
    pinMode(OB31, OUTPUT);
    pinMode(OB32, OUTPUT);
    pinMode(OB41, OUTPUT);
    pinMode(OB42, OUTPUT);

    Serial.begin(9600);
    Serial.print("OPEN SD CARD");
    if (!SD.begin(chipSelect))
    {
        Serial.println("FAILED");
        return;
      }

    }

    void loop() // процедура loop
    {

    }

    void sd () {
    File dataFile = SD.open("test.txt");

     
    int W=1; // Переменная , которая будет считываться с массива, пока к примеру равна "1"

    int Q=5; // Количество ячеек (пикселей) в строке
    int Y=5; // Количество строк
    int S=1; // Текущее значение ячейки (пикселя) в массиве
    int F=1; // Текущее значение строки в массиве

    int R=1; // Количество циклов Перемещение ШД№1 на координату цвета №1
    int V=2; // Количество циклов Перемещение ШД№1 на координату цвета №2
    int H=3; // Количество циклов Перемещение ШД№1 на координату цвета №3
    int N=4; // Количество циклов Перемещение ШД№1 на координату цвета №4
    int Z=5; // Количество циклов Перемещение ШД№1 на координату цвета №5

    int X=10; // Количество циклов ШД№3 (Расстояние перемещения на  1 пиксель/на 1 строку)
    int P=5;  // Количество циклов ШД№2 (Опускание/поднятия кисти в бункер)
    int J=5;  // Количество циклов ШД№2 (Опускание/поднятия кисти на холст)



    unsigned long  A = 600; // паузы (скорость)  вращения ШД№1
    unsigned long  B = 700; // паузы (скорость)  вращения ШД№2
    unsigned long  C = 800; // паузы (скорость)  вращения ШД№3
    unsigned long  D = 900; // паузы (скорость)  вращения ШД№4

     
    for (int l=0; l= Y; l++) // Количество  строк в массиве
    {
    for (int l=0; l= Q; l++) // Количество  пикселей в строке
    {
    if (int W = 1)// Проверка значения пикселя в массиве
    {
    for (int l=0; l= R; l++) // Работа ШД№1 (вперед)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД1
    delay(A);
    }
    for (int l=0; l= P; l++) // Работа ШД№2 (опускание кисти в бункер)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    }
    for (int l=0; l= P; l++) // Работа ШД№2 (поднятие кисти из бункера)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    }
    for (int l=0; l= R; l++) // Работа ШД№1 (назад)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД1
    delay(A);
    }
    for (int l=0; l= J; l++) // Работа ШД№2 (опускание кисти на холст)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    }
    for (int l=0; l= J; l++) // Работа ШД№2 (поднятие кисти с холста)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    }
    }
    else
    {
    for (int l=0; l= X; l++)// Работа ШД№3 (перемещение на один пиксель в строке)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД3
    delay(C);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД3
    delay(C);
    }
    }
    S=S+1
    }
    F=F+1
    }
    for (int l=0; l= X; l++)// Работа ШД№3 (перемещение на один пиксель в строке)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД3
    delay(C);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД3
    delay(C);
    }
    for (int l=0; l= X; l++)// Работа ШД№4 (перемещение на следующую строку)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД4
    delay(D);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД4
    delay(D);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД4
    delay(D);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД4
    delay(D);
    }
    dataFile.close();
    }

     
    Добавил две переменные (S) и (F) - текущее значение ячейки и строки. Теперь могу анализировать шаг за шагом массив. КАК ЗАПИСАТЬ? Вот так?
    if massiv [2] [1] =1
    { }
    else
    { }
     
  2. Artclonic

    Artclonic Нерд

    Код (C++):
    #include <SD.h>// подключаем библиотеку CD

    // ШД №1  -двигатель радиусного поворота кисти
    // ШД №2  -двигатель поднятия/опускания кисти
    // ШД №3  -двигатель перемешения по пикселям в одной строке
    // ШД №1  -двигатель перемещения по строкам

    const int OB11=2; // ШД №1 обмотка №1
    const int OB12=3; // ШД №1 обмотка №2
    const int OB21=4; // ШД №2 обмотка №1
    const int OB22=5; // ШД №2 обмотка №2
    const int OB31=2; // ШД №3 обмотка №1
    const int OB32=3; // ШД №3 обмотка №2
    const int OB41=4; // ШД №4 обмотка №1
    const int OB42=5; // ШД №4 обмотка №2
    const int chipSelect = 10;

    void setup() // процедура setup
    {
    // Конфигурируем вывод подключения обмоток ШД как выход (OUTPUT)
    pinMode(OB11, OUTPUT);
    pinMode(OB12, OUTPUT);
    pinMode(OB21, OUTPUT);
    pinMode(OB22, OUTPUT);
    pinMode(OB31, OUTPUT);
    pinMode(OB32, OUTPUT);
    pinMode(OB41, OUTPUT);
    pinMode(OB42, OUTPUT);

    Serial.begin(9600);
    Serial.print("OPEN SD CARD");
    if (!SD.begin(chipSelect))
    {
        Serial.println("FAILED");
        return;
      }

    }

    void loop() // процедура loop
    {

    }

    void sd () {
    File dataFile = SD.open("test.txt");


    int W=1; // Переменная , которая будет считываться с массива, пока к примеру равна "1"

    int Q=5; // Количество ячеек (пикселей) в строке
    int Y=5; // Количество строк
    int S=1; // Текущее значение ячейки (пикселя) в массиве
    int F=1; // Текущее значение строки в массиве

    int R=1; // Количество циклов Перемещение ШД№1 на координату цвета №1
    int V=2; // Количество циклов Перемещение ШД№1 на координату цвета №2
    int H=3; // Количество циклов Перемещение ШД№1 на координату цвета №3
    int N=4; // Количество циклов Перемещение ШД№1 на координату цвета №4
    int Z=5; // Количество циклов Перемещение ШД№1 на координату цвета №5

    int X=10; // Количество циклов ШД№3 (Расстояние перемещения на  1 пиксель/на 1 строку)
    int P=5;  // Количество циклов ШД№2 (Опускание/поднятия кисти в бункер)
    int J=5;  // Количество циклов ШД№2 (Опускание/поднятия кисти на холст)



    unsigned long  A = 600; // паузы (скорость)  вращения ШД№1
    unsigned long  B = 700; // паузы (скорость)  вращения ШД№2
    unsigned long  C = 800; // паузы (скорость)  вращения ШД№3
    unsigned long  D = 900; // паузы (скорость)  вращения ШД№4

    int massiv [Q][Y]={test.txt}; /массив в файлеSD

    for (int l=0; l= Y; l++) // Количество  строк в массиве
    {
    for (int l=0; l= Q; l++) // Количество  пикселей в строке
    {
    if (massiv[S][F] =1)// Проверка значения текущей ячейки в массиве
    {
    for (int l=0; l= R; l++) // Работа ШД№1 (вперед)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД1
    delay(A);
    }
    for (int l=0; l= P; l++) // Работа ШД№2 (опускание кисти в бункер)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    }
    for (int l=0; l= P; l++) // Работа ШД№2 (поднятие кисти из бункера)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    }
    for (int l=0; l= R; l++) // Работа ШД№1 (назад)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД1
    delay(A);
    }
    for (int l=0; l= J; l++) // Работа ШД№2 (опускание кисти на холст)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    }
    for (int l=0; l= J; l++) // Работа ШД№2 (поднятие кисти с холста)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    }
    }
    else
    {
    for (int l=0; l= X; l++)// Работа ШД№3 (перемещение на один пиксель в строке)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД3
    delay(C);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД3
    delay(C);
    }
    }
    S=S+1;
    }
    F=F+1;
    }
    for (int l=0; l= X; l++)// Работа ШД№3 (перемещение на один пиксель в строке)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД3
    delay(C);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД3
    delay(C);
    }
    for (int l=0; l= X; l++)// Работа ШД№4 (перемещение на следующую строку)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД4
    delay(D);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД4
    delay(D);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД4
    delay(D);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД4
    delay(D);
    }
    dataFile.close();
    }

     
    Добавил двухмерный массив, добавил анализ текущих значений массива. Подскажите как объявить массив, значение которого записаны в файле на SD????
     
  3. b707

    b707 Гик

    никак.
    Данные надо предварительно прочитать из файла, разобрать на элементы и положить в массив в памяти программы
     
  4. Artclonic

    Artclonic Нерд

    1. Прочитать
    2. Разобрать на элементы
    3. Сформировать массив из прочитанных элементов...
    4. Анализировать каждый элемент полученного массива...

    Скажите это много строк кода? (я просто анализирую осилю я это или лучше этот кусочек попросить чтоб за некоторые деньги написали?
     
  5. Artclonic

    Artclonic Нерд

    А если этот массив в файле будет вот в таком формате (я его подготовлю)
    int massiv [5][5]= {
    {1, 1, 1, 1, 1},
    {1, 2, 2, 2, 2},
    {1, 2, 1, 1, 1},
    {1, 2, 1, 0, 1},
    {1, 2, 1, 3, 2} };
    Это облегчит задачу?
     
  6. DIYMan

    DIYMan Гуру

    Нет.
     
  7. b707

    b707 Гик

    Если массив не очень большой, то облегчить задачу можно. вообще отказавшись от SD-карты. Например, массив в несколько тысяч строк можно непосредственно поместить в память контроллера.

    Если честно, ваши вопросы вызывают скорее раздражение, чем желание помочь. Не научившись толком слова из букв составлять, вы уже взялись роман писать. Вам бы почитать любой базовый учебник проограммирования сначала.
     
  8. b707

    b707 Гик

    и еще добавлю.
    В вашем коде бредятина:

    Код (Text):
    if (massiv[S][F] =1)   // Проверка значения текущей ячейки в массиве
    Проверка значения так не делается. хоть это и компилируется без ошибок - работать не будет.

    Почитайте все-таки учебник по Си - от корки до корки. Реально потратите пару вечеров. зато потом куча дурацких вопросов отпадет сама собой.
     
  9. Artclonic

    Artclonic Нерд

    Так и поступлю пока до корки не впитаю!
    Напишите плиз как будет "этот эпитет" выглядеть. (десятки форумов загуглил, - ни где не встретил как иначе значение элемента массива проверить.
    У меня аналогичная программа написана в макросе Ексель, я ее сам писал (с помощью форумчан планета ексель) Но она работает с LPT портом, также активирует пины порта, подавая высокий сигнал, один в один. Но там я анализирую ячейки (тоже своего рода массив) и в соответствии со значением шаговики отрабатывают алгоритмы. Тут я прочитал про массивы (повторюсь не один форум) примеров не нашел. Одно дело теория, а другое примеры, для меня трудно без примеров впитать.. (я к сожалению или к счастью не программист, но логика вроде толкает к правильным решениям). Я не прошу за меня писать код в 10 тыс строк, Я прошу подсказать! ткнуть в пример....
    PS не раздрожайтесь
     
  10. DIYMan

    DIYMan Гуру

    К вам вопросы - какой оператор используется для сравнения на совпадение? Это знак "равно", или два знака "равно" подряд? Какой оператор используете вы? Если правильно ответите на эти вопросы - поймёте, что не так. И да - надо читать основы языка С++.
     
  11. Artclonic

    Artclonic Нерд

    Операция - равенство
    Оператор ==
    Синтаксис выражения a==b
    Пример
    Член типа T RT::eek:perator==(Sb);
    Определение вне класса
    Roperator==(Ta,Sb);

    По ходу два знака равенства....
    Так?
    Код (C++):
    if (massiv[S][F]==1)// Проверка значения текущей ячейки в массиве
     
  12. Artclonic

    Artclonic Нерд

    Добавил "обратную связь" (фотодатчик), в положение перед опусканием кисти
    идет проверка, если нет лог единички, то через реле отключится питание всей системы.
    Код (C++):
    //#include <SD.h>// подключаем библиотеку CD

    // ШД №1  -двигатель радиусного поворота кисти
    // ШД №2  -двигатель поднятия/опускания кисти
    // ШД №3  -двигатель перемешения по пикселям в одной строке
    // ШД №1  -двигатель перемещения по строкам

    const int OB11=2; // ШД №1 обмотка №1
    const int OB12=3; // ШД №1 обмотка №2
    const int OB21=4; // ШД №2 обмотка №1
    const int OB22=5; // ШД №2 обмотка №2
    const int OB31=2; // ШД №3 обмотка №1
    const int OB32=3; // ШД №3 обмотка №2
    const int OB41=4; // ШД №4 обмотка №1
    const int OB42=5; // ШД №4 обмотка №2
    const int chipSelect = 10;

    void setup() // процедура setup
    {
    // Конфигурируем вывод подключения обмоток ШД как выход (OUTPUT)
    pinMode(OB11, OUTPUT);
    pinMode(OB12, OUTPUT);
    pinMode(OB21, OUTPUT);
    pinMode(OB22, OUTPUT);
    pinMode(OB31, OUTPUT);
    pinMode(OB32, OUTPUT);
    pinMode(OB41, OUTPUT);
    pinMode(OB42, OUTPUT);

    pinMode(6, INPUT_PULLUP);// Подключение фотосенсора
    pinMode(7, OUTPUT);// Выход на реле отключения питания


    Serial.begin(9600);
    //Serial.print("OPEN SD CARD");
    //if (!SD.begin(chipSelect))
    //{
      //  Serial.println("FAILED");
       // return;
      //}

    }

    void loop() // процедура loop
    {

    //}

    //void sd () {
    //File dataFile = SD.open("test.txt");


    int W=1; // Переменная , которая будет считываться с массива, пока к примеру равна "1"

    int Q=5; // Количество ячеек (пикселей) в строке
    Serial.print(Q);
    int Y=5; // Количество строк
    Serial.print(Y);
    int S=1; // Текущее значение ячейки (пикселя) в массиве
    int F=1; // Текущее значение строки в массиве

    int R=1; // Количество циклов Перемещение ШД№1 на координату цвета №1
    int V=2; // Количество циклов Перемещение ШД№1 на координату цвета №2
    int H=3; // Количество циклов Перемещение ШД№1 на координату цвета №3
    int N=4; // Количество циклов Перемещение ШД№1 на координату цвета №4
    int Z=5; // Количество циклов Перемещение ШД№1 на координату цвета №5

    int X=10; // Количество циклов ШД№3 (Расстояние перемещения на  1 пиксель/на 1 строку)
    int P=5;  // Количество циклов ШД№2 (Опускание/поднятия кисти в бункер)
    int J=5;  // Количество циклов ШД№2 (Опускание/поднятия кисти на холст)



    unsigned long  A = 600; // паузы (скорость)  вращения ШД№1
    unsigned long  B = 700; // паузы (скорость)  вращения ШД№2
    unsigned long  C = 800; // паузы (скорость)  вращения ШД№3
    unsigned long  D = 900; // паузы (скорость)  вращения ШД№4

    int massiv [Q][Y]= {
      {1, 1, 1, 1, 1},
      {1, 2, 2, 2, 2},
      {1, 2, 1, 1, 1},
      {1, 2, 1, 0, 1},
      {1, 2, 1, 3, 2} }; //массив в файле SD

    for (int l=0; l= Y; l++) // Количество  строк в массиве
    {
    for (int l=0; l= Q; l++) // Количество  пикселей в строке
    {
    if (massiv[S][F]==1)// Проверка значения текущей ячейки в массиве
    {
    for (int l=0; l= R; l++) // Работа ШД№1 (вперед)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД1
    delay(A);
    }
    for (int l=0; l= P; l++) // Работа ШД№2 (опускание кисти в бункер)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    }
    for (int l=0; l= P; l++) // Работа ШД№2 (поднятие кисти из бункера)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    }
    for (int l=0; l= R; l++) // Работа ШД№1 (назад)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД1
    delay(A);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД1
    delay(A);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД1
    delay(A);
    }
    if (digitalRead(6)) digitalWrite(7,LOW);
    else digitalWrite(7,HIGH); // Проверка позиционирования кисти перед опусканием на холст,
    //если логической "1" нет, то реле отключит питание девайса

    for (int l=0; l= J; l++) // Работа ШД№2 (опускание кисти на холст)
    {
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    }
    for (int l=0; l= J; l++) // Работа ШД№2 (поднятие кисти с холста)
    {
    digitalWrite(OB12,HIGH);// включаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB12,LOW);// выключаем  обмотку2 ШД2
    delay(B);
    digitalWrite(OB11,HIGH);// включаем  обмотку1 ШД2
    delay(B);
    digitalWrite(OB11,LOW);// вылючаем  обмотку1 ШД2
    delay(B);
    }
    }
    else
    {
    for (int l=0; l= X; l++)// Работа ШД№3 (перемещение на один пиксель в строке)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД3
    delay(C);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД3
    delay(C);
    }
    }
    S=S+1;
    Serial.print(S);
    }
    F=F+1;
    Serial.print(F);
    }
    for (int l=0; l= X; l++)// Работа ШД№3 (перемещение на один пиксель в строке)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД3
    delay(C);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД3
    delay(C);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД3
    delay(C);
    }
    for (int l=0; l= X; l++)// Работа ШД№4 (перемещение на следующую строку)
    {
    digitalWrite(OB31,HIGH);// включаем  обмотку1 ШД4
    delay(D);
    digitalWrite(OB31,LOW);// вылючаем  обмотку1 ШД4
    delay(D);
    digitalWrite(OB32,HIGH);// включаем  обмотку2 ШД4
    delay(D);
    digitalWrite(OB32,LOW);// выключаем  обмотку2 ШД4
    delay(D);
    }
    //dataFile.close();
    delay(1000000);// задержка отладки программы ТЕХНИЧЕСКАЯ
    }

     
     
  13. Artclonic

    Artclonic Нерд

    Вроде решил задачу - "Анализа каждого элемента массива снизу вверх змейкой"
    Змейку организовал на проверки четности/нечетности строки, скажите верно использую?
    Код (C++):
    if (!(Y%2))
    {} // действие если четное значение Y
    else
    { }// действие если не четное значение Y
     
  14. DIYMan

    DIYMan Гуру

    Да.
     
  15. DetSimen

    DetSimen Гик

    проще (Y & 0x01)
     
  16. Artclonic

    Artclonic Нерд

    Ну вот я почти у цели! Осталось отладить на ардуинке...
    По мимо контроля в определенном положении при помощи фото датчика есть мысль использовать схему замыкания контакта (как концевые выключатели на станках с ЧПУ) - замкнул станок остановился, ну или как в варианте выше - послал сигнал на реле -оно отключилось. Но вот вариант программного приостановления действия программы - более интересен потому как требует меньших электрических компонентов (сказать, вообще не требует).
    Наверное есть (колхозное решение) если контакт замкнут - все обмотки шаговиков отключить! И уйти в паузу к примеру на delay(10000000000000000000000000000000000000000000); (а до этого еще замкнуть вход GSM модема, который о неисправности мне сообщит)
    Это приемлемый вариант? Но как это сделать параллельно с работающей программой? Я же не буду через каждую строку такой код проверки внедрять...
     
  17. DIYMan

    DIYMan Гуру

    Уйти в паузу на delay - неверно. Верно - выставить флаг, что концевик сработал, и если этот флаг взведён - ничего лишнего в loop не делать (при этом можно по прежнему выводить что-то на дисплей, например).
     
  18. Artclonic

    Artclonic Нерд

    Где правильно это прописать?
    Правильно я понимаю, что это будет выглядеть аналогичным образом, но должно прописываться не в loop?

    Код (C++):
    if (digitalRead(8))
    {for(;;);}
    К примеру пустить по пути бесконечного цикла
    Но где это прописать?
     
  19. DIYMan

    DIYMan Гуру

    Ещё раз: бесконечный цикл - не нужен. Мне кажется, что я понятно описал алгоритм, перечитайте ещё раз моё предыдущее сообщение. В псевдокоде алгоритм выглядит так:

    Код (C++):
    bool isEndSwitchTriggered = false;

    void loop()
    {
        isEndSwitchTriggered = digitalRead(ENDSWITCH_PIN) == HIGH;
       
        if(isEndSwitchTriggered)
        {
            turnSteppersOff(); // выключаем моторы
        }
        else
        {
            // тут работаем, если концевик не сработал
        }
    }
    Вы здесь видите хоть один delay?
     
  20. Artclonic

    Artclonic Нерд

    Логический (булевый) тип данных — boolean. Может принимать одно из двух значений true или false. boolean занимает в памяти один байт.
    А это все параллельно работает с работой программы.? В смысле - перефразирую - если концевик замкнуть после else (т.е. в процессе непосредственного выполнения)