Почему может быть абра-кадабра в мониторе порта (скорости совпадают - 9600) и вроде числа отражаются нормально. И еще в одну строчку отображается последовательно, а не строчками
Много причин. Одна из них - отсутствие общей земли между дунькой и модулем, с которым она общается по UART.
взял пример Код (C++): void loop() { // Отправляем «Hellow World!». Serial.print("Hellow World!"); // Отправляем «Hellow World!» включая спецсимволы, означающие переход на новую строку. Serial.println("Hellow World!"); // Спим одну секунду. delay(1000); } Его нормально отрабатывает (но я сначала исправить кодировку и перезагрузить нажал до этого тоже абракадабра была, она теперь стала в тексте...). А мой код ни в какую...
Начало удалил, а то более 1000 символов, но serial оставил Код (C++): void setup() // процедура setup { Serial.begin(9600); //Serial.print("OPEN SD CARD"); //if (!SD.begin(chipSelect)) //{ // Serial.println("FAILED"); // return; //} } void loop() // процедура loop { unsigned long A = 200; // паузы (скорость) вращения ШД№1 unsigned long B = 200; // паузы (скорость) вращения ШД№2 unsigned long C = 200; // паузы (скорость) вращения ШД№3 unsigned long D = 200; // паузы (скорость) вращения ШД№4 int massiv [Q][Y]= { {5,12,3,3,3,3,3,3,}, {5,12,3,3,3,3,3,3,}, {5,12,3,3,3,3,3,3,}, }; //массив for (int l=Y; l= 0; l--) // Количество строк в массиве { if (!(Y%2)) { for (int l=Q; l= 0; 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); Serial.print("Двигаюсь к бункеру"); } 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); Serial.print("Опускаю клюв"); } 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); Serial.print("Поднимаю клюв"); } 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); Serial.print("Двигаюсь к установке"); } //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); Serial.print("Опускаюсь для установки"); } 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); Serial.print("Поднимаюсь после установки"); } } 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); Serial.print("Перемещаюсь на 1 пиксель по строке"); } } S=S-1; Serial.print(S); } // закрытие цикла перебора пикселей в строке при четной стоке } // закрытие модуля четного перебора else // если не четная строка { for (int l=S; 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); Serial.print("Двигаюсь к бункеру"); } 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); Serial.print("Опускаю клюв"); } 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); Serial.print("Поднимаю клюв"); } 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); Serial.print("Двигаюсь к установке"); } 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); Serial.print("Опускаюсь для установки"); } 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); Serial.print("Поднимаюсь после установки"); } } 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); Serial.print("Перемещаюсь на 1 пиксель по строке"); } } 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); Serial.print("Перемещаюсь на 1 пиксель по строке"); } 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); Serial.print("Перемещаюсь на 1 строку"); } //dataFile.close(); delay(1000000);// задержка отладки программы ТЕХНИЧЕСКАЯ }
У вас не код, а дичь, взять хотя бы вот эти места: Код (C++): for(int l=0; l= X; l++) for(int l=Y; l=0; l--) И таких мест - кучу. Вердикт - выкинуть всё, прочитать синтаксис языка и переписать по новой.
Увидел.... вот так? Код (C++): for(int l=0; l <= X; l=l+1) Будет "циклить" пока I не станет больше либо равным X, шаг (I=l+1) Код (C++): for(int l=Y; l >= 0; l=l-1) Тут будет "циклить" пока I не станет меньше либо равным нулю шаг (I=l-1)
Да Можно P.s. И еще совет: старайтесь не использовать переменные 'l', 'O', or 'I'. Очень сложно читать и можно перепутать I (Ай) и l (эл).
а он вообще думает? - не заметно.... Пишет полную хрень, советы чуть-чуть почитать учебники - игнорирует.
Начну заново, написал небольшой код, в котором фигурируют необходимые мне функции (вроде учел Ваши замечания) Но в мониторе порта... все равно абракадабра (кроме численных значений) А без монитора отладить сложно... Код (C++): const int OB11=2; // ШД №1 обмотка №1 const int OB12=3; // ШД №1 обмотка №2 void setup() // процедура setup { // Конфигурируем вывод подключения обмоток ШД как выход (OUTPUT) pinMode(OB11, OUTPUT); pinMode(OB12, OUTPUT); Serial.begin(9600); } void loop() // процедура loop { int Q=8; // Количество ячеек (пикселей) в строке массива Serial.print(Q); int S=Q; // Текущее (начальное) значение ячейки (пикселя) в массиве int R=5; // Количество циклов Перемещение ШД№1 int Z=5; // Количество циклов Перемещение ШД№2 unsigned long A = 200; // паузы (скорость) вращения ШД№1 unsigned long B = 200; // паузы (скорость) вращения ШД№2 int massiv [Q]={5,5,5,5,5,5,5,5}; //массив for (int l=S; l> 0; l--) // Количество строк в массиве { if (massiv[S]==5)// Проверка значения текущей ячейки в массиве { Serial.print(S); for (int l=0; l < R; l=l+1) // Работа ШД№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); Serial.print("Совпадение"); } } else { for (int l=0; l < Z; l=l+1) // Работа ШД№1 (назад) { digitalWrite(OB12,HIGH);// включаем обмотку1 ШД2 delay(B); digitalWrite(OB12,LOW);// вылючаем обмотку1 ШД2 delay(B); digitalWrite(OB11,HIGH);// включаем обмотку2 ШД2 delay(B); digitalWrite(OB11,LOW);// выключаем обмотку2 ШД2 delay(B); Serial.print("Нет совпадения"); } } S=S+1; } delay(5000);// задержка отладки программы ТЕХНИЧЕСКАЯ } PS Я прочитал про циклы и массивы в интернете...Вроде так же изложил...
ну давайте разбираться. Во-первых, вы проходите массив сверху вниз, от последнего элемента к первому - это так и задумано? обычно наоборот Во-вторых, если в массиве 8 элементов, то их индексы с 0 по 7. А вы пытаетесь начинать с элемента massiv[8]. и, конечно же, получаете мусор. В третьих, во всех трех циклах у вас итератор - переменная l (L маленькое). В этом сразу 2 проблемы - первая - итератор верхнего цикла затирает итератор нижнего, кроме того из массива вы читаете элемент massiv[\s]. То есть реально в циклах ничего не итерируется вообще. Советы: - выберите для каждого цикла свою букву итератора. Зачем вы используете везде одно и то же? - это источник путаницы и ошибок. - разберитесь с индексами массивов - в массиве из 8 элементов нет элемента massiv[8] - вам уже писали - не используйте в качестве переменных буквы l (L маленькое), I (i большое), o и O - похоже на ноль. Вообще, по неписанному правилу использование заглавных букв в качестве переменных не принято. привыкайте сразу писать грамотно.
Ну вроде все учел... В мониторе печатает с начало - 8, потом - 7 (все как по программе), но потом заместо "Нет совпадения" - совпаденияНет один за одним.... Код (C++): const int ob11=2; // ШД №1 обмотка №1 const int ob12=3; // ШД №1 обмотка №2 void setup() // процедура setup { // Конфигурируем вывод подключения обмоток ШД как выход (OUTPUT) pinMode(ob11, OUTPUT); pinMode(ob12, OUTPUT); Serial.begin(9600); } void loop() // процедура loop { int q=8; // Количество ячеек (пикселей) в строке массива Serial.print(q); int s=q-1; // Текущее (начальное) значение ячейки (пикселя) в массиве int r=2; // Количество циклов Перемещение ШД№1 int z=2; // Количество циклов Перемещение ШД№2 unsigned long a = 100; // паузы (скорость) вращения ШД№1 unsigned long b = 100; // паузы (скорость) вращения ШД№2 int massiv [q]={5,5,5,5,5,5,5,5}; //массив for (int aa=s; aa> 0;aa--) // Количество строк в массиве { if (massiv[s]==5)// Проверка значения текущей ячейки в массиве { Serial.print(s); for (int bb=0; bb < r; bb++) // Работа ШД№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); Serial.print("Совпадение"); } } else { for (int dd=0; dd < z; dd++) // Работа ШД№1 (назад) { digitalWrite(ob12,HIGH);// включаем обмотку1 ШД2 delay(b); digitalWrite(ob12,LOW);// вылючаем обмотку1 ШД2 delay(b); digitalWrite(ob11,HIGH);// включаем обмотку2 ШД2 delay(b); digitalWrite(ob11,LOW);// выключаем обмотку2 ШД2 delay(b); Serial.print("Нет совпадения"); } } s=s+1; } delay(1000);// задержка отладки программы ТЕХНИЧЕСКАЯ }
А это не проблема с кодировкой? Просто пишите вместо "Нет совпадения" что-нибудь типа "no matches", вместо "Совпадение" - "match found" (ну или как вам удобнее)
если вы массив хотите проходить сверху вниз, то в конце скетча переменную s надо уменьшать, а вы увеличиваете. Ну и поддерживаю совет Larscliff - временно замените все кирилличкеские сообщения в сериале на латиницу. Вывод кириллицы в монитор - отдельная проблема, разберитесь сначала с работой скетча.