Запоминание позиий серво

vvadim
Offline
Зарегистрирован: 23.05.2012
 
 #include  <Servo.h>
 #include <EEPROM.h> 
 Servo myservo1;
 Servo myservo2;
 
 const int buttonPin = 0;                              
 const int led1Pin =  2;                            
 const int led2Pin =  3;
 const int led3Pin =  4;
 const int led4Pin =  5;
 const int led5Pin =  6;
 const int led6Pin =  7;
 
 const int BUTTON1 = 1;
 const int BUTTON2 = 2;
 const int BUTTON3 = 3;
 const int BUTTON4 = 4;
 const int BUTTON5 = 5;
 const int BUTTON6 = 6;
 const int BUTTON7 = 7;
 const int BUTTON8 = 8;
 const int BUTTON9 = 9;
 const int BUTTON10 = 10;
 
 const int BUTTON1LOW = 1005;
 const int BUTTON1HIGH = 1024;
 const int BUTTON2LOW = 960;
 const int BUTTON2HIGH = 990;
 const int BUTTON3LOW = 925;
 const int BUTTON3HIGH = 945;
 const int BUTTON4LOW = 880;
 const int BUTTON4HIGH = 900;
 const int BUTTON5LOW = 830;
 const int BUTTON5HIGH = 870;
 const int BUTTON6LOW = 760;
 const int BUTTON6HIGH = 800;
 const int BUTTON7LOW = 690;
 const int BUTTON7HIGH = 730;
 const int BUTTON8LOW = 570;
 const int BUTTON8HIGH = 650;
 const int BUTTON9LOW = 480;
 const int BUTTON9HIGH = 540;
 const int BUTTON10LOW = 250;
 const int BUTTON10HIGH = 350; 
 
 int ledState = HIGH;                                   
 int buttonState;                                   
 int lastButtonState = LOW;                                              
 long lastDebounceTime = 0;                             
 long debounceDelay = 50;

 int inputMode1 = 1;
 int inputMode2 = 1;

 int pot1pin = 1;
 int pot2pin = 2;
 int val1;
 int val2;
 int addr = 0;
 byte value;
 int pos = 0; 

 void setup() {
   pinMode(buttonPin, INPUT);
   
   pinMode(led1Pin, OUTPUT);
   pinMode(led2Pin, OUTPUT);
   pinMode(led3Pin, OUTPUT);
   pinMode(led4Pin, OUTPUT);
   pinMode(led5Pin, OUTPUT);
   pinMode(led6Pin, OUTPUT);
   
   myservo1.attach(9);
   myservo2.attach(10);
   
   Serial.begin(9600);
 }

  void loop() {
   
    
  if(inputMode1) {
  val1 = analogRead(pot1pin);           
  val1 = map(val1, 0, 1023, 0, 179);   
  myservo1.write(val1);                 
  delay(15);
  
   if(inputMode2) {
  val2 = analogRead(pot2pin);           
  val2 = map(val2, 0, 1023, 0, 179);   
  myservo2.write(val2);                 
  delay(15);
  
  Serial.println(val1);
  Serial.println(val2);
                                                       
   int reading = analogRead(buttonPin);
   Serial.println(reading);
   
   int tmpButtonState = LOW;
   
   if(reading>BUTTON10LOW && reading<BUTTON10HIGH){     
     tmpButtonState = BUTTON10;
     
   }else if(reading>BUTTON9LOW && reading<BUTTON9HIGH){     
     tmpButtonState = BUTTON9;
   
   }else if(reading>BUTTON8LOW && reading<BUTTON8HIGH){    
     tmpButtonState = BUTTON8;
     
   }else if(reading>BUTTON7LOW && reading<BUTTON7HIGH){     
     tmpButtonState = BUTTON7;
     
   }else if(reading>BUTTON6LOW && reading<BUTTON6HIGH){     
     tmpButtonState = BUTTON6;
   }else if(reading>BUTTON5LOW && reading<BUTTON5HIGH){     
     tmpButtonState = BUTTON5;
     
   }else if(reading>BUTTON4LOW && reading<BUTTON4HIGH){     
     tmpButtonState = BUTTON4;
     
   }else if(reading>BUTTON3LOW && reading<BUTTON3HIGH){     
     tmpButtonState = BUTTON3;
     
   }else if(reading>BUTTON2LOW && reading<BUTTON2HIGH){     
     tmpButtonState = BUTTON2;
     
   }else if(reading>BUTTON1LOW && reading<BUTTON1HIGH){     
     tmpButtonState = BUTTON1;
   }else{
     
     tmpButtonState = LOW;
   }

   
   if (tmpButtonState != lastButtonState) {
                                                                       
     lastDebounceTime = millis();
   } 

   if ((millis() - lastDebounceTime) > debounceDelay) {                                                                      
                                                                      
     buttonState = tmpButtonState;
     
     Serial.println(buttonState);
   }

   
   lastButtonState = tmpButtonState;   
  
   switch(buttonState){
     case BUTTON1:
     EEPROM.write(addr, 0);
     EEPROM.write(25, 0);     
     break;
     
     case BUTTON2:  
     EEPROM.write(addr, val1);
     EEPROM.write(25, 1); 
     delay(100);
     break;     
     
     case BUTTON3:
     inputMode1=0;     
     EEPROM.read(25) == 1;
     value = EEPROM.read(addr);
     delay(100);
     for(pos = val1; pos < value; pos += 1)                          
  {                                                                   
     myservo1.write(pos);                                              
     delay(30);                                                         
  } 
     for(pos = val1; pos > value; pos-=1)                             
  {                                
     myservo1.write(pos);                                              
     delay(30);       
     break;     
     
     case BUTTON4:
     inputMode1=1;   
     for(pos = value; pos < val1; pos += 1) 
  {                                  
     myservo1.write(pos);              
     delay(90);                       
  } 
     for(pos = value; pos > val1; pos-=1)    
  {                                
     myservo1.write(pos);             
     delay(90);     
     break;  
     
     case BUTTON5:    
     EEPROM.write(addr, 0);
     EEPROM.write(55, 0);
     break;
     
     case BUTTON6:
     EEPROM.write(addr, val2);
     EEPROM.write(55, 1); 
     delay(100);
     break;
     
     case BUTTON7:   
     inputMode2=0;   
     EEPROM.read(55) == 1;
     value = EEPROM.read(addr);
     delay(100);
     for(pos = val2; pos < value; pos += 1)                          
  {                                                       
     myservo2.write(pos);                                             
     delay(30);                                                       
  } 
     for(pos = val2; pos > value; pos-=1)                             
  {                                
     myservo2.write(pos);                                              
     delay(30);  
     break;
     
     case BUTTON8:
     inputMode2=1;   
     for(pos = value; pos < val2; pos += 1) 
  {                                  
     myservo2.write(pos);              
     delay(90);                       
  } 
     for(pos = value; pos > val2; pos-=1)    
  {                                
     myservo2.write(pos);             
     delay(90);
     break;
     
    
   }

 }
 }
 }
 }
 }
 }
 }



 

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

А что именно не так? 

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

 Нажимаю кнопку 3 или 7 и всё зависает и другие кнопки не работают. В serial тоже всё останавливается

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

 В скетче с кнопками на цифровых пинах этого не было

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

Что вы пытаетесь сделать вот в этих строках?

EEPROM.read(25) == 1;
EEPROM.read(55) == 1;

 

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

И как так получилось, что скобка тела цикла открылась и не закрылась?

    for(pos = val1; pos > value; pos-=1)                             
 {                                
    myservo1.write(pos);                                              
    delay(30);       
    break;    

 

 

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

 

Кнопкой 2 записываю положение серво1 в 25 ячейку памяти, кнопкой 6 положение серво2 в 55 ячейку. 

Считываю данные из 25 ячейки и аналогично из 55

EEPROM.read(25) == 1;
value = EEPROM.read(addr);
delay(100);
  



 

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

maksim пишет:

И как так получилось, что скобка тела цикла открылась и не закрылась?

    for(pos = val1; pos > value; pos-=1)                             
 {                                
    myservo1.write(pos);                                              
    delay(30);       
    break;    

 

 

В конце скетча все скобки. 

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

Считаваете из ячеек и что дальше ??? сравниваете с 1 , а для чего? 

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

vvadim пишет:

maksim пишет:

И как так получилось, что скобка тела цикла открылась и не закрылась?

    for(pos = val1; pos > value; pos-=1)                             
 {                                
    myservo1.write(pos);                                              
    delay(30);       
    break;    

 

 

В конце скетча все скобки. 

 

Это какэто??????????? Выпонимаете что у вас в этом случае происходит?????

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

Именно по этому у вас все виснет... 

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

1. Закрываете все циклы по нормальному.

2. с 3 и 7 делаете так:

case BUTTON3:
  inputMode1=0;     
  if(EEPROM.read(25) == 1)
  {
    value = EEPROM.read(addr);
    delay(100);
    for(pos = val1; pos < value; pos += 1)                          
    {                                                                   
      myservo1.write(pos);                                              
      delay(30);                                                         
    } 
    for(pos = val1; pos > value; pos-=1)                             
    {                                
      myservo1.write(pos);                                              
      delay(30); 
    }  
  }    
  break;      

 

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

Все скобки проверил - куча ошибок. Поставил правильно (цыклы закрыл). Но глюк остался. Нажимаю кнопку 3 или 7 и всё виснет 

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

Пока писал сообщение не увидел ваш последний пост. Сейчас переделаю. 

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

 Цыклы скобками закрыл, кнопки 3 и 7 сделал через оператор if- при нажатии 3 и 7 виснет и другие кнопки не работают

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

А серва двигается? 

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

 Выход из состояния , определяемого кнопкой 3, должен произходить при нажатии кнопки 4. Может там у меня ошибка ?

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

 Попробовал и такой вариант - без изменений.

 
     case BUTTON4   
     if(inputMode1=1)
  {   
     for(pos = value; pos < val1; pos += 1) 
  {                                  
     myservo1.write(pos);              
     delay(90);                       
  } 
     for(pos = value; pos > val1; pos-=1)    
  {                                
     myservo1.write(pos);             
     delay(90);
  }
  }
     break;

 

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

Да, серва работает и возвращается в запомненную позицию. Но после этого тишина - в обратное положение при нажатии кнопки 4 не идёт. 

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

 Нашёл ещё ошибку- в строках 87 и 93 не поставил скобки. Теперь работает. maksim СПАСИБО за помощь!

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

Рано обрадовался. Серва при нажатии кнопки 3 (7) переходит в сохранённую позицию, сразу возвращается обратно и опять идёт в сохранённую позицию. При нажатии кнопки 4 (8) тоже двойное движение. С таким поведением сервы ещё не сталкивался.  

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

Еще поподтобнее 

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

Нажимаю кнопку 3 - серва переходит в сохранённое положение - сразу возвращается обратно - опять идёт в сохранённое положение. Нажимаю кнопку 4 - та же картина, только наоборот. Прикольные двойные движения туды-сюды. Только вот откуда они взялись? 

Vlad 47
Offline
Зарегистрирован: 26.02.2018

 

vvadim Спасибо за тему

В   мои 70 надоело крутить рукоятки моих самоделок ручами.

Из материалов этого форума понял – моя идея где-то на 80% совместима с Вашей!

Решил, из матеериалов  тут опубликованных понять как и что мне делать. Но…

Ни один скетч не смог загрузить. Ошибку выдает уже с первых строк чтения любого, из тутошних, скетча!

 

 То я делаю ни так???

Спасибо !

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Vlad 47 пишет:

Ни один скетч не смог загрузить. Ошибку выдает уже с первых строк чтения любого, из тутошних, скетча!

 То я делаю ни так???

А Вы прямо из сообщения тексты скетчей к себе копируете, или нажимете на всплывающей панельке кнопочку "код" и уже оттуда? Оттуда надо! Если скетчи копируете правильно, то скопируйте сюда текст сообщения об ошибке.

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

Vlad 47 пишет:

 

vvadim Спасибо за тему

В   мои 70 надоело крутить рукоятки моих самоделок ручами.

Из материалов этого форума понял – моя идея где-то на 80% совместима с Вашей!

Решил, из матеериалов  тут опубликованных понять как и что мне делать. Но…

Ни один скетч не смог загрузить. Ошибку выдает уже с первых строк чтения любого, из тутошних, скетча!

 

 То я делаю ни так???

Спасибо !

 

 

больше было бы для вас пользы создать тему и в ней поделиться своими бедами))))

эта уже древняя и в неё мало кто заглянет.

Vlad 47
Offline
Зарегистрирован: 26.02.2018

Спасибо!
не знаю стоит ли мне дергаться.

Кажется, времени затрачу столько же сколько на самостоятельный разбор:)

 

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

ну,  дело ваше...

Vlad 47
Offline
Зарегистрирован: 26.02.2018

Ура!

Получилось загрузить Ваш скетч из поста #51

 

Моя ошибка была в ардуинке установленой не корректно. Переустановил "по науке" и ... наступила ура!

Теперь буду выгребать  (из скетча по смыслу) какие деталюшки и куда подключены!

...с этим все понятно - разобрался.

Буду признателен есили откликнитесь на vladtimof в моем скайпе.

С уважением- ra9un (Владимир, г.Кемерово)

СПАСИБО за ЭТОТ форум!

 

Vlad 47
Offline
Зарегистрирован: 26.02.2018

В неудачных попытках пробовал всяко - без толку было.

Просто моя ардуинка стояла без дравера (недавно комп обновлял, не про все сразу вспомнил:)

Теперь влетают.

Но лучше без нумерации строк копировать.

Я это делаю из копии файла по кнопке "цитировать" Там их не видно:)

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

Vlad 47 пишет:

Ура!

Получилось загрузить Ваш скетч из поста #51

 

Моя ошибка была в ардуинке установленой не корректно. Переустановил "по науке" и ... наступила ура!

Теперь буду выгребать  (из скетча по смыслу) какие деталюшки и куда подключены!

...с этим все понятно - разобрался.

Буду признателен есили откликнитесь на vladtimof в моем скайпе.

С уважением- ra9un (Владимир, г.Кемерово)

СПАСИБО за ЭТОТ форум!

 

 

напишите мне о своих задачах

7808543@gmail.com

скайпом не пользуюсь

bwn
Offline
Зарегистрирован: 25.08.2014

Vlad 47 пишет:

Я это делаю из копии файла по кнопке "цитировать" Там их не видно:)

Жестко вы с ними однако. Наводите курсор справа от первой строки кода, в всплывающем окне значок "code", дальше по накатанной: Ctrl-A, Ctrl-C, Ctrl-V. ))))

Vlad 47
Offline
Зарегистрирован: 26.02.2018

век живи - век учись:)

Спасибо аднака!

А можно ли (и как) сюда помещать свои картинки?

Vlad 47
Offline
Зарегистрирован: 26.02.2018

Спасибо огромное! Отправил подробности хотелки в личку.

Для пользователей форума - в принципе то же самое что и изложено в первом посте форума.

bwn
Offline
Зарегистрирован: 25.08.2014

Vlad 47 пишет:

век живи - век учись:)

Спасибо аднака!

А можно ли (и как) сюда помещать свои картинки?

Vlad 47
Offline
Зарегистрирован: 26.02.2018

Привет!

по ссылке http://arduino.ru/forum/programmirovanie/eepron-kak-khranilishche оздал форум EEPRON как хранилище.

 

Vlad 47
Offline
Зарегистрирован: 26.02.2018

Спаял времянку-интерфейс.

Пробую скетч maksim от 24.05.2012

Vlad 47
Offline
Зарегистрирован: 26.02.2018
 
пока что серва крутит только от потенц-а! при  нажимаемой любой кнопке...
работы EEPROM  еще не вкусил:(