Как связать сервопривод с сегментным индикатором?

RLY
Offline
Зарегистрирован: 09.06.2016

Как связать сервопривод управляемый потонциометром с 4 разрядным 7 сегментным индикатором? Нашел скетч для индикатора, попытался связать не получилось:(

 
 
int latchPin = 8;     //Пин "защелки" первого регистра подключен к ST_CP входу первого регистра отвечающего за сегменты
 
int latchPin2 = 9;    //Пин "защелки" второго регистра подключен к ST_CP входу первого регистра отвечающего за разряды
 
int clockPin = 12;    //Пин подключен к SH_CP входу 74HC595
 
int dataPin = 11;     //Пин подключен к DS входу 74HC595
 
 
 
int TimeLight = 5;  //время для разогрева сегментов
 
int sensorPin=A0;
 
 
byte SegDisplay; // переменная для вывода символов на индикаторе
 
byte RazrDisplay; // переменная для включения разрядов
 
 
 
// Настройка комбинации для отображения каждого номера на дисплее.
 
// Комбинация выбрана на основе таблицы отображаемого знака данным порта
 
// Соответственно { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , dp, - }
 
byte g_digits[12]={192,249,164,176,153,146,130,248,128,144,127,255}; //массив цифр, генерирующий из сегментов цифры
 
byte g_registerArray[4]={1,2,4,8}; //массив цифр, указывающий разряды
 
 
 
 
 
void setup() {
 
// обозначаем все пины как выходы
 
  pinMode(latchPin, OUTPUT);
 
   pinMode(latchPin2, OUTPUT);
 
  pinMode(clockPin, OUTPUT);
 
  pinMode(dataPin, OUTPUT);
 
}
 
 
 
void loop() {
 
  int disp = 0; //создаем переменную для вывода на экран
 
 
 
  int analogueValue = analogRead(sensorPin);  // читаем аналоговый пин A0
 
  analogueValue = map(analogueValue, 0, 1023, 0, 8888); //преобразуем диапазон с А0 (0-1023) в нужный нам (0-8888)
 
 
 
  disp = analogueValue; // записываем получившуюся после преобразования цифру в переменну для вывода на экран
 
  
 // Разбиваем цифру по разрядам индикатора
 
  if (disp < 10) // если наша цифра меньше 10, то
 
  {
 
    Razryad(3); Segment(11); // пишем в первый разряд прочерк
 
    Razryad(0); Segment(11); // пишем во второй разряд прочерк
 
    Razryad(1); Segment(11); // пишем в третий разряд прочерк
 
    Razryad(2); Segment(disp); // пишем в четвертый разряд нашу цифру
 
  }
  else if (disp < 100) // если наша цифра меньше 100, то
 
  {
 
    Razryad(3); Segment(11); // пишем в первый разряд прочерк
 
    Razryad(0); Segment(11); // пишем во второй разряд прочерк
 
    Razryad(1); Segment(disp / 10); // пишем в третий разряд - цифру делёную на 10
 
    Razryad(2); Segment(disp % 10); // пишем в четвертый разряд цифру оставшуюся от деления на 10
 
 
  }
 
  else if (disp < 1000)
 
  {
 
    Razryad(3); Segment(11);
 
    Razryad(0); Segment(disp / 100);
 
    Razryad(1); Segment((disp % 100) / 10);
 
    Razryad(2); Segment(disp % 10);
 
  }
 
  else
 
  {
 
    Razryad(3); Segment(disp / 1000);
 
    Razryad(0); Segment((disp % 1000) / 100);
 
    Razryad(1); Segment((disp % 100) / 10);
 
    Razryad(2); Segment(disp % 10);
 
  }
 
 }
 
 
 
 
 
void Segment(int x) //функция для записи в 1 регистр информации для генерации символов
 
{
 
    digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW
 
SegDisplay=g_digits[x]; // получаем цифру и выводим символ, из массива цифр, соответствующий этой цифре.
 
      shiftOut(dataPin, clockPin, MSBFIRST, SegDisplay);  // Записываем информацию в регистр
 
  digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
 
}
 
 
 
void Razryad(int r) //функция для записи во 2 регистр номера разряда индикатора
 
{
 
    digitalWrite(latchPin2, LOW); // устанавливаем синхронизацию "защелки" на LOW
 
RazrDisplay=g_registerArray[r];  // получаем цифру и выводим номер регистра, из массива цифр, соответствующий этой цифре.
 
      shiftOut(dataPin, clockPin, MSBFIRST, RazrDisplay); // Записываем информацию в регистр
 
  digitalWrite(latchPin2, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
 
 delay(TimeLight); // пауза, чтобы сегменты "разгорелись"
 
}
#include <Servo.h>
 
Servo myservo;  // create servo object to control a servo
 
int val;    // variable to read the value from the analog pin
int potpin = 0;  // analog pin used to connect the potentiometer
 
void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}
 
void loop() 
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(10);                           // waits for the servo to get there
}
 
Logik
Offline
Зарегистрирован: 05.08.2014

Неполучилось связать скетчем - пробуйте скотчем. 

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

RLY
Offline
Зарегистрирован: 09.06.2016




int latchPin = 8;     //Пин "защелки" первого регистра подключен к ST_CP входу первого регистра отвечающего за сегменты

int latchPin2 = 9;    //Пин "защелки" второго регистра подключен к ST_CP входу первого регистра отвечающего за разряды

int clockPin = 12;    //Пин подключен к SH_CP входу 74HC595

int dataPin = 11;     //Пин подключен к DS входу 74HC595

 

int TimeLight = 5;  //время для разогрева сегментов

int sensorPin=A0;
 

byte SegDisplay; // переменная для вывода символов на индикаторе

byte RazrDisplay; // переменная для включения разрядов

 

byte g_digits[12]={192,249,164,176,153,146,130,248,128,144,127,255}; //массив цифр, генерирующий из сегментов цифры

byte g_registerArray[4]={1,2,4,8}; //массив цифр, указывающий разряды

 

 

void setup() {

// обозначаем все пины как выходы

  pinMode(latchPin, OUTPUT);

   pinMode(latchPin2, OUTPUT);

  pinMode(clockPin, OUTPUT);

  pinMode(dataPin, OUTPUT);

}

 

void loop() {

  int disp = 0; //создаем переменную для вывода на экран



  int analogueValue = analogRead(sensorPin);  // читаем аналоговый пин A0

  analogueValue = map(analogueValue, 0, 1023, 0, 8888); //преобразуем диапазон с А0 (0-1023) в нужный нам (0-8888)

 

  disp = analogueValue; // записываем получившуюся после преобразования цифру в переменну для вывода на экран

  
 // Разбиваем цифру по разрядам индикатора

  if (disp < 10) // если наша цифра меньше 10, то

  {

    Razryad(3); Segment(11); // пишем в первый разряд прочерк

    Razryad(0); Segment(11); // пишем во второй разряд прочерк

    Razryad(1); Segment(11); // пишем в третий разряд прочерк

    Razryad(2); Segment(disp); // пишем в четвертый разряд нашу цифру

  }
  else if (disp < 100) // если наша цифра меньше 100, то

  {

    Razryad(3); Segment(11); // пишем в первый разряд прочерк

    Razryad(0); Segment(11); // пишем во второй разряд прочерк

    Razryad(1); Segment(disp / 10); // пишем в третий разряд - цифру делёную на 10

    Razryad(2); Segment(disp % 10); // пишем в четвертый разряд цифру оставшуюся от деления на 10

  }

  else if (disp < 1000)

  {

    Razryad(3); Segment(11);

    Razryad(0); Segment(disp / 100);

    Razryad(1); Segment((disp % 100) / 10);

    Razryad(2); Segment(disp % 10);

  }

  else

  {

    Razryad(3); Segment(disp / 1000);

    Razryad(0); Segment((disp % 1000) / 100);

    Razryad(1); Segment((disp % 100) / 10);

    Razryad(2); Segment(disp % 10);

  }

 }

 

 

void Segment(int x) //функция для записи в 1 регистр информации для генерации символов

{

    digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW

SegDisplay=g_digits[x]; // получаем цифру и выводим символ, из массива цифр, соответствующий этой цифре.

      shiftOut(dataPin, clockPin, MSBFIRST, SegDisplay);  // Записываем информацию в регистр

  digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах

}

 

void Razryad(int r) //функция для записи во 2 регистр номера разряда индикатора

{

    digitalWrite(latchPin2, LOW); // устанавливаем синхронизацию "защелки" на LOW

RazrDisplay=g_registerArray[r];  // получаем цифру и выводим номер регистра, из массива цифр, соответствующий этой цифре.

      shiftOut(dataPin, clockPin, MSBFIRST, RazrDisplay); // Записываем информацию в регистр

  digitalWrite(latchPin2, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах

 delay(TimeLight); // пауза, чтобы сегменты "разгорелись"

}
#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int val;    // variable to read the value from the analog pin
int potpin = 0;  // analog pin used to connect the potentiometer

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() 
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(10);                           // waits for the servo to get there
}

 

Logik
Offline
Зарегистрирован: 05.08.2014

Вижу два скетча аккуратно записаные друг за другом. Ну хотяб для начала, не вникая в задачу и взаимодействие содержимое двух setup в соединить в один, и loop аналогично. Все остальное оставить как есть. Попробовать собрать.