Проблема с кодом

vvadim
Offline
Зарегистрирован: 23.05.2012

После получения ряда ответов на вопросы (спасибо форумчанам) составил код для перевода сервы между запомненными позициями. При нажатии кнопок записываю какая кнопка была нажата. Серва переводится. Проблема в том, что корректно работают только переходы 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; 
  } 

 

maksim
Offline
Зарегистрирован: 12.02.2012

Первое что "бросилось в глаза" это то что вы путает операции присваиания = и сравнения == , то есть, например, вместо того чтобы сравнить 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; 
} 

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Спасибо maksim. Подправил код - работает. Завтра ещё серву погоняю - проверю. A что даёт Ctrl+T ?  ( учиться никогда не поздно)

maksim
Offline
Зарегистрирован: 12.02.2012

Форматирует код, благодаря чему код становится более смотрибельным.