Автостоп

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Схема эта есть, и она мне не поможет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Zona_Kem пишет:

Ода 303

Вот здесь есть схема Ода 102 - может поможет

это оно и есть, только в этом комплекте дека третьего класса

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

значит для автостопа надо:

1. счетчик увеличивающий показания к примеру раз в 10 миллисекунд (100 герц)
2. оптический датчик вызывающий прерывание и сбрасывающий первый счетчик
3. подпрограмма проверяющая значение счетчика и выполняющая процедуру СТОП

В коде могу помочь ))) (их есть у меня)

 

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

ua6em пишет:

значит для автостопа надо:

1. счетчик увеличивающий показания к примеру раз в 10 миллисекунд (100 герц)
2. оптический датчик вызывающий прерывание и сбрасывающий первый счетчик
3. подпрограмма проверяющая значение счетчика и выполняющая процедуру СТОП

В коде могу помочь ))) (их есть у меня)

 

Я уже думал об таком варианте (сообщение 31), но пока не рассматривал его пристально, а если с программой поможете - буду очень благодарен, т.к. пока програмирование мне не поддается. В 50 лет сложновато понять что и как. Вроде и написано доступным языком, но пока знаний хватает переделать простенький код под свои нужды.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Zona_Kem пишет:

В 50 лет сложновато понять что и как...

мне в мои за 60 еще сложнее, но тут есть у кого поучиться )))
 

За основу предлагаю взять этот скетчик (для счетчика)
 

// #define CONSTANTS 
// #include "lgtx8p.h"

#ifndef CONSTANTS
  #include "ConstTimers.h"
  // Параметры для работы таймера/счётчика №3 на частоте 100Гц
  //
//  constexpr uint8_t timerBits3 = getPrescalerBits(3, 100);
//  constexpr uint16_t timerTicks3 = getTimerTicks(3, 100);
  //
  // Параметры для работы таймера/счётчика №2 на частоте 1кГц
  //
  constexpr uint8_t timerBits2 = getPrescalerBits(2, 1000);
  constexpr uint8_t timerTicks2 = getTimerTicks(2, 1000);
  //
  // Параметры для работы таймера/счётчика №1 на частоте 100Гц
  //
  constexpr uint8_t timerBits1 = getPrescalerBits(1, 100);
  constexpr uint16_t timerTicks1 = getTimerTicks(1, 100);
#endif

void setup(void) {
  Serial.begin(115200);
  
  #ifdef CONSTANTS
    TCCR2B = 4;
    OCR2A = 250;
    TCCR1B = 2;
    OCR1B = 20000;
  #else
 //   TCCR3B = timerBits1;
 //   OCR3A = timerTicks1;
    TCCR2B = timerBits2;
    OCR2A = timerTicks2;
    TCCR1B = timerBits1;
    OCR1B = timerTicks1;
  #endif
}

void loop(void) {
   Serial.print("TCCR3B = ");
    //Serial.println(timerBits3);
      Serial.print("OCR3A = ");
     //   Serial.println(timerTicks3);
        
  Serial.print("TCCR2B = ");
    Serial.println(timerBits2);
      Serial.print("OCR2A = ");
        Serial.println(timerTicks2);
        
    Serial.print("TCCR1B = ");
      Serial.println(timerBits1);
        Serial.print("OCR1B = ");
          Serial.println(timerTicks1);
          
Serial.println();
delay(5000);          
    }

И библиотека для оного

#ifndef  CONSTTIMERS_H
#define CONSTTIMERS_H

///////////////////////////////////////////////////////////////////////////////
//
//  Недобиблиотека вычисления битов конфигурации делителя частоты и 
//  количества тиков таймера по заданной частоте.
//
//  Предназначена для использования с микроконтроллером ATmega328P 
//  (например, в Ардуино или в AVR-студии). Модификация для других 
//  микроконтроллеров возможна и несложна, как будет показано ниже.
//
//  Основная особенность: ВСЕ ВЫЧИСЛЕНИЯ ПРОИСХОДЯТ ВО ВРЕМЯ КОМПИЛЯЦИИ. 
//  В РЕЗУЛЬТИРУЮЩИЙ КОД НЕ ПОПАДАЕТ НИ ОДНОГО БАЙТА НИ КОДА, НИ ДАННЫХ.
//
//    замечание о точности: 
//      гарантировать точность произвольной частоты невозможно, т.к. требуемый период 
//      может элементарно не являться делителем тактовой частоты микроконтроллера или 
//      его, может быть, невозможно подобрать имеющимися делителями частоты. 
//      Недобиблиотека ВСЕГДА выдаёт наилучший из возможных результатов для заданной частоты
//      на заданном таймере. Но при этом нет никакой возможности узнать насколько хорош
//      результат и какова погрешность. Если требуется инструмент для «зрячего» выбора
//      частот, следует взять «калькулятор таймеров» (их много, например, есть и у автора).
//    конец замечания о точности.
//
//  ИСПОЛЬЗОВАНИЕ
//
//  Для использования необходимо включить файл «ConstTimers.h» и определить константы с 
//  модификатором constexpr для нужных конфигурационных битов и количества тиков, которым 
//  присвоить значения, возвращаемые функциям getPrescalerBits и getTimerTicks соответсвенно. 
//  Обе функции принимают два параметра – номер таймера и требуемую частоту. Функция 
//  getPrescalerBits возвращает результат типа uint8_t. Функция getTimerTicks возвращает результат 
//  типа uint16_t, т.к. таймер может быть 16-битным, для 8-битных таймеров значение не превышает 255.
//
//  Например:
//
//    #include <ConstTimers.h>
//    //
//    // Параметры для работы таймера/счётчика №2 на частоте 1кГц
//    //
//    constexpr uint8_t timerBits2 = getPrescalerBits(2, 1000);
//    constexpr uint8_t timerTicks2 = getTimerTicks(2, 1000);
//    //
//    // Параметры для работы таймера/счётчика №1 на частоте 500Гц
//    //
//    constexpr uint8_t timerBits1 = getPrescalerBits(1, 500);
//     constexpr uint16_t timerTicks1 = getTimerTicks(1, 500);
//    .............
//    //
//    // Конфигурация таймеров
//    // таймер №2
//    TCCR2B = timerBits2;
//    OCR2A = timerTicks2;
//    // таймер №1
//    TCCR1B = timerBits1;
//    OCR1B = timerTicks1;
//
//Результат работы будет точно такой же, как если написать константы вместо вызовов функций:
//
//  TCCR2B = 4;
//  OCR2A = 250;
//  TCCR1B = 1;
//  OCR1B = 32000;
//
// Ни на один байт код не изменится.
//
//  КОФИГУРАЦИЯ:
//
//  1. расчёт производится для текущей тактовой частоты микроконтроллера. Если нужно 
//    считать для какой-то другой частоты, измените константу ниже:
//
#define FCPU  F_CPU
//
//  2. ниже приведён массив конфигурации таймеров. Количество элементов массива 
//    соответсвует количеству таймеров. Нулевой элемент описывает нулевой таймер, 
//    первый элемент – первый таймер и т.д. Если требуется расширить недобиблиотеку для других 
//    микроконтроллеров, нужно изменить именно этот массив и больше изменять ничего не надо.
//
//  В массиве для каждого таймера указано:
//    1) разрядность таймера в виде максимально возможного значения количества тиков 
//      (для 8-разрадных таймеров – 0xFF, для 16-разрядных – 0xFFFF.
//    2) указатель на массив делителей частоты. Делители начинаются с 1 (делитель 0 писать не нужно)
//    3) количество делителей частоты у данного таймера.
//
struct STimerParameters {
  const uint32_t maxValue;
  const int * prescalers;
  const uint8_t totalPrescalers;
};

constexpr  int prescalers01[] = {1, 8, 64, 256, 1024 };
constexpr  int  prescalers2[] = {1, 8, 32, 64, 128, 256, 1024 };

constexpr STimerParameters timerParameters[3] = {
  {0x000000FFul, prescalers01, sizeof(prescalers01) / sizeof(prescalers01[0])},
  {0x0000FFFFul, prescalers01, sizeof(prescalers01) / sizeof(prescalers01[0])},
  {0x000000FFul, prescalers2, sizeof(prescalers2) / sizeof(prescalers2[0])},
};
constexpr int8_t totalTimers = sizeof(timerParameters) / sizeof(timerParameters[0]);
//
//
// ЛИЦЕНЗИЯ
//
// Данный код поставляется по лицензии ПНХ.
//
// 1. Вы можете свободно использовать или не использовать его в коммерческих, 
//    некоммерческих, и любых иных, не запрещённых законом, целях.
//
// 2. Автор не несёт решительно никакой ответственности за любые положительные
//    или отрицательные результаты использования или неиспользования данного кода.
//
// 3. Если Вам таки хочется сделать автору предъяву, то Вы знаете, куда
//    Вам следует обратиться. А если не знаете, то см. название лицензии.
//
// 4. Если данный код вдруг Вам пригодился (как учебник или ещё как что) и Вам
//    почему-либо (ну, приболели, может) захотелось отблагодарить автора рублём,
//    то это всегда пожалуйста – WebMoney, кошелёк № R626206676373
//
// 5. Возникновение или невозникновение у Вас желаний, обозначенных в п.4 
//     настоящей лицензии никак не связано с п.1, который действует безусловно 
//     и независимо от п.4.
//
// 6. Если данный код нужен Вам с какой-либо другой лицензией, например, с
//     сопровождением или Вы нуждаетесь во внесении изменений, свяжитесь с автором
//     на предмет заключения договора гражданско-правового характера.
//
///////////////////////////////////////////////////////////////////////////////

constexpr uint32_t getPeriod(const uint32_t frequency) {
  return (FCPU + frequency / 2) / frequency;
}

constexpr uint16_t prValue(const int8_t prescalerId, const int8_t nTimer) {
  return timerParameters[nTimer].prescalers[prescalerId];
}

constexpr uint32_t getDesiredTicks(const uint32_t frequency, const int8_t prescalerId, const int8_t nTimer) {
  return (getPeriod(frequency) + prValue(prescalerId, nTimer) / 2) / prValue(prescalerId, nTimer);
}

constexpr uint32_t correctTicks(uint32_t dTicks, const uint32_t maxValue) {
  return dTicks > maxValue ? maxValue : dTicks;
}

constexpr uint32_t getTicks(const uint32_t frequency, const int8_t prescalerId, const int8_t nTimer) {
  return prescalerId >= timerParameters[nTimer].totalPrescalers ? 0x1FFFFFFF :
  correctTicks(getDesiredTicks(frequency, prescalerId, nTimer), timerParameters[nTimer].maxValue);
}

constexpr uint32_t getBits(const int8_t prescalerId, const int8_t nTimer) {
  return prescalerId >= timerParameters[nTimer].totalPrescalers ? timerParameters[nTimer].totalPrescalers : prescalerId + 1;
}


constexpr int32_t absError(const uint32_t frequency, const int8_t prescalerId, const int8_t nTimer) {
  return abs(prescalerId >= timerParameters[nTimer].totalPrescalers ? 0x1FFFFFFF :
    static_cast<int32_t>(getTicks(frequency, prescalerId, nTimer) * prValue(prescalerId, nTimer)) -
    static_cast<int32_t>(getPeriod(frequency)));
}

constexpr uint8_t getPrescalerId(const uint32_t error, const uint32_t newError, const uint8_t prId, const uint8_t candidate, const uint32_t frequency, const int8_t nTimer) {
  return
  (prId >= timerParameters[nTimer].totalPrescalers) ? candidate
  : getPrescalerId(newError, absError(frequency, prId+1, nTimer), prId+1, (error <= newError) ? candidate : prId, frequency, nTimer);
}

constexpr uint16_t getTimerTicks(const int8_t nTimer, const uint32_t freq) {
  return getTicks(freq, getPrescalerId(0x1FFFFFul, absError(freq, 0, nTimer), 0, 0, freq, nTimer), nTimer);
}

constexpr uint8_t getPrescalerBits(const int8_t nTimer, const uint32_t freq) {
  return getBits(getPrescalerId(0x1FFFFFul, absError(freq, 0, nTimer), 0, 0, freq, nTimer), nTimer);
}

#endif  //  CONSTTIMERS_H

для 100 герц видимо надо использовать первый таймер

PS правда плясать от автостопа неправильная идея, для начала надо реализовать просто контроллер, кнопки, электромагниты, индикация режимов

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

ua6em пишет:

Zona_Kem пишет:

В 50 лет сложновато понять что и как...

мне в мои за 60 еще сложнее, но тут есть у кого поучиться )))

PS правда плясать от автостопа неправильная идея, для начала надо реализовать просто контроллер, кнопки, электромагниты, индикация режимов

Это я уже сделал, кнопки, индикация вроде работают. Код могу скинуть, только тапками не бросайтесь ))

Zona_Kem
Offline
Зарегистрирован: 27.10.2019
int buttonPin1 = 1; // кнопа СТОП
int buttonPin2 = 2; // кнопа ВОСПРОИЗВЕДЕНИЕ
int buttonPin3 = 3; // кнопа ПЕРЕМОТКА ВПЕРЕД
int buttonPin4 = 4; // кнопа ПЕРЕМОТКА НАЗАД
int buttonPin5 = 5; // Кнопа ЗАПИСЬ
int ledPin5 = 8; // индикация ЗАПИСЬ
int ledPin4 = 9; // индикация ПЕРЕМОТКА НАЗАД
int ledPin3 = 10; // индикация ПЕРЕМОТКА ВПЕРЕД
int ledPin2 = 11; // индикация ВОСПРОИЗВЕДЕНИЕ
int ledPin1 = 12; // индикация СТОП
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0; 
void setup()
{
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);
  pinMode(buttonPin5, INPUT);
  digitalWrite(ledPin1, HIGH); // СТОП
}

void loop()
{
 buttonState1 = digitalRead(buttonPin1);
 buttonState2 = digitalRead(buttonPin2);
 buttonState3 = digitalRead(buttonPin3); 
 buttonState4 = digitalRead(buttonPin4);
 buttonState5 = digitalRead(buttonPin5);  
 if (buttonState1 == HIGH)
 { digitalWrite(ledPin1, HIGH);
 digitalWrite(ledPin2, LOW);
 digitalWrite(ledPin3, LOW);
 digitalWrite(ledPin4, LOW);
 digitalWrite(ledPin5, LOW);}
 if (buttonState2 == HIGH)
 { digitalWrite(ledPin1, LOW);
 digitalWrite(ledPin2, HIGH);
 digitalWrite(ledPin3, LOW);
 digitalWrite(ledPin4, LOW);
 digitalWrite(ledPin5, LOW);}                           
 if (buttonState3 == HIGH)
 { digitalWrite(ledPin1, LOW);
 digitalWrite(ledPin2, LOW);
 digitalWrite(ledPin3, HIGH);
 digitalWrite(ledPin4, LOW);
 digitalWrite(ledPin5, LOW);} 
   if (buttonState4 == HIGH)
 { digitalWrite(ledPin1, LOW);
 digitalWrite(ledPin2, LOW);
 digitalWrite(ledPin3, LOW);
 digitalWrite(ledPin4, HIGH);
 digitalWrite(ledPin5, LOW);}
   if (buttonState5 == HIGH)
 { digitalWrite(ledPin1, LOW);
 digitalWrite(ledPin2, LOW);
 digitalWrite(ledPin3, LOW);
 digitalWrite(ledPin4, LOW);
 digitalWrite(ledPin5, HIGH);}
}

Собственно, вот. 4 реле подключаются параллельно светодиодам, кроме режима СТОП.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Вы правы, но я всего неделю в програмировании, и мне нужно осмыслить разные новые понятия. В этом коде я хоть понимаю, что и как работает, и при необходимости могу его  изменить, понимая, что делаю. Например ЗАПИСЬ должна включаться с одновременным нажатием ВОСПР, или реализовать режим ОБЗОР (если нажата ВОСПР, то при нажатии ПЕРЕМОТКА режим ВОСПР отключается на время нажатия ПЕРЕМОТКИ, а при отпускании ПЕРЕМОТКИ включается снова ВОСПР.

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

ua6em пишет:

...что будет при одновременном нажатии нескольких кнопок?
 

Блин... а я и не знаю...  Эмулятор позволяет нажать только одну кнопку единовременно... по идее включится какой нибудь режим.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Zona_Kem пишет:

ua6em пишет:

...что будет при одновременном нажатии нескольких кнопок?
 

Блин... а я и не знаю...  Эмулятор позволяет нажать только одну кнопку единовременно... по идее включится какой нибудь режим.

ну так, если есть схема можно пойти по простому пути, открыть схему управления и написать уравнения, если мне не изменяет память там была жёсткая логика...

сдаётся мне, что ЕвгенийП и Квон сказали бы, что решать это надо на основе цифрового автомата )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Протеус позволяет фиксировать кнопки и нажимать хоть все сразу.

Кроме того, в эмуляторах кнопки идеальные, а в реальной жизни Вам нужно помнить о дребезге. Вы его аппаратно давить собираетесь? А то программно Вы его не давите.

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Как вариант. 4 D-триггера, 3 трехвходовых ИЛИ-НЕ, 4 двухвходовых ИЛИ-НЕ, 8 двухвходовых И-НЕ. Но мне кажется то, что я написал вполне работоспособно, а в схеме разбираться - муторно больно....

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

ЕвгенийП пишет:

Протеус позволяет фиксировать кнопки и нажимать хоть все сразу.

Кроме того, в эмуляторах кнопки идеальные, а в реальной жизни Вам нужно помнить о дребезге. Вы его аппаратно давить собираетесь? А то программно Вы его не давите.

Так дребезг имеет значение, если кнопка работает триггером, а у меня (пока что) принцип работы: нажал - включилось, нажал другую - выключилось.

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Ага, новая проблема, при одновременом нажатии нескольких кнопок  включается несколько режимов. Все чудесатее и чудесатее... будем думать, как блокировать...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Zona_Kem пишет:

Как вариант. 4 D-триггера, 3 трехвходовых ИЛИ-НЕ, 4 двухвходовых ИЛИ-НЕ, 8 двухвходовых И-НЕ. Но мне кажется то, что я написал вполне работоспособно, а в схеме разбираться - муторно больно....

это вам только кажется )))

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

ua6em пишет:

Zona_Kem пишет:

Как вариант. 4 D-триггера, 3 трехвходовых ИЛИ-НЕ, 4 двухвходовых ИЛИ-НЕ, 8 двухвходовых И-НЕ. Но мне кажется то, что я написал вполне работоспособно, а в схеме разбираться - муторно больно....

это вам только кажется )))

Что кажется? Что разбираться муторно, или что схема работоспособна? )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

что работоспособна

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

:-(( печально!!! Будем думать дальше!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Zona_Kem пишет:

:-(( печально!!! Будем думать дальше!

обычно начинают с разбора чужих простейших скетчей, попробуйте посмотреть в эмуляторе, на пины 4 и 5 кнопки, если не рисовать подтягивающие резисторы, то в скетче подтянуть через INPUT_PULLUP

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Zona_Kem пишет:

:-(( печально!!! Будем думать дальше!

не думается или что-то другое? ты же хотел на жёсткой логике, нарисуй и распиши алгоритм с неё...

Гриша
Offline
Зарегистрирован: 27.04.2014

Zona_Kem пишет:

:-(( печально!!! Будем думать дальше!

пока думаете о сложности программирования, начертайте схему. Для простоты обозначьте Ардуино как черный ящик к/от которого подходят проводники с требуемыми сигналами управления. Следующее правило: ток не более 20мА на вход/выход, напряжение 5В  точнее и подробнее в разделе 28. Electrical Characteristics стр 258 рекомендую к изучению. Смею предположить, что схема вызовет не мало дискуссий. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Гриша пишет:

 Смею предположить, что схема вызовет не мало дискуссий. 

да не должна, насколько я помню плата управления была там на 155 логике, хотя могу и заблуждаться, то-есть практически всё адаптировано к переходу на микроконтроллер

Гриша
Offline
Зарегистрирован: 27.04.2014

UPD если еще не ознакомились с разделом для Новичков - настоятельно рекомендую по части вставки кода и картинок пост 0 и 1 просто обязательно к прочтению

 

ua6em пишет:

Гриша пишет:

 Смею предположить, что схема вызовет не мало дискуссий. 

да не должна, насколько я помню плата управления была там на 155 логике, хотя могу и заблуждаться, то-есть практически всё адаптировано к переходу на микроконтроллер

угу, я даже на фотке узрел предтече оптического энкодера в роли генератора импульсов и какие там фронты?есть ли компаратор или он не нужен и много всего веселого типа наших любимых реле :)))))

UPD:

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

этот девайс ящик делал, как ТНП, там было всё прилично, правда диод на фото вывернут, там угол между ними был 90 градусов

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Схема там на 561 логике, так что проблем перехода на МК не будет. Там еще электромагниты хитрые, срабатывают от 47 вольт, приходится ставить повышайку с 12 вольт. Сейчас пытаюсь собрать в единую кучу все, что вычитал на этом форуме и в учебниках )))

bizzon
Offline
Зарегистрирован: 29.03.2016

Не магниты там хитрые, а схема управления. Как в Веге 120. Для срабатывания сначала подаётся высокое напряжение на полсекунды, а потом для удержания падает вольт до 12. Была у меня Вега лет 30 назад. И в первый же день перестали электромагниты щёлкать. Помню как щас. Диод сцуко кд208 проводить отказался.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bizzon пишет:

Не магниты там хитрые, а схема управления. Как в Веге 120. Для срабатывания сначала подаётся высокое напряжение на полсекунды, а потом для удержания падает вольт до 12. Была у меня Вега лет 30 назад. И в первый же день перестали электромагниты щёлкать. Помню как щас. Диод сцуко кд208 проводить отказался.

а ведь хороший был диод миллиампер на 800, залез в инет, пишут 1.5 ампера, подзабылось однако

bizzon
Offline
Зарегистрирован: 29.03.2016

Чего ж в нём хорошего? Недалеко от Д 226 ушёл. Вот КД 226 когда появились- была почти фантастика. Красивые, высокочастотные.... щас расплачусь...

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Развели демагогию.
Тс надо всего лишь в строке 13 условие правильно прописать
if(digitalRead(button)!=0)

А в остальном, заводим на любой пин сигнал с двигателя лентопротяга(не забывая его понизить до 5в) и если приходит лог1, то запускаем слежение за обнулением счета .

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bizzon пишет:

Чего ж в нём хорошего? Недалеко от Д 226 ушёл. Вот КД 226 когда появились- была почти фантастика. Красивые, высокочастотные.... щас расплачусь...

учитывая, что мне выпрямитель для 4-х лампочек (1500 вольт 1 ампер) пришлось лепить на д229 диодах, очень даже ничего )))

bizzon
Offline
Зарегистрирован: 29.03.2016

Шо ж за лампочки такие? Это ж полтора киловатта. Усилитель для передатчика не иначе.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bizzon пишет:

Шо ж за лампочки такие? Это ж полтора киловатта. Усилитель для передатчика не иначе.

1000 точно

Иван74
Offline
Зарегистрирован: 15.04.2020

Zona_Kem пишет:

Нарисовалась задачка по восстановлению древнего магнитофона.

Есть контакты, которые замыкаются с различной частотой и периодом. И есть светодиод, который тухнет, если импульсы перестают приходить в течении 2 сек. Набросал скетч, взяв как образец рабочий вариант, но работать он отказывается.  Светодиод не тухнет.

// Автостоп для ардуино
int button = 2; // Датчик автостопа
int led = 12; //Выход на светодиод
unsigned long currentTime; // Переменная текущего времени
unsigned long autostopTime; // Переменная счетчика автостопа
void setup() {
pinMode(led, OUTPUT); //Включаем пин как цифровой выход
digitalWrite(led, HIGH); // Внутренним резистором ардуино задаем высокий уровень сигнала
autostopTime = millis(); // Програмный счетчик времени
}
void loop() {
currentTime = millis(); // Определяем текущее время в цикле
if (button!=0) { autostopTime = currentTime;} // Если номер канала не нулевой, сбрасываем счетчик автостопа
if(currentTime >= (autostopTime + 2000) ){digitalWrite(led, LOW);} // Если предыдущее условие верно, считаем 2 секунды до гащения светодиода
}

Подскажите, где я накосячил!

Приветствую!

Проект удался? У меня возникла похожая ситуация.

 

WavGat
Offline
Зарегистрирован: 14.04.2020

ЕвгенийП пишет:

Zona_Kem пишет:

услышал только что код ни к черту

Ну, а что Вы ожидали услышать, если он действительно ни к чёрту?

Zona_Kem пишет:

Это как если бы Вы пришли к терапевту с кашлем, а он отослал Вас заканчивать медицинский институт.

Не путайте, Вы пришли не как больной, а как другой терапевт к своему коллеге. Если бы Вы как больной пришли, разговор был бы другим. А так - нормальная реакция.

Сюда люди приходят как ученик к учителю, а не как коллега к коллеге, так как уровень знаний разный. И подобные фразы у 90% отбивают желание общаться/учиться/приходить сюда еще раз.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

WavGat пишет:

Сюда люди приходят как ...

... по-разному. Каждый по-своему приходит.

С ТС как раз и общались как с учеником - посоветовали что почитать и изучить, но ему это не понравилось.

sadman41
Offline
Зарегистрирован: 19.10.2016

В образовании, как и в любом деле, есть две стороны. И обе стороны должны быть согласны с тем, что они являются участниками образовательного, в данном случае, процесса.

На форуме написано, что его участники предоставляют образовательные услуги? Если нет, то рассуждения об отношениях "учитель и ученик" - демагогия чистой воды.

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

Иван74 пишет:

Zona_Kem пишет:

Нарисовалась задачка по восстановлению древнего магнитофона.

Есть контакты, которые замыкаются с различной частотой и периодом. И есть светодиод, который тухнет, если импульсы перестают приходить в течении 2 сек. Набросал скетч, взяв как образец рабочий вариант, но работать он отказывается.  Светодиод не тухнет.

// Автостоп для ардуино
int button = 2; // Датчик автостопа
int led = 12; //Выход на светодиод
unsigned long currentTime; // Переменная текущего времени
unsigned long autostopTime; // Переменная счетчика автостопа
void setup() {
pinMode(led, OUTPUT); //Включаем пин как цифровой выход
digitalWrite(led, HIGH); // Внутренним резистором ардуино задаем высокий уровень сигнала
autostopTime = millis(); // Програмный счетчик времени
}
void loop() {
currentTime = millis(); // Определяем текущее время в цикле
if (button!=0) { autostopTime = currentTime;} // Если номер канала не нулевой, сбрасываем счетчик автостопа
if(currentTime >= (autostopTime + 2000) ){digitalWrite(led, LOW);} // Если предыдущее условие верно, считаем 2 секунды до гащения светодиода
}

Подскажите, где я накосячил!

Приветствую!

Проект удался? У меня возникла похожая ситуация.

 

 

С этой проблемой мне помогли на другом форуме. К сожалению, не могу дать ссылку, т.к. нарушу правила форума, если только в личку.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Zona_Kem пишет:

С этой проблемой мне помогли на другом форуме. К сожалению, не могу дать ссылку, т.к. нарушу правила форума, если только в личку.

заинтриговал...мы может тоже хотим на этот секретный форум )))

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

ua6em пишет:

Zona_Kem пишет:

С этой проблемой мне помогли на другом форуме. К сожалению, не могу дать ссылку, т.к. нарушу правила форума, если только в личку.

заинтриговал...мы может тоже хотим на этот секретный форум )))

Да без проблем! Надеюсь, меня не забанят, т.к. планирую сюда обращаться за помощью.

https://www.cyberforum.ru/arduino/thread2520604.html

b707
Offline
Зарегистрирован: 26.05.2017

WavGat пишет:

подобные фразы у 90% отбивают желание общаться/учиться/приходить сюда еще раз.

жду, когда же "подобные фразы" отобьют желание приходить сюда у вас...

b707
Offline
Зарегистрирован: 26.05.2017

Zona_Kem пишет:

Да без проблем! Надеюсь, меня не забанят, т.к. планирую сюда обращаться за помощью.

https://www.cyberforum.ru/arduino/thread2520604.html

это не называется "мне помогли", они просто написали код за вас.

Zona_Kem
Offline
Зарегистрирован: 27.10.2019

b707 пишет:

Zona_Kem пишет:

Да без проблем! Надеюсь, меня не забанят, т.к. планирую сюда обращаться за помощью.

https://www.cyberforum.ru/arduino/thread2520604.html

это не называется "мне помогли", они просто написали код за вас.

Может быть, главное результат. И потом анализ рабочего кода дал мне еще немного знаний.

b707
Offline
Зарегистрирован: 26.05.2017

Zona_Kem пишет:

анализ рабочего кода дал мне еще немного знаний.

Если б вы разобрались с проблемой сами - знаний бы получили больше. Наш форум ориентирован именно на такую помощь, а не на написание кода за новичков.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

Zona_Kem пишет:

Да без проблем! Надеюсь, меня не забанят, т.к. планирую сюда обращаться за помощью.

https://www.cyberforum.ru/arduino/thread2520604.html

это не называется "мне помогли", они просто написали код за вас.

да не, это зависть )))
Идеологически было предложено простое правильное решение, если сигнал на пине не меняется в течении 2 секунд - СТОП

а кода там кот наплакал
 

Иван74
Offline
Зарегистрирован: 15.04.2020

b707 пишет:

Zona_Kem пишет:

Да без проблем! Надеюсь, меня не забанят, т.к. планирую сюда обращаться за помощью.

https://www.cyberforum.ru/arduino/thread2520604.html

это не называется "мне помогли", они просто написали код за вас.

Если человеку и написали для него или за него, что здесь плохого? Он же и иголки им под ногти не загонял. Обратился, ему помогли, написали. Я за него рад.

 

Иван74
Offline
Зарегистрирован: 15.04.2020

Zona_Kem пишет:

Иван74 пишет:

Zona_Kem пишет:

Нарисовалась задачка по восстановлению древнего магнитофона.

Есть контакты, которые замыкаются с различной частотой и периодом. И есть светодиод, который тухнет, если импульсы перестают приходить в течении 2 сек. Набросал скетч, взяв как образец рабочий вариант, но работать он отказывается.  Светодиод не тухнет.

// Автостоп для ардуино
int button = 2; // Датчик автостопа
int led = 12; //Выход на светодиод
unsigned long currentTime; // Переменная текущего времени
unsigned long autostopTime; // Переменная счетчика автостопа
void setup() {
pinMode(led, OUTPUT); //Включаем пин как цифровой выход
digitalWrite(led, HIGH); // Внутренним резистором ардуино задаем высокий уровень сигнала
autostopTime = millis(); // Програмный счетчик времени
}
void loop() {
currentTime = millis(); // Определяем текущее время в цикле
if (button!=0) { autostopTime = currentTime;} // Если номер канала не нулевой, сбрасываем счетчик автостопа
if(currentTime >= (autostopTime + 2000) ){digitalWrite(led, LOW);} // Если предыдущее условие верно, считаем 2 секунды до гащения светодиода
}

Подскажите, где я накосячил!

Приветствую!

Проект удался? У меня возникла похожая ситуация.

 

 

С этой проблемой мне помогли на другом форуме. К сожалению, не могу дать ссылку, т.к. нарушу правила форума, если только в личку.

С удовольствием. Мой email: never24@yandex.ru

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Иван74 пишет:

Если человеку и написали для него или за него, что здесь плохого? 

Ничего плохого. Просто это именно "написали для него или за него", а не "помогли" - вопрос чисто терминологический.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Иван74 пишет:

Если человеку и написали для него или за него, что здесь плохого? 

Ничего плохого. Просто это именно "написали для него или за него", а не "помогли" - вопрос чисто терминологический.

глянул тут свою "помощь", в такие дебри полез с подсказками...ужос...
То, что ТС -у сделали использовать можно напрямую, запитав ардуину (Vin++) прямо от двигателя лентопротяжки и будет работать )))
Хорошее решение, не находите? Выше никто ничего аналогичного не предложил, УВЫ...
Если залить HEX без загрузчика будет работать лучше...

WavGat
Offline
Зарегистрирован: 14.04.2020

ua6em пишет:

ЕвгенийП пишет:

Иван74 пишет:

Если человеку и написали для него или за него, что здесь плохого? 

Ничего плохого. Просто это именно "написали для него или за него", а не "помогли" - вопрос чисто терминологический.

глянул тут свою "помощь", в такие дебри полез с подсказками...ужос...
То, что ТС -у сделали использовать можно напрямую, запитав ардуину (Vin++) прямо от двигателя лентопротяжки и будет работать )))
Хорошее решение, не находите? Выше никто ничего аналогичного не предложил, УВЫ...
Если залить HEX без загрузчика будет работать лучше...

Вряд ли это будет хорошим решением, так как этой же ардуиной ТС хочет управлять и кнопками старт, стоп, перемотка.