Как связать сервопривод с сегментным индикатором?
- Войдите на сайт для отправки комментариев
Чт, 09/06/2016 - 19:23
Как связать сервопривод управляемый потонциометром с 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
}
Неполучилось связать скетчем - пробуйте скотчем.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Вижу два скетча аккуратно записаные друг за другом. Ну хотяб для начала, не вникая в задачу и взаимодействие содержимое двух setup в соединить в один, и loop аналогично. Все остальное оставить как есть. Попробовать собрать.