Вопрос чисто по программированию! Компилятор ведет себя странно! БЕЗ 100 граммов не разобраться
- Войдите на сайт для отправки комментариев
Пнд, 20/02/2017 - 22:43
Подключаю шаговик к ардуино:

Все работает, мотор крутится - все логично!
Меняю на 39 строчке знак на "минус" - мотор крутится в обратную сторону - все логично!
Изменю код, подключаю второй мотор - оба крутятся - все логично!
int pins2[] = {4, 5, 6, 7}; //Задаем пины по порядку
int pins[] = {8, 9, 10, 11}; //Задаем пины по порядку

Тут начинается самое интересное, меняю s=-1; все остальное не трогаю - первый мотор крутится обратно, второй нормально, меняю s=1, а s2=-1 первый крутится, второй стоит, ставлю в оба минус -1 - не один не крутиться.

Причем в случае s=1, s2=-1 (первый крутится, второй стоит) меняю эти две строчки местами, т.е.
int s2=-1;
int s=1;
второй мотор крутится в обратку!!!!!! и первый крутится.
второй мотор крутится в обратку!!!!!! и первый крутится.
Помоги понять в чем прикол? Как так, из-за того что объявление переменных помено местами - программа ведет себя по разному!
Немного код переделал, уже не понимая из-за чего такая фигня происходит, написал вместо += полную версию оператора, step_ поменл на переменную s.
вы бы вставили коды по правилам форума (вверху в редакторе значек соответствующий)
// Контакты Bl Pi Ye Or int pins[] = {8, 9, 10, 11}; //Задаем пины по порядку int phases = 8; // для шагового режима установить 4 // Для шагового режима //bool motorPhases[4][4] = { // [phase][pin] //// -------- pins ---------- //// Winding A B A B //// Motor Pin 1 2 3 4 //// Color Bl Pi Ye Or // { 1, 1, 0, 0}, // { 0, 1, 1, 0}, // { 0, 0, 1, 1}, // { 1, 0, 0, 1} //}; // Для полушагового режима bool motorPhases[8][4] = { // [phase][pin] // -------- pins ---------- // Winding A B A B // Motor Pin 1 2 3 4 // Color Bl Pi Ye Or { 1, 1, 0, 0}, { 0, 1, 0, 0}, { 0, 1, 1, 0}, { 0, 0, 1, 0}, { 0, 0, 1, 1}, { 0, 0, 0, 1}, { 1, 0, 0, 1}, { 1, 0, 0, 0} }; void setup() { for (int i = 0; i < 4; i++) pinMode(pins[i], OUTPUT); } int phase = 0; int _step = 1; // Если у шага поменять знак, на -1 - изменится направление вращения. void loop() { phase += _step; if (phase > 7) phase = 0; if (phase < 0) phase = 7; for (int i = 0; i < 4; i++) { digitalWrite(pins[i], ((motorPhases[phase][i] == 1) ? HIGH : LOW)); } // Пауза на вращение на один шаг/полушаг delay(2); // Для шагового режима установить в 3 }БЕЗ 100 граммов не разобраться
А проблема-то в чём? Вы несовершеннолентий? Или магазин уже закрылся?
// Контакты Bl Pi Ye Or int pins2[] = {4, 5, 6, 7}; //Задаем пины по порядку int pins[] = {8, 9, 10, 11}; //Задаем пины по порядку int phases = 8; // для шагового режима установить 4 // Для полушагового режима bool motorPhases[8][4] = { // [phase][pin] // -------- pins ---------- // Winding A B A B // Motor Pin 1 2 3 4 // Color Bl Pi Ye Or { 1, 1, 0, 0}, { 0, 1, 0, 0}, { 0, 1, 1, 0}, { 0, 0, 1, 0}, { 0, 0, 1, 1}, { 0, 0, 0, 1}, { 1, 0, 0, 1}, { 1, 0, 0, 0} }; void setup() { for (int i = 0; i < 4; i++) { pinMode(pins[i], OUTPUT); pinMode(pins2[i], OUTPUT); } } int phase = 0; int phase2 = 0; int s = 1; // Если у шага поменять знак, на -1 - изменится направление вращения. int s2 = 1; // Если у шага поменять знак, на -1 - изменится направление вращения. void loop() { phase += s; if (phase > 7) phase = 0; if (phase < 0) phase = 7; phase2 += s2; if (phase2 > 7) phase2 = 0; if (phase2 < 0) phase2 = 7; for (int i = 0; i < 4; i++) { digitalWrite(pins[i], ((motorPhases[phase][i] == 1) ? HIGH : LOW)); digitalWrite(pins2[i], ((motorPhases[phase2][i] == 1) ? HIGH : LOW)); } // Пауза на вращение на один шаг/полушаг delay(2); // Для шагового режима установить в 3 }Тут начинается самое интересное, меняю s=-1; все остальное не трогаю - первый мотор крутится обратно, второй нормально, меняю s=1, а s2=-1 первый крутится, второй стоит, ставлю в оба -1 - не один не крутится.
второй мотор крутится в обратку!!!!!! и первый крутится.
Помоги понять в чем прикол? Как так, из-за того что объявление переменных поменяно местами - программа ведет себя по разному!
Если изменить код в коде += на -= тоже все работает.
int phase = 0; int phase2 = 0; int s = 1; // Если у шага поменять знак, на -1 - изменится направление вращения. int s2 = 1; // Если у шага поменять знак, на -1 - изменится направление вращения. void loop() { phase -= s; if (phase > 7) phase = 0; if (phase < 0) phase = 7; phase2 -= s2; if (phase2 > 7) phase2 = 0; if (phase2 < 0) phase2 = 7;Совершеннолетний, магазин закрылся))) Но вопрос не в 100 граммах, а то, что это не лезет в обычную логику программирования.
исправился - код по правилам в комментах)
Это ардуино, и воможно int беззнаковое и никто не знает что такое <0, поставь четко signed int
Это ардуино, и воможно int беззнаковое и никто не знает что такое <0, поставь четко signed int
не помогло
Это ардуино, и воможно int беззнаковое и никто не знает что такое <0, поставь четко signed int
Без второго мотора ведь работает, и со вторым мотором, когда первый -1, второй 1 - тоже работает, стоит 1 и -1 поставить или оба -1 - уже не работает, достаточно поменять строки объвления переменных - уже не работает.
Принял 100гр, всеравно не понял, добавил контрольных еще аналогичное кол-во. Ясности не добавилось. Вывод - 100гр не помогают, надо разбиратся.
100гр не помогают
Это уже серьёзно!
Это ардуино, и воможно int беззнаковое и никто не знает что такое <0, поставь четко signed int
не помогло
...и я пошёл попил поел - не полегчало... )))
Странные вы какие-то...
Я вот пообедал - и вполне доволен собой.
Чего и вам желаю.
Прочитал все посты темы и не понял при чём здесь компилятор? В чем его странность? Компилирует, ошибок не выдает. 100 грамм не просит. Просто чисто интересно, а если присвоение начального значения из объявления вынести в setup что будет?
Я склоняюсь, что на этом форуме собрались одни любители бахуса!?
на этом форуме собрались одни любители бахуса!?
Почему одни любители? Есть и профессионалы, жрецы можно сказать.
на этом форуме собрались одни любители бахуса!?
Почему одни любители? Есть и профессионалы, жрецы можно сказать.
Откройте секрет, кто это ???
wdrakula, конечно! Почитайте какой любовью проникнуты его посты про самогон!
на этом форуме собрались одни любители бахуса!?
Почему одни любители? Есть и профессионалы, жрецы можно сказать.
Откройте секрет, кто это ???
Так и тема ж есть соответствующая ;) http://arduino.ru/forum/otvlechennye-temy/v-pomoshch-samogonshchiku