Добры день, пробую написать скетч (САМ) для работы одновременно с тремя сервомашинками и двумя шаговыми двигателями. Писать буду шажочками по мере изучения. Вот первая задача покрутить сервами и шаговыми двигателями. Прошу посмотреть... Код (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); }
Добавил в свою "разработку" здравого смысла , а именно скетч анализирует буквенный массив с определенным количеством значений в строке (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); }
Там где есть delay(2000) здравый смысл быть не может. Засучивайте рукава и измеряйте время вместо остановки программы. То есть определяйте когда должен будет сделан следующий шаг, проверяйте время, делайте шаг, определяйте время следующего шага и так бесконечно.
Все движения серв однообразны и мне известны время передвижения каждого действия.... Засучивать не надо...Как массив проанализировать на значения? Подскажите Допустим в макросе в екселе все понятно значение ячейки (m,n), ячейки анализируешь...циклом...(1,1) (1,2) (1,3) потом (2,1) (2,2) (2,3).... и т.д. Если значение равно символу "А" то серва поворачивается на 90 град, если значение "В", то на 180 град... А как тут будет выглядеть? Есть возможность (знания) сделать макрос в екселе который тупо последовательность команд сформирует и залить его в ардуино, тогда не надо ни массивов, ни циклов... Сколько строк поместится в скетч? 100000 строк поместится? Или с CD карты можно считать код программы (туда наверно е точно поместится?) В какую сторону идти?
При компиляции ошибка 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
надо для начала что-то про си почитать. хоть амперку-вики. там и про массивы вроде есть. /rikit mod off
Если циклы в процессе освоения.... Скажите если все действия прописать в скетче сколько строк влезет кода к примеру на мегу?
Несколько десятков тысяч строк исходного кода, после компиляции, вмещаются в мегу. Но всё зависит от самого кода - можно и десятком строчек сделать так, что не вместится.
Хочу миллисекунды задать переменной А почему так ругается? int A = 550; servo1.write(0); // ставим угол поворота под 0 delay(A); // ждем 1 секунды
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); Все равно ругается.....
Полный скетч, плз. То, что написано выше - дичь. Переменные должны быть объявлены ГЛОБАЛЬНО, т.е. вне функции, а судя по закрывающей фигурной скобке в строке номер 4 - они у вас в функции setup, а кличете вы их из loop, где никто о них не знает. Или перенесите их объявление в функцию loop. И да - надо учить основы языка С++.
Код (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 - Не ругается!!! (я уяснил этот момент!!!!) Теперь понял что хоть посмотреть в вики Спасибо!
Как я и говорил - вынесите вот эти строчки из setup: Код (C++): unsigned long A = 1000; unsigned long B = 700; unsigned long C = 700;
Да я понял... посмотрел в вики вроде стало ясно, что-где объявляется и декларируется... скажите почему одна серва при включении проги на 180 град поворачивается (хотя ей ни кто об этом не говорит,а говорят 0-45) а другая при повороте на 180 не фиксируется, а с тихим треском медленно медленно далее проворачивается...
Скажите почему ругается 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); } } }
там же написано прямым текстом - скобка if'а перед else не закрыта. очень мутный алгоритм - не могу понять что там происходит
Кисточка имеет возможность вращаться по радиусу (Шаговый двигатель №1) (бункера с красками по кругу размещены) Имеет возможность перемещения вверх вниз (Шаговый двигатель №2) (мокание в краску и касание холста и обратное поднятие) Вся эта конструкция двигается по "пиксельно" в строке (Шаговый двигатель №3) и по "строчно" (Шаговый двигатель №4). В зависимости от значения W, кисть повернется к тому или иному бункеру, опустится вниз (макнет в краску), поднимится, повернется обратно (по окружности ) опустится коснувшись холста и поднимется в начальное положение. Управление шаговиками фазное -напрямую подключая ту или иную обмотку. PS спасибо! поправил скетч - вроде ошибок нет...
Цель следующая... На 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 шаговики отработают по своему алгоритму
Код (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 идти - построчно анализировать? (хотя это тоже своего рода массив ..же)