Uložení pozic servomotoru do EPROM v Arduino NANO

31.10.2017 Arduino #arduino #servo #programování

Základní zapojení a program, který ukládá pozice serva do EPROM v Arduino NANO s následním vyvoláním a nastavením uložených pozic.


Zapojení velmi jednoduché a využívá standardních součástek a vlastností Arduino NANO. Hlavním úkolem příkladu je uložení pozic servomotoru, který se nastavuje pomocí potenciometru do EPROM v Arduino NANO. Po uložení je lze opětovně vyvolat a do těchto pozic, stisknutím přepínacího tlačítka opětovně nastavit.

Součástky

  • Arduino NANO
  • Potenciometr (Pot)
  • 3xTlačítko (Btn1-3)
  • 3xRezistor 10kOhm
  • Servomotor
  • Vodiče

Zapojení 

servo_eprom_bb

Sketch

#include < Servo.h > 
#include < EEPROM.h >

int posServo; 
int aktPosMemA;
int aktPosMemB;
int servoPin = 9; 
int servoDelay =80; 
int buttonPinA = 6; 
int buttonPinB = 7;
int buttonPinC = 8; 
 
int potRead; 
int potPin = A0; 

int readingBtnA=0;
int readingBtnB=0;
int readingBtnC=0;

int stavS=1;
 
Servo myServo;

void setup() {
  Serial.begin(9600); 
  pinMode(buttonPinA, INPUT);
  pinMode(buttonPinB, INPUT);
  pinMode(buttonPinC, INPUT);
  myServo.attach(servoPin); 
}

void loop() {
  readingBtnA = digitalRead(buttonPinA);
  readingBtnB = digitalRead(buttonPinB);
  readingBtnC = digitalRead(buttonPinC);
  delay(servoDelay);
   potRead = analogRead(potPin); 
   posServo = (170./1023.)*potRead;
    
  if(readingBtnA == HIGH){
    myServo.write(posServo);  
    delay(servoDelay);
    EEPROM.write(1, posServo);
  }
  
  if(readingBtnB == HIGH){ 
    myServo.write(posServo);  
    delay(servoDelay);
    EEPROM.write(2, posServo);
  }
  
  if(readingBtnC == HIGH && stavS==1){
    aktPosMemA=EEPROM.read(1);
    delay(servoDelay);
    myServo.write(aktPosMemA);
    stavS=2;
    delay(servoDelay);
  }else if(readingBtnC == HIGH && stavS==2){  
    aktPosMemB=EEPROM.read(2);
    delay(servoDelay);
    myServo.write(aktPosMemB);
    stavS=1;
    delay(servoDelay);
  }
  
   // Serial.println("Ulozena pozice I      Ulozena pozice II      Pozice tlacitka I      Pozice tlacitka II      Stav prepinaciho tlacitka");
    Serial.print(aktPosMemA);
    Serial.print("      ");
    Serial.print(aktPosMemB);
    Serial.print("      ");
    Serial.print(readingBtnA);
    Serial.print("      ");
    Serial.print(readingBtnB);
    Serial.print("      ");
    Serial.print(readingBtnC);
    Serial.print("      ");
    Serial.println(stavS);
}

Jak to funguje?

Nejdříve se musí nastavit krajní pozice serva. To se provede tak, že se stiskne tlačítko Btn1 a otáčí se potenciometrem Pot. Tím se mění pozice servomotrou. Po puštění tlačítka Btn1 se uloží do paměti pozice serva. Stejný postup je i pro tlačítko Btn2, tj. držíme stisknuté tlačítko Btn2 otáčíme potenciometrem a po nastavení pozice tlačítko Btn2 pustíme a pozice se zapíše do paměti. Přepínání mezi oběma pozicemi se provádí tlačítkem Btn3. Při jeho opakovaném stistnutí se střídavě načítají uložené pozice servomotoru a ten se podle nich nastavuje.