Проблема с кодом
- Войдите на сайт для отправки комментариев
Чт, 31/01/2013 - 03:27
После получения ряда ответов на вопросы (спасибо форумчанам) составил код для перевода сервы между запомненными позициями. При нажатии кнопок записываю какая кнопка была нажата. Серва переводится. Проблема в том, что корректно работают только переходы 1-2, 2-1, 1-3, 1-0. Все остальные комбинации работают с двойным переходом. Например 3-0 работает как 3-1-0, 2-3 как 2-1-3 и т.д. Надеюсь опытный глаз программиста заметит, где я ошибся. Показываю часть кода отвечающую за перевод сервы.
//// КНОПКА 1 if(button11State == HIGH) { if (lastbutton = 0) { byte xx1[] = {EEPROM.read(25), EEPROM.read(26)}; int *y1 = (int *)&xx1; val1 = y1[0]; for(pos = valPot; pos < val1; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = valPot; pos > val1; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } else if (lastbutton = 2) { byte xx1[] = {EEPROM.read(25), EEPROM.read(26)}; int *y1 = (int *)&xx1; val1 = y1[0]; byte xx2[] = {EEPROM.read(35), EEPROM.read(36)}; int *y2 = (int *)&xx2; val2 = y2[0]; for(pos = val2; pos < val1; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val2; pos > val1; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } else if (lastbutton = 3) { byte xx1[] = {EEPROM.read(25), EEPROM.read(26)}; int *y1 = (int *)&xx1; val1 = y1[0]; byte xx3[] = {EEPROM.read(45), EEPROM.read(46)}; int *y3 = (int *)&xx3; val3 = y3[0]; for(pos = val3; pos < val1; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val3; pos > val1; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } lastbutton = 1; } ////КНОПКА 2 if(button22State == HIGH) { if (lastbutton = 0) { byte xx2[] = {EEPROM.read(35), EEPROM.read(36)}; int *y2 = (int *)&xx2; val2 = y2[0]; for(pos = valPot; pos < val2; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = valPot; pos > val2; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } else if (lastbutton = 1) { byte xx2[] = {EEPROM.read(35), EEPROM.read(36)}; int *y2 = (int *)&xx2; val2 = y2[0]; byte xx1[] = {EEPROM.read(25), EEPROM.read(26)}; int *y1 = (int *)&xx1; val1 = y1[0]; for(pos = val1; pos < val2; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val1; pos > val2; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } else if (lastbutton = 3) { byte xx2[] = {EEPROM.read(35), EEPROM.read(36)}; int *y2 = (int *)&xx2; val2 = y2[0]; byte xx3[] = {EEPROM.read(45), EEPROM.read(46)}; int *y3 = (int *)&xx3; val3 = y3[0]; for(pos = val3; pos < val2; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val3; pos > val2; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } lastbutton = 2; } //////КНОПКА 3 if(button33State == HIGH) { if (lastbutton = 0) { byte xx3[] = {EEPROM.read(45), EEPROM.read(46)}; int *y3 = (int *)&xx3; val3 = y3[0]; for(pos = valPot; pos < val3; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = valPot; pos > val3; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } else if (lastbutton = 1) { byte xx3[] = {EEPROM.read(45), EEPROM.read(46)}; int *y3 = (int *)&xx3; val3 = y3[0]; byte xx1[] = {EEPROM.read(25), EEPROM.read(26)}; int *y1 = (int *)&xx1; val1 = y1[0]; for(pos = val1; pos < val3; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val1; pos > val3; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } else if (lastbutton = 2) { byte xx3[] = {EEPROM.read(45), EEPROM.read(46)}; int *y3 = (int *)&xx3; val3 = y3[0]; byte xx2[] = {EEPROM.read(35), EEPROM.read(36)}; int *y2 = (int *)&xx2; val2 = y2[0]; for(pos = val2; pos < val3; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val2; pos > val3; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } lastbutton = 3; } ///// КНОПКА 4 if(button4State == HIGH ) { if (lastbutton = 1) { for(pos = val1; pos < valPot; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val1; pos > valPot; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } else if (lastbutton = 2) { for(pos = val2; pos < valPot; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val2; pos > valPot; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } else if (lastbutton = 3) { for(pos = val3; pos < valPot; pos += 1) { myservo.writeMicroseconds(pos); delay(5); } for(pos = val3; pos > valPot; pos -= 1) { myservo.writeMicroseconds(pos); delay(5); } } lastbutton = 0; }
Первое что "бросилось в глаза" это то что вы путает операции присваиания = и сравнения == , то есть, например, вместо того чтобы сравнить
if
(lastbutton == 2)
вы присваиваетеif
(lastbutton = 2)
переменной lastbutton значение 2. И нажимайте почащее Ctrl+T.И что бы не плодить кучу указателей и переменных, перепишите все-таки чтение из ЕЕПРОМ
Спасибо maksim. Подправил код - работает. Завтра ещё серву погоняю - проверю. A что даёт Ctrl+T ? ( учиться никогда не поздно)
Форматирует код, благодаря чему код становится более смотрибельным.