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

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

  1. Artclonic

    Artclonic Нерд

    Добры день, пробую написать скетч (САМ) для работы одновременно с тремя сервомашинками и двумя шаговыми двигателями. Писать буду шажочками по мере изучения. Вот первая задача покрутить сервами и шаговыми двигателями. Прошу посмотреть...
    Код (C++):

    #include <Servo.h> // подключаем библиотеку для работы с сервоприводом
    #include <AFMotor.h>// подключаем библиотеку для работы с шаговым двигателем

    AF_Stepper motor1(48, 1);//используются для шагового двигателя №1 выводы шилда M1 и M2
    AF_Stepper motor2(48, 2);//используются для шагового двигателя №2 выводы шилда M3 и M4

    Servo servo1; // объявляем переменную servo типа "servo1"
    Servo servo2; // объявляем переменную servo типа "servo2"
    Servo servo3; // объявляем переменную servo типа "servo3"

    void setup() // процедура setup
    {
    servo1.attach(A0); // привязываем сервопривод к аналоговому выходу A0
    servo2.attach(A1); // привязываем сервопривод к аналоговому выходу A1
    servo3.attach(A2); // привязываем сервопривод к аналоговому выходу A2

    motor1.setSpeed(10); // 10 об/мин скорость для шагового двигателя №1
    motor2.setSpeed(20); // 20 об/мин скорость для шагового двигателя №2
    }

    void loop() // процедура loop
    {
    servo1.write(0); // ставим угол поворота сервы №1 под 0
    delay(2000); // ждем 2 секунды
    servo2.write(90); // ставим угол поворота сервы №2 под 90
    delay(2000); // ждем 2 секунды
    servo2.write(180); // ставим угол поворота сервы №3 под 18
    delay(2000); // ждем 2 секунды

    motor1.step(100, FORWARD, SINGLE);
    motor1.step(100, BACKWARD, SINGLE);
    motor2.step(100, FORWARD, SINGLE);
    motor2.step(100, BACKWARD, SINGLE);
    }
     
     
  2. Artclonic

    Artclonic Нерд

    Добавил в свою "разработку" здравого смысла , а именно скетч анализирует буквенный массив с определенным количеством значений в строке (3) и количеством строк (3) данный массив планируется анализировать или с монитора порта или скорее всего с CD карты.Пример массива.
    A B C
    D E F
    G H I
    В скетче используется два цикла (переборка значений в строке и соответственно самих строк) Ни как не могу допетрить как переменную( в моем случае W) прияезать к анализируемому массиву.
    Код (C++):
    #include <Servo.h> // подключаем библиотеку для работы с сервоприводом
    #include <AFMotor.h>// подключаем библиотеку для работы с шаговым двигателем
    AF_Stepper motor1(48, 1);//используются для шагового двигателя №1 выводы шилда M1 и M2
    AF_Stepper motor2(48, 2);//используются для шагового двигателя №2 выводы шилда M3 и M4

    Servo servo1; // объявляем переменную servo типа "servo1"
    Servo servo2; // объявляем переменную servo типа "servo2"
    Servo servo3; // объявляем переменную servo типа "servo3"


    //Параметры массива (количество значений в строке R, количество строк S)

    R = 3
    S = 3
    i // текущее значенияе в строке
    l // текущее значение строки

    // Далее объявляем переменную при помощи которой будем анализировать W,

    W // тут незнаю как объявить.....


    void setup() // процедура setup
    {
    servo1.attach(A0); // привязываем сервопривод к аналоговому выходу A0
    servo2.attach(A1); // привязываем сервопривод к аналоговому выходу A1
    servo3.attach(A2); // привязываем сервопривод к аналоговому выходу A2

    motor1.setSpeed(10); // 10 об/мин скорость для шагового двигателя №1
    motor2.setSpeed(20); // 20 об/мин скорость для шагового двигателя №2
    }


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


    for (int l=0; l=R; l++)// перебирает строки
    {
    for (int i=0; i=s; i++)// цикл проверки значений в строке
    {

    // Далее "условие" движения серв и шаговиков в зависимости от W

    {
    If (W="A")
    {
    servo1.write(10); // ставим угол поворота сервы №1 под 10
    delay(2000); // ждем 2 секунды
    servo2.write(90); // ставим угол поворота сервы №2 под 90
    delay(2000); // ждем 2 секунды
    servo2.write(0); // ставим угол поворота сервы №2 под 0
    delay(2000); // ждем 2 секунды
    servo1.write(0); // ставим угол поворота сервы №1 под 0
    delay(2000); // ждем 2 секунды
    servo3.write(30); // ставим угол поворота сервы №3 под 30
    delay(2000); // ждем 2 секунды
    servo3.write(0); // ставим угол поворота сервы №3 под 0
    delay(2000); // ждем 2 секунды
    {
    If (W="B")
    servo1.write(10); // ставим угол поворота сервы №1 под 10
    delay(2000); // ждем 2 секунды
    servo2.write(90); // ставим угол поворота сервы №2 под 90
    delay(2000); // ждем 2 секунды
    servo2.write(0); // ставим угол поворота сервы №2 под 0
    delay(2000); // ждем 2 секунды
    servo1.write(0); // ставим угол поворота сервы №1 под 0
    delay(2000); // ждем 2 секунды
    servo3.write(30); // ставим угол поворота сервы №3 под 30
    delay(2000); // ждем 2 секунды
    servo3.write(0); // ставим угол поворота сервы №3 под 0
    delay(2000); // ждем 2 секунды
    {

    If (W="С")
    servo1.write(10); // ставим угол поворота сервы №1 под 10
    delay(2000); // ждем 2 секунды
    servo2.write(90); // ставим угол поворота сервы №2 под 90
    delay(2000); // ждем 2 секунды
    servo2.write(0); // ставим угол поворота сервы №2 под 0
    delay(2000); // ждем 2 секунды
    servo1.write(0); // ставим угол поворота сервы №1 под 0
    delay(2000); // ждем 2 секунды
    servo3.write(30); // ставим угол поворота сервы №3 под 30
    delay(2000); // ждем 2 секунды
    servo3.write(0); // ставим угол поворота сервы №3 под 0
    delay(2000); // ждем 2 секунды
    {

    else
    {
    motor1.step(100, FORWARD, SINGLE);
    {
    {
    motor2.step(100, BACKWARD, SINGLE);
    }
     
  3. ИгорьК

    ИгорьК Давно здесь

    Там где есть delay(2000) здравый смысл быть не может.
    Засучивайте рукава и измеряйте время вместо остановки программы.
    То есть определяйте когда должен будет сделан следующий шаг, проверяйте время, делайте шаг, определяйте время следующего шага и так бесконечно.
     
  4. Artclonic

    Artclonic Нерд

    Все движения серв однообразны и мне известны время передвижения каждого действия.... Засучивать не надо...Как массив проанализировать на значения? Подскажите

    Допустим в макросе в екселе все понятно значение ячейки (m,n), ячейки анализируешь...циклом...(1,1) (1,2) (1,3) потом (2,1) (2,2) (2,3).... и т.д. Если значение равно символу "А" то серва поворачивается на 90 град, если значение "В", то на 180 град... А как тут будет выглядеть?



    Есть возможность (знания) сделать макрос в екселе который тупо последовательность команд сформирует и залить его в ардуино, тогда не надо ни массивов, ни циклов... Сколько строк поместится в скетч? 100000 строк поместится? Или с CD карты можно считать код программы (туда наверно е точно поместится?)

    В какую сторону идти?
     
    Последнее редактирование: 4 янв 2018
  5. Artclonic

    Artclonic Нерд

    При компиляции ошибка
    test:14: error: 'R' does not name a type
    test:38: error: expected initializer before 'for'
    test:38: error: 'l' does not name a type
    test:38: error: 'l' does not name a type
    exit status 1
    'R' does not name a type
     
  6. akl

    akl Гик

    надо для начала что-то про си почитать. хоть амперку-вики. там и про массивы вроде есть.

    /rikit mod off
     
  7. Artclonic

    Artclonic Нерд

    Если циклы в процессе освоения.... Скажите если все действия прописать в скетче сколько строк влезет кода к примеру на мегу?
     
  8. DIYMan

    DIYMan Гуру

    Несколько десятков тысяч строк исходного кода, после компиляции, вмещаются в мегу. Но всё зависит от самого кода - можно и десятком строчек сделать так, что не вместится.
     
  9. Artclonic

    Artclonic Нерд

    Хочу миллисекунды задать переменной А
    почему так ругается?

    int A = 550;
    servo1.write(0); // ставим угол поворота под 0
    delay(A); // ждем 1 секунды
     
  10. vvr

    vvr Инженерище

    unsigned long
     
  11. Artclonic

    Artclonic Нерд

    unsigned long A = 1000;
    unsigned long B = 700;
    unsigned long C = 700;
    }

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

    servo1.write(0);
    delay(A); //
    servo1.write(180);
    delay(A);


    Все равно ругается.....
     
  12. DIYMan

    DIYMan Гуру

    Полный скетч, плз. То, что написано выше - дичь. Переменные должны быть объявлены ГЛОБАЛЬНО, т.е. вне функции, а судя по закрывающей фигурной скобке в строке номер 4 - они у вас в функции setup, а кличете вы их из loop, где никто о них не знает. Или перенесите их объявление в функцию loop.

    И да - надо учить основы языка С++.
     
  13. Artclonic

    Artclonic Нерд

    Код (C++):
    #include <Servo.h> // подключаем библиотеку для работы с сервоприводом

    Servo servo1; // объявляем переменную servo типа "servo1"
    Servo servo2; // объявляем переменную servo типа "servo1"
    void setup() // процедура setup
    {
    servo1.attach(9); // привязываем сервопривод к аналоговому выходу 9
    servo2.attach(10); // привязываем сервопривод к аналоговому выходу 10
    unsigned long  A = 1000;
    unsigned long  B = 700;
    unsigned long  C = 700;
    }

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

    servo1.write(0); // ставим угол поворота под 0
    delay(A); // ждем 1 секунды
    servo1.write(180); // ставим угол поворота под 90
    delay(A); // ждем 2 секунды
    servo1.write(0); // ставим угол поворота под 0
    delay(A); // ждем 2 секунды
    servo1.write(180); // ставим угол поворота под 90
    delay(A); // ждем 2 секунды
    servo1.write(0); // ставим угол поворота под 0
    delay(A); // ждем 2 секунды
    servo1.write(180); // ставим угол поворота под 90
    delay(A); // ждем 2 секунды
    servo1.write(0); // ставим угол поворота под 0
    delay(A); // ждем 2 секунды
    servo1.write(180); // ставим угол поворота под 90
    delay(A); // ждем 2 секунды
    servo1.write(0); // ставим угол поворота под 90
    delay(A); // ждем 2 секунды

    servo2.write(0); // ставим угол поворота под 0
    delay(B); // ждем 1 секунды
    servo2.write(45); // ставим угол поворота под 90
    delay(B); // ждем 2 секунды
    servo2.write(0); // ставим угол поворота под 0
    delay(B); // ждем 2 секунды
    servo2.write(45); // ставим угол поворота под 90
    delay(B); // ждем 2 секунды
    servo2.write(0); // ставим угол поворота под 0
    delay(B); // ждем 2 секунды
    servo2.write(45); // ставим угол поворота под 90
    delay(B); // ждем 2 секунды
    servo2.write(0); // ставим угол поворота под 0
    delay(B); // ждем 2 секунды
    servo2.write(45); // ставим угол поворота под 90
    delay(B); // ждем 2 секунды
    servo2.write(0); // ставим угол поворота под 90
    delay(C); // ждем 2 секунды

    }
    Перенес в loop - Не ругается!!! (я уяснил этот момент!!!!) Теперь понял что хоть посмотреть в вики Спасибо!
     
  14. DIYMan

    DIYMan Гуру

    Как я и говорил - вынесите вот эти строчки из setup:
    Код (C++):
    unsigned long  A = 1000;
    unsigned long  B = 700;
    unsigned long  C = 700;
     
  15. Artclonic

    Artclonic Нерд

    Да я понял... посмотрел в вики вроде стало ясно, что-где объявляется и декларируется... скажите почему одна серва при включении проги на 180 град поворачивается (хотя ей ни кто об этом не говорит,а говорят 0-45) а другая при повороте на 180 не фиксируется, а с тихим треском медленно медленно далее проворачивается...
     
  16. Artclonic

    Artclonic Нерд

    Скажите почему ругается
    Anti:123: error: expected '}' before 'else'
    Anti:162: error: expected declaration before '}' token
    exit status 1
    expected '}' before 'else'
    Код (C++):
    // ШД №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

    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);
    }

    void loop() // процедура loop
    {
    int W=2; // Переменная , которая будет считываться с массива, пока к примеру равна "2"

    int Q=5; // Количество пикселей в строке
    int Y=5; // Количество строк

    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 = 2)// Проверка значения пикселя в массиве
    {
    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);
    }
    }
    }
    }
    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);
    }
    }
    }
     
  17. akl

    akl Гик

    там же написано прямым текстом - скобка if'а перед else не закрыта.
    очень мутный алгоритм - не могу понять что там происходит
     
  18. Artclonic

    Artclonic Нерд

    Кисточка имеет возможность вращаться по радиусу (Шаговый двигатель №1) (бункера с красками по кругу размещены)
    Имеет возможность перемещения вверх вниз (Шаговый двигатель №2) (мокание в краску и касание холста и обратное поднятие)
    Вся эта конструкция двигается по "пиксельно" в строке (Шаговый двигатель №3) и по "строчно" (Шаговый двигатель №4).
    В зависимости от значения W, кисть повернется к тому или иному бункеру, опустится вниз (макнет в краску), поднимится, повернется обратно (по окружности ) опустится коснувшись холста и поднимется в начальное положение. Управление шаговиками фазное -напрямую подключая ту или иную обмотку.
    PS спасибо! поправил скетч - вроде ошибок нет...
     
  19. Artclonic

    Artclonic Нерд

    Цель следующая... На CD карте в файле test.txt имеется массив (таблица) к примеру 5 х 5
    1 2 3 5 4
    2 3 4 1 5
    1 5 4 3 2
    2 4 1 3 5
    5 1 3 2 4

    Значение переменной W и есть значение каждой ячейки... Мне надо каким то образом прочитать данный массив змейкой снизу вверх и в зависимости от значение переменной W шаговики отработают по своему алгоритму
     
  20. 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 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);
    }
    }
    }
    }
    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);
    }
    }
    Добавил библиотеку SD, вставил функцию считывания данных c файла test.txt. Перенести пришлось значения переменных в раздел void sd (я так понимаю, что это низкоуровное чтение SD). Вроде все съело не ругается...
    Помогите с кодом чтения массива.
    Как записать если текущее значение ячейки с адресом [a] [б] равно 1, то...
    if massiv [a] [б] =1
    { }
    else
    { }
    так?
    Или все же через string идти - построчно анализировать? (хотя это тоже своего рода массив ..же)
     
    Последнее редактирование: 9 янв 2018