как сократить код

Тема в разделе "Arduino & Shields", создана пользователем qwenya77, 17 ноя 2013.

  1. qwenya77

    qwenya77 Нерд

    Всем доброго дня!
    пример:
    Программа для шд, что бы шд сделал полный оборот мне нужно написать в Loop 50 блоков по 4 строки как это можно сократить без применения библиотек?
     
  2. r0c

    r0c Гик

    Код (Text):
    for (i = 0; i < 50; i++)
    {
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3,HIGH );
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
    digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3,HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    }
     
  3. Unixon

    Unixon Оракул Модератор

    Код (Text):

    const uint8_t MOTORS_COUNT = 4;
    const uint8_t MOTOR_PINS[MOTORS_COUNT] = {4,5,6,7};
    const uint16_t MOTOR_MODES = (B11000011 << 8) | B01000010;

    const int8_t DELAY_TIME = 6;
    const int8_t REPEAT_COUNT = 50;

    int8_t loop_count = REPEAT_COUNT;

    void setup()
    {
     for (uint8_t i = 0; i < MOTORS_COUNT; i++) pinMode(MOTOR_PINS[i], OUTPUT);
    }

    void loop()
    {
     if (!loop_count) return;
     uint16_t m = MOTOR_MODES;
     for (uint8_t j = 0; j < 4; j++)
     {
      for (uint8_t i = 0; i < 4; i++)
      {
      digitalWrite(MOTOR_PINS[i], m & 1);
      m >>= 1;
      }
      delay(DELAY_TIME);
     }
     loop_count--;
    }
     
     
  4. qwenya77

    qwenya77 Нерд

    Уважаемый Unixon, дайте пожалуйста комментарий к Вашему коду хотя бы краткий (не хочется тупо копировать, хочется хоть не много понимать происходящее) за ранее спасибо.
     
  5. Unixon

    Unixon Оракул Модератор

    Так все то же самое, что и в коде выше, только записано другими языковыми средствами.
    Вы лучше спросите, что именно из этого непонятно.
    Полагаю, что из всего кода где-то строчки три-четыре могут вызвать вопрос. :)
     
  6. qwenya77

    qwenya77 Нерд

    Если честно то все строчки вызывают вопрос.
    Можно построчно прокомментировать что какая функция делает.
     
  7. Unixon

    Unixon Оракул Модератор

    Значит C/C++ вы совершенно не знаете. Так получается? Совершенствуйтесь, пригодится.
    Код откомментирую позже.
     
  8. qwenya77

    qwenya77 Нерд

    По поводу моих знаний все верно, а за комментарий заранее благодарен.
     
  9. r0c

    r0c Гик

    qwenya77, я же Вам написал на синтаксисе Arduino.
     
  10. qwenya77

    qwenya77 Нерд

    Уважаемый rOc дайте пожалуйста комментарии к Вашему коду
     
  11. Megakoteyka

    Megakoteyka Оракул Модератор

    qwenya77, почитайте про циклы: http://code-live.ru/post/cpp-loops/.
    И займитесь изучением языка, иначе далеко не уйдете.
     
  12. qwenya77

    qwenya77 Нерд

    спасибо
     
  13. qwenya77

    qwenya77 Нерд

    и все же я настаиваю на комментарии )))
     
  14. NR55RU

    NR55RU Гик

    Гораздо правильнее взять в руки самоучитель по С или С++ и подтянуть знания языка чем просить комментарии в элементарном коде из 10 строк, в коде что привел вам Unixon все элементарно, непонятки могут вызывать только побитовые операции.
    Поверьте, если вы и дальше планируете что-то делать с Arduino книги по С или С++ вам не избежать, так начните лучше прямо сейчас и если не будите ленится, обещаю через неделю чтения подобного самоучителя вы сами разберетесь в предоставленном коде. :)
     
  15. qwenya77

    qwenya77 Нерд

    Спасибо, буду грызть гранит с и с ++.
     
  16. r0c

    r0c Гик

    Грызть гранит на пустом месте неинтересно.
    сначала нужно попрактиковаться на ковырянии чужих программ. Потом, когда приступите к книгам,там вы уже встретите знакомые слова из этих самых программ и поймете, почему именно так было написано. Проще говоря- увидите знакомые буквы)).
    А комментарий самый простой- это функция одного оборота шагового двигателя. Ну, по крайней мере, вы так ее описали в первом посте. Но в первой строке есть условие- функция будет выполнятся лишь 50 раз, то есть при каждом выполнении функции переменная i будет увеличиваться на единицу. и так до тех пор, пока i не станет равно 50.