Проблема с кодом
- Войдите на сайт для отправки комментариев
Чт, 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.И что бы не плодить кучу указателей и переменных, перепишите все-таки чтение из ЕЕПРОМ
//// КНОПКА 1 if(button11State == HIGH) { if (lastbutton == 0) { val1 = word(EEPROM.read(25),EEPROM.read(26)); 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) { val1 = word(EEPROM.read(25),EEPROM.read(26)); val2 = word(EEPROM.read(35),EEPROM.read(36)); 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) { val1 = word(EEPROM.read(25),EEPROM.read(26)); val3 = word(EEPROM.read(45),EEPROM.read(46)); 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) { val2 = word(EEPROM.read(35),EEPROM.read(36)); 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) { val2 = word(EEPROM.read(35),EEPROM.read(36)); val1 = word(EEPROM.read(25),EEPROM.read(26)); 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) { val2 = word(EEPROM.read(35),EEPROM.read(36)); val3 = word(EEPROM.read(45),EEPROM.read(46)); 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) { val3 = word(EEPROM.read(45),EEPROM.read(46)); 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) { val3 = word(EEPROM.read(45),EEPROM.read(46)); val1 = word(EEPROM.read(25),EEPROM.read(26)); 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) { val3 = word(EEPROM.read(45),EEPROM.read(46)); val2 = word(EEPROM.read(35),EEPROM.read(36)); 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; }Спасибо maksim. Подправил код - работает. Завтра ещё серву погоняю - проверю. A что даёт Ctrl+T ? ( учиться никогда не поздно)
Форматирует код, благодаря чему код становится более смотрибельным.