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

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

  1. Artclonic

    Artclonic Гик

    Почему может быть абра-кадабра в мониторе порта (скорости совпадают - 9600) и вроде числа отражаются нормально. И еще в одну строчку отображается последовательно, а не строчками
     
  2. DIYMan

    DIYMan Guest

    Много причин. Одна из них - отсутствие общей земли между дунькой и модулем, с которым она общается по UART.
     
  3. Artclonic

    Artclonic Гик

    взял пример
    Код (C++):
    void loop()
    {
      // Отправляем «Hellow World!».
      Serial.print("Hellow World!");
      // Отправляем «Hellow World!» включая спецсимволы, означающие переход на новую строку.
      Serial.println("Hellow World!");
      // Спим одну секунду.
      delay(1000);
    }
    Его нормально отрабатывает (но я сначала исправить кодировку и перезагрузить нажал до этого тоже абракадабра была, она теперь стала в тексте...).
    А мой код ни в какую...
     
  4. DIYMan

    DIYMan Guest

    Какой код? Тут телепатов нет.
     
  5. Artclonic

    Artclonic Гик

    Начало удалил, а то более 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);// задержка отладки программы ТЕХНИЧЕСКАЯ
    }
     
  6. DIYMan

    DIYMan Guest

    У вас не код, а дичь, взять хотя бы вот эти места:
    Код (C++):
    for(int l=0; l= X; l++)
    for(int l=Y; l=0; l--)
    И таких мест - кучу. Вердикт - выкинуть всё, прочитать синтаксис языка и переписать по новой.
     
  7. Artclonic

    Artclonic Гик

    Завтра проверю (Циклы) вроде все по учебнику...
     
  8. DIYMan

    DIYMan Guest

    Конечно, нет.
     
  9. Artclonic

    Artclonic Гик

    Увидел....
    вот так?
    Код (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)
     
    Последнее редактирование: 11 янв 2018
  10. DetSimen

    DetSimen Guest

    for(int l=0; l < X; l++)
     
  11. Artclonic

    Artclonic Гик

    А как если на шаг в минус? (l--)?

    И еще? А так нельзя for(int l=0; l <= X; l++)
     
  12. Larscliff

    Larscliff Нерд

    Да
    Можно :)
    P.s. И еще совет: старайтесь не использовать переменные 'l', 'O', or 'I'. Очень сложно читать и можно перепутать I (Ай) и l (эл).
     
  13. DetSimen

    DetSimen Guest

    А так число шагов будет на 1 больше, чем ты думаешь.
     
    b707 нравится это.
  14. b707

    b707 Гуру

    а он вообще думает? - не заметно....
    Пишет полную хрень, советы чуть-чуть почитать учебники - игнорирует.
     
  15. Artclonic

    Artclonic Гик

    Начну заново, написал небольшой код, в котором фигурируют необходимые мне функции (вроде учел Ваши замечания) Но в мониторе порта... все равно абракадабра (кроме численных значений) А без монитора отладить сложно...
    Код (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 Я прочитал про циклы и массивы в интернете...Вроде так же изложил...
     
    Последнее редактирование: 11 янв 2018
  16. b707

    b707 Гуру

    ну давайте разбираться.

    Во-первых, вы проходите массив сверху вниз, от последнего элемента к первому - это так и задумано? обычно наоборот
    Во-вторых, если в массиве 8 элементов, то их индексы с 0 по 7. А вы пытаетесь начинать с элемента massiv[8]. и, конечно же, получаете мусор.
    В третьих, во всех трех циклах у вас итератор - переменная l (L маленькое). В этом сразу 2 проблемы - первая - итератор верхнего цикла затирает итератор нижнего, кроме того из массива вы читаете элемент massiv[\s]. То есть реально в циклах ничего не итерируется вообще.

    Советы:
    - выберите для каждого цикла свою букву итератора. Зачем вы используете везде одно и то же? - это источник путаницы и ошибок.

    - разберитесь с индексами массивов - в массиве из 8 элементов нет элемента massiv[8]

    - вам уже писали - не используйте в качестве переменных буквы l (L маленькое), I (i большое), o и O - похоже на ноль. Вообще, по неписанному правилу использование заглавных букв в качестве переменных не принято. привыкайте сразу писать грамотно.
     
  17. Artclonic

    Artclonic Гик

    Да так задумано!

    Все понятно, ясно щаз буду править! Спасибо !Спасибо !Спасибо !
     
  18. Artclonic

    Artclonic Гик

    Ну вроде все учел... В мониторе печатает с начало - 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);// задержка отладки программы ТЕХНИЧЕСКАЯ
    }

     
     
  19. Larscliff

    Larscliff Нерд

    А это не проблема с кодировкой? Просто пишите вместо "Нет совпадения" что-нибудь типа "no matches", вместо "Совпадение" - "match found" (ну или как вам удобнее)
     
  20. b707

    b707 Гуру

    если вы массив хотите проходить сверху вниз, то в конце скетча переменную s надо уменьшать, а вы увеличиваете.
    Ну и поддерживаю совет Larscliff - временно замените все кирилличкеские сообщения в сериале на латиницу. Вывод кириллицы в монитор - отдельная проблема, разберитесь сначала с работой скетча.