как програмно инвертировать потенциометр ?
- Войдите на сайт для отправки комментариев
Сб, 29/12/2018 - 16:23
//********************************************************
#define SW1 2
#define SW2 3
volatile byte flag0 = LOW; // declare IRQ flag
volatile byte flag1 = LOW; // declare IRQ flag
int DIR = 8;
int STEP = 4;
int SLP = 12;
int MS3 = 7;
int MS2 = 6;
int MS1 = 5;
int ENABLE = 11;
int SWDIR = 9;
int sensorPin = A0;
int sensorValue = 0;
boolean mode = false;
int state = 1;
int calibration = 0;
int SW1_state = digitalRead(SW1);
int SW2_state = digitalRead(SW2);
int time_del = 0;
// *******************************************************
void setup()
{
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
pinMode(A4, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(STEP, OUTPUT);
pinMode(ENABLE, OUTPUT);
pinMode(SLP, OUTPUT);
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(MS3, OUTPUT);
pinMode(SW1, INPUT);
pinMode(SW2, INPUT);
pinMode(SWDIR, INPUT);
if (digitalRead(SWDIR) == HIGH) {
mode = true;
}
if ((SW1_state == HIGH) && (SW2_state == LOW)) {
state = 0;
}
if ((SW1_state == LOW) && (SW2_state == HIGH)) {
state = 1;
}
digitalWrite(SLP, HIGH);
digitalWrite(ENABLE, LOW);
digitalWrite(MS1, HIGH);
digitalWrite(MS2, HIGH);
digitalWrite(MS3, HIGH);
attachInterrupt(0, ISR0, FALLING);
attachInterrupt(1, ISR1, FALLING);
}
//********************************************************
void loop()
{
if (mode == true)
{ // if switch is up
switch (state)
{
case 0: // HOME
sensorValue = analogRead(sensorPin);
digitalWrite(DIR, HIGH);
digitalWrite(STEP, HIGH);
delayMicroseconds((sensorValue * 10) + 5);
digitalWrite(STEP, LOW);
delayMicroseconds((sensorValue * 10) + 5);
break;
case 1: // AWAY
sensorValue = analogRead(sensorPin);
digitalWrite(DIR, LOW);
digitalWrite(STEP, HIGH);
delayMicroseconds((sensorValue * 10) + 5);
digitalWrite(STEP, LOW);
delayMicroseconds((sensorValue * 10) + 5);
break;
}
}
if (mode == false)
{ //if switch is down
calibration = 0;
noInterrupts();
SW1_state = digitalRead(SW1);
if(SW1_state == HIGH){
while (SW1_state == HIGH)
{
digitalWrite(DIR, HIGH); // return home
digitalWrite(STEP, HIGH);
delayMicroseconds(80);
digitalWrite(STEP, LOW);
delayMicroseconds(80);
SW1_state = digitalRead(SW1);
}
}
interrupts();
//trigger camera here first
for (int frame_count = 1; frame_count < 360; frame_count++) // the slider is split into 360 posistion which equates to 15 seconds of footage played at 24 fps
{
for (int steps = 0; steps < 40; steps++)
{
if(calibration == 0)
{
digitalWrite(DIR, LOW); //move away from home
digitalWrite(STEP, HIGH);
delayMicroseconds(80);
digitalWrite(STEP, LOW);
delayMicroseconds(80);
}
else
{
return;
}
}
digitalWrite(A4,HIGH);
delay(180);
digitalWrite(A4,LOW);
time_del = analogRead(sensorPin);
onesec(time_del);
//trigger camera for all other shots here, to reduce camera shake
}
}
}
void onesec(int val)
{
for(int cycle = 0 ;cycle <val;cycle++)
{
delay(100);
}
}
//********************************************************
void ISR0() //HOME
{
state = 1;
calibration = 1;
}
//********************************************************
void ISR1() //AWAY
{
state = 0;
calibration = 1;
}
//********************************************************
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Жека, а лучше выйти из топика, поднять глаза вверх и прочитать прибитую тему. Там и про код, и про картинки, и про как тему создавать, и за что послать могут......
Имеется кусок кода, без всяких комменатирев и поснений. И чо? Потрудитесь внятно описать:
1. Что Вы хотели сделать?
2. Что получилось?
3. Чем (1) отличается от (2)?
4. Каковы конкретные вопросы, на которые Вы ждёте ответов?
Не дублируйте темы. Я удалил новую. Пишите здесь.
нужно изменить код (инвертировать работу потенциометра наоборот) чтобы ручка вращалась наоборот, чтобы не резать дорожки на плате +5v і GND
нужно изменить код (инвертировать работу потенциометра наоборот) чтобы ручка вращалась наоборот, чтобы не резать дорожки на плате +5v і GND
sensorValue = 1023 - analogRead(sensorPin);
Большое Вам спасибо! Получилось !
а как отрегулировать равномерность вращения ?
Потанцометр взять с линейной зависимостью
линейный также нужно програмно регулировать
Што значит "отрегулировать равномерность вращения"?
logicsigma, равномерность вращения нужно не регулировать, а обеспечивать.
Но вообще, можно посочувствовать, что Новыцй год не наступил, а у Вас уже руки дрожат.
почти вся область регулировки вращения мотора происходит в диапазоне 60-80%
Тогда дело в потенциометре - меняйте на другой, с линейной характеристикой.
почти вся область регулировки вращения мотора происходит в диапазоне 60-80%
растяните диапзаон регулировки с помощью дополнительных резисторов и заменой потенциометра. Ну или попробовать программно подобрать значения попугаев с учетом получаемых значений analogRead
нужно програмно значения analogRead
Думаете, что всем понятно, что такое "программно значения analogread"? Если вам некогда объяснять, что вам нужно - наврядли у кого-то найдется время додумывать вашу задачу.
Есть функция map. На входе существующие значения, на выходе нужные.
вот ету функцию map мне нужно вписать в мой код, а значения я уже сам подберу
ну вписывай, кто ж мешает
знал бы я куда вписать без ошибки, я бы не задавал вопросов на етом форуме
Дорогой, а ты, по жизни, чем занимаешься?
знал бы я куда вписать без ошибки, я бы не задавал вопросов на етом форуме
Почитайте, подумайте, попробуйте. Через неделю, с двадцатой попытки всё получится, и впредь знать будете.
А если за Вас впишут, то всёдо следующей необходимости вписать - опять будет "памагити!".
спасибо, почитаю, подумаю, попробую.
почти вся область регулировки вращения мотора происходит в диапазоне 60-80%
Тогда дело в потенциометре - меняйте на другой, с линейной характеристикой.
Меняйте потенциометр на цепочку:
Резистор 60 килоОм,
потенциометр 20 килоОм,
резистор 20 килоОм
Тогда дело в потенциометре - меняйте на другой, с линейной характеристикой.
Ну и, кроме того, если при нормальной шкале на весь диапазон должно приходиться 1024 градаций уровня (примерно 250 уровней достоверно), то после предложенной "модернизации" останется лишь порядка 200 градаций (около 50 достоверно). Будет хорошо, если этого окажется достаточно. В противном случае - все равно дучше заменить потенциометр.
PS. Номинала в 60 кОм не существует, ближайший 62. Да и потенциометр на 20 - большая редкость, обычно 22. В последнем случае номинал постоянного 68.
потенциометр исправный, просто с 0-60% регулировка двигателя незначительная, но есть. И от 80-100% немножко есть но также незначительно
потенциометр исправный, просто с 0-60% регулировка двигателя незначительная, но есть. И от 80-100% немножко есть но также незначительно
Откуда-то в 28-м посте темы вдруг появился двигатель.
Так у него там степ-дир крутится извращенским способом.
тогда может как-то шаговик можна отрегулировать ?
А по теме. Так как и современные сценаристы кино "так видят". Вот и выходит что мы наблюдаем "альтернативное программирование", где логарифмы и метод косочно-линейной апроксимации остались за бортом.
2 all helpers, не стоит в песочнице стебаться, ну взял ТС чужой код, ну не понимает он. Таки попросите его прокомментировать каждую строку кода, глядишь, поможет... :)
logicsigma, можно сделать все (ну или почти все) главное - Кто это будет делать?!!! Форумчане (завсегдатаи) в болинстве своем умеют и знают многое, и помогают - если это вообще возможно.
вот и потрудитесь написать коментарии к алгоритму работы вашего скетча, а там и вопросы отпадут (бОльшая их часть) ИМХО
В школе математику учил?
Напиши нужную формулу для переменной в зависимости от угла поворота потенциометра. Хоть квадратичную, хоть логарифмическую. Потом фунуцией map смасштабируй обратно в диапазон (0 - 1023). Если совсем начинающий - введи дополнительную переменную для простоты. Всего две строчки кода изменить надо.
Я тоже начинающий. Мне сын 23 ноября 2018 года подарил Uno 3 набор на 33-летие сватьбы.
Бувает, чо...
Паэтому ты навсякий случай 7 октября зарегистрировалса.
Бувает, чо...
Паэтому ты навсякий случай 7 октября зарегистрировалса.
Не на всяуий случай. Сын мне все уши прожужжал, какой интересный этот Ардуино. Вот и посмотрел.
Кстате - самый правильный сайт для начинающих. Всегда посылают ... к нужной книжке.
Иногда - к нужной матери. И праильна делают. Читать не всякий умеет.
Всегда посылают ...