Всем доброго дня! пример: Программа для шд, что бы шд сделал полный оборот мне нужно написать в Loop 50 блоков по 4 строки как это можно сократить без применения библиотек?
Код (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); }
Код (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--; }
Уважаемый Unixon, дайте пожалуйста комментарий к Вашему коду хотя бы краткий (не хочется тупо копировать, хочется хоть не много понимать происходящее) за ранее спасибо.
Так все то же самое, что и в коде выше, только записано другими языковыми средствами. Вы лучше спросите, что именно из этого непонятно. Полагаю, что из всего кода где-то строчки три-четыре могут вызвать вопрос.
Если честно то все строчки вызывают вопрос. Можно построчно прокомментировать что какая функция делает.
Значит C/C++ вы совершенно не знаете. Так получается? Совершенствуйтесь, пригодится. Код откомментирую позже.
qwenya77, почитайте про циклы: http://code-live.ru/post/cpp-loops/. И займитесь изучением языка, иначе далеко не уйдете.
Гораздо правильнее взять в руки самоучитель по С или С++ и подтянуть знания языка чем просить комментарии в элементарном коде из 10 строк, в коде что привел вам Unixon все элементарно, непонятки могут вызывать только побитовые операции. Поверьте, если вы и дальше планируете что-то делать с Arduino книги по С или С++ вам не избежать, так начните лучше прямо сейчас и если не будите ленится, обещаю через неделю чтения подобного самоучителя вы сами разберетесь в предоставленном коде.
Грызть гранит на пустом месте неинтересно. сначала нужно попрактиковаться на ковырянии чужих программ. Потом, когда приступите к книгам,там вы уже встретите знакомые слова из этих самых программ и поймете, почему именно так было написано. Проще говоря- увидите знакомые буквы)). А комментарий самый простой- это функция одного оборота шагового двигателя. Ну, по крайней мере, вы так ее описали в первом посте. Но в первой строке есть условие- функция будет выполнятся лишь 50 раз, то есть при каждом выполнении функции переменная i будет увеличиваться на единицу. и так до тех пор, пока i не станет равно 50.