Ответить
  • Неизвестный кот Senior Member
    офлайн
    Неизвестный кот Senior Member

    697

    14 лет на сайте
    пользователь #231939

    Профиль

    697
    # 12 августа 2013 21:13

    Подскажите! Есть автосигнализация..Хочу её использовать как приемник и передатчик, чтобы можно было при нажатие на чип, можно было сигнал обрабатывать на Ардуино. Вот только один нюанс, что при нажатии на чип, на выходе будет в 1 сек всего лишь импульс в 12 В.....Какие мысли как споймать этот импульс, и чтобы при следующем импульсе отменить первое действие?

    От снайпера не убежишь!
  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9978

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9978
    # 14 августа 2013 13:36

    все очень легко. единственно надо срезать импульс до 5-1 вольт(резистором). Прога тоже очень простоая. Напишу в 2 словах.
    Нажали на кнопку пошел импульс попал на контакт ардуино (он стал = 1) и погас(импульс)ю Выполнилось какоето действие например загорелся диод. Нажали второй раз пришла опять 1 проверилось состояние диода и выполнилось противоположное действие. Я ребенку свет делал на модель по такому принципу.

  • Неизвестный кот Senior Member
    офлайн
    Неизвестный кот Senior Member

    697

    14 лет на сайте
    пользователь #231939

    Профиль

    697
    # 19 августа 2013 21:40
    Protez1999:

    все очень легко. единственно надо срезать импульс до 5-1 вольт(резистором). Прога тоже очень простоая. Напишу в 2 словах.
    Нажали на кнопку пошел импульс попал на контакт ардуино (он стал = 1) и погас(импульс)ю Выполнилось какоето действие например загорелся диод. Нажали второй раз пришла опять 1 проверилось состояние диода и выполнилось противоположное действие. Я ребенку свет делал на модель по такому принципу.

    Это я осилил в принципе..Теперь мне интересно, можно ли сделать чтобы 1 раз нажал-одно действие, два раза нажал-другое и т.д.? Одной кнопкой всё...

    От снайпера не убежишь!
  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9978

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9978
    # 20 августа 2013 13:04

    Можно. просто в программе нужно ввести подсчет. Например 1 раз нажал переменная стала = 1 выполнелось опред действие , 2 раза нажал переменная стала 2 и выполнелось другое действие и т.д.

  • Неизвестный кот Senior Member
    офлайн
    Неизвестный кот Senior Member

    697

    14 лет на сайте
    пользователь #231939

    Профиль

    697
    # 20 августа 2013 13:41
    Protez1999:

    Можно. просто в программе нужно ввести подсчет. Например 1 раз нажал переменная стала = 1 выполнелось опред действие , 2 раза нажал переменная стала 2 и выполнелось другое действие и т.д.

    Так?:

    код выделить все

    #include <LiquidCrystal.h>

    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    int regim=1;
    int flag=0;

    void setup() {
    pinMode(10,OUTPUT);
    pinMode(8,OUTPUT);
    }

    void loop() {
    if(digitalRead(7)==HIGH&&flag==0)//если кнопка нажата
    // и перемення flag равна 0 , то ...
    {
    regim++;
    flag=1;

    //это нужно для того что бы с каждым нажатием кнопки
    //происходило только одно действие
    // плюс защита от "дребезга" 100%

    if(regim>4)//ограничим количество режимов
    {
    regim=1;//так как мы используем только одну кнопку,
    // то переключать режимы будем циклично
    }

    }

    if(digitalRead(7)==LOW&&flag==1)//если кнопка НЕ нажата
    //и переменная flag равна - 1 ,то ...
    {

    flag=0;//обнуляем переменную "knopka"
    }

    if(regim==1)//первый режим
    {
    digitalWrite(8,LOW);//выключаем все светодиоды
    digitalWrite(10,LOW);

    //здесь может быть любое ваше действие
    }
    if(regim==2)//второй режим
    {
    digitalWrite(10,HIGH);//включае красный светодиод
    digitalWrite(8,LOW);

    //здесь может быть любое ваше действие
    }

    if(regim==3)//третий режим
    {

    digitalWrite(8,HIGH);//включае зеленый светодиод
    digitalWrite(10,LOW);

    //здесь может быть любое ваше действие
    }

    if(regim==4)//четвертый режим
    {

    digitalWrite(8,HIGH);//включаем светодиоды одновременно
    digitalWrite(10,HIGH);
    //здесь может быть любое ваше действие
    }

    }

    От снайпера не убежишь!
  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9978

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9978
    # 20 августа 2013 22:38 Редактировалось Protez1999, 2 раз(а).

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

  • Неизвестный кот Senior Member
    офлайн
    Неизвестный кот Senior Member

    697

    14 лет на сайте
    пользователь #231939

    Профиль

    697
    # 20 августа 2013 23:44 Редактировалось Неизвестный кот, 1 раз.
    Protez1999:

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

    Всё заработало, только вот забыл в конце указать delay(), как время задержки для реагирования на короткий импульс пришедший(12В 1сек) пришедший с блока ДУ. Кнопка мне не нужна была, мне нужно управлять на растоянии нагрузкой, а IR тоже не подходит в связи с малой дальностью..Сигнал считывается(он 12В,поэтому поставил делитель напряжения) и сравнивается с величиной в 12В, относительно коэффициента умножения для точности измерения-это и DELAY() мне даёт то,что малая будет вероятность на дребезг контактов и меньше будет шансов на случайные помехи...Добавил вывод напряжения на дисплей чисто от нечего делать..Приём сигнала как и кнопку можно приделать, главное не забывать про подтяжку резисторов и считать как любое значение (HIGH LOW 1 0 12в И Т.Д.)

    код выделить все

    #include <LiquidCrystal.h>

    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    int regim=1;
    int flag=0;
    const int analogInPin = 0;
    float sensorValue = 0;
    float outputValue = 0;

    void setup() {
    // set up the LCD's number of columns and rows:
    Serial.begin(9600);
    lcd.begin(16, 2);
    // Print a message to the LCD.
    lcd.print("Vysokoe DC");
    delay(1000);
    lcd.clear();
    pinMode(10,OUTPUT);
    pinMode(8,OUTPUT);
    lcd.clear();
    }

    void loop() {
    lcd.clear();
    outputValue = float(analogRead(analogInPin))*0.0108583544;

    if(outputValue>=7&&flag==0)//если кнопка нажата
    // и перемення flag равна 0 , то ...
    {
    regim++;
    flag=1;

    //это нужно для того что бы с каждым нажатием кнопки
    //происходило только одно действие
    // плюс защита от "дребезга" 100%

    if(regim>4)//ограничим количество режимов
    {
    regim=1;//так как мы используем только одну кнопку,
    // то переключать режимы будем циклично
    }

    }

    if(outputValue>=7&&flag==1)//если кнопка НЕ нажата
    //и переменная flag равна - 1 ,то ...
    {

    flag=0;//обнуляем переменную "knopka"
    }

    if(regim==1)//первый режим
    {
    digitalWrite(8,LOW);//выключаем все светодиоды
    digitalWrite(10,LOW);

    //здесь может быть любое ваше действие
    }
    if(regim==2)//второй режим
    {
    digitalWrite(10,HIGH);//включае красный светодиод
    digitalWrite(8,LOW);

    //здесь может быть любое ваше действие
    }

    if(regim==3)//третий режим
    {

    digitalWrite(8,HIGH);//включае зеленый светодиод
    digitalWrite(10,LOW);

    //здесь может быть любое ваше действие
    }

    if(regim==4)//четвертый режим
    {

    digitalWrite(8,HIGH);//включаем светодиоды одновременно
    digitalWrite(10,HIGH);
    //здесь может быть любое ваше действие
    }
    Serial.print("Voltage = " );
    Serial.println(outputValue);
    lcd.print("Voltage = ");
    lcd.print(outputValue);

    delay(400);
    }

    Принцип действия как-то такой:

    В принципе, с этой работой справилась бы и атини, но вот нету под рукой..
    Всё это забавно, но интересно какие дисплеи читают русскую кириллицу? Кто пользовался Nokia дисплейчиками??

    От снайпера не убежишь!
  • haf WP Team
    офлайн
    haf WP Team

    78

    17 лет на сайте
    пользователь #99398

    Профиль
    Написать сообщение

    78
    # 21 августа 2013 12:24 Редактировалось haf, 1 раз.

    [censored by Grace-o]

    Жёлтая карточка была показана пользователю за этот пост модератором Grace-o (22 августа 2013 14:27)
    Основание: реклама только в Барахолке

    krivonosaleksandr@gmail.com
  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9978

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9978
    # 21 августа 2013 18:43

    Продажа в барахолке!!!!

    Добавлено спустя 44 секунды

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

  • Неизвестный кот Senior Member
    офлайн
    Неизвестный кот Senior Member

    697

    14 лет на сайте
    пользователь #231939

    Профиль

    697
    # 28 августа 2013 20:22 Редактировалось Неизвестный кот, 1 раз.

    Есть Nokia 3310...Вот умаю:или дисплей достать или использовать телефон как беспроводной передатчик...В любом случае у меня остаются вопросы: смогу ли я подружить этот дисплей с руским языком без танцев с бубном особых, второй вопрос это приёмопередатчик(позвонил на телефон и снял сигнал, только вот думаю с вибрации взять импульс или с динамика или с подсветки или со звонка или ещё как)? Или можно, что ещё интересного с него взять? А вот интересно, если достать дисплей для своих эксперементов, телефон будет работать??

    От снайпера не убежишь!
  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9978

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9978
    # 30 августа 2013 21:20

    можно взять сигнал со звонка . грубо говоря 5 секунд звонка 1 действие 10 другое. и т.п. Ну и можно как вы писали и с вибро и с диодов

  • 62310 Passat B6 Club
    офлайн
    62310 Passat B6 Club

    1436

    18 лет на сайте
    пользователь #62310

    Профиль
    Написать сообщение

    1436
    # 5 сентября 2013 16:49

    Помогите с проблемой. Не могу понять. Ethernet shield + температурный 18В20.
    Через сериал порт температуру гонит нормально. Отдельно сервер тоже показывает какую-нить "ПРИВЕТ!", а вот вместе никак. Браузер крутица, крутицца и всё - ноль.
    Может опрашиваю как-то неправильно?

    код выделить все

    #include <SPI.h>
    #include <Ethernet.h>
    #include <OneWire.h>
    #include <DallasTemperature.h>

    // Введите MAC-адрес и IP-адрес вашего контроллера
    // IP-адрес должен соответствовать вашей локальной сети
    byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
    IPAddress ip(192,168,0,222); //<<< IP-АДРЕС ВВОДИТЬ СЮДА!!!

    // Инициализация библиотеки Ethernet server
    // с тем IP-адресом и портом который мы хотим использовать
    // (порт 80 по умолчанию используется для HTTP):
    EthernetServer server(80);

    // Data-нога датчика (или датчиков) к 10 пину ардуины
    #define ONE_WIRE_BUS 10
    // настройка oneWire для работы с любыми другими OneWire девайсами (не только Maxim/Dallas датчиками температуры)
    OneWire oneWire(ONE_WIRE_BUS);
    // подключаем Dallas Temperature.
    DallasTemperature sensors(&oneWire);

    void setup()
    {
    // запускаем Ethernet соединение и сервер:
    Ethernet.begin(mac, ip);
    server.begin();

    sensors.begin();
    }

    void loop()
    {
    // ожидание подключения клиентов
    EthernetClient client = server.available();
    if (client) {
    // HTTP запрос заканчивается пустой строкой
    boolean currentLineIsBlank = true;
    while (client.connected()) {
    if (client.available()) {
    char c = client.read();
    // если вы дошли до конца строки (был получен символ конца строки)
    // и следующая строка пустая, значит http запрос закончился,
    // можно отправлять ответ
    if (c == '\n' && currentLineIsBlank) {
    // отправляем стандартный HTTP-заголовок "Успешный запрос"
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();

    //sensors.begin();
    sensors.requestTemperatures(); // запрос показаний температуры
    client.println(sensors.getTempCByIndex(0));
    //client.println(oneWire.read());

    break;
    }
    if (c == '\n';) {
    // начало новой строки
    currentLineIsBlank = true;
    }
    else if (c != '\r';) {
    // получили символ в текущей строке
    currentLineIsBlank = false;
    }
    }
    }
    // Небольшая задержка, чтобы дать время
    // браузеру для получения данных
    delay(1);
    // закрываем соединение
    client.stop();
    }
    }

    ©
  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9978

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9978
    # 6 сентября 2013 07:38 Редактировалось Protez1999, 2 раз(а).

    гдето был готовый скетч , посмотрю вспомню и постараюсь помочь.

  • 62310 Passat B6 Club
    офлайн
    62310 Passat B6 Club

    1436

    18 лет на сайте
    пользователь #62310

    Профиль
    Написать сообщение

    1436
    # 6 сентября 2013 10:46

    И что ещё странно. Вот такой скетч - просто проброс температуры в сериал порт - без включения ETHERNET работает ТОЛЬКО на 10 пине. 11, 12, 13 выдают на сериал порт либо "0" либо "-127". Вот скетч:

    код выделить все

    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <Ethernet.h>
    #include <SPI.h>

    // Data-нога датчика (или датчиков) к 12 пину ардуины
    #define ONE_WIRE_BUS 10
    // настройка oneWire для работы с любыми другими OneWire девайсами (не только Maxim/Dallas датчиками температуры)
    OneWire oneWire(ONE_WIRE_BUS);
    // подключаем Dallas Temperature.
    DallasTemperature sensors(&oneWire);

    int incomingByte = 0; // for incoming serial data

    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    IPAddress ip(192,168,0, 222);
    EthernetServer server(80);
    int Relay = 4;

    void setup(void)
    {
    // start serial port
    Serial.begin(9600);
    // Start up the library
    sensors.begin();

    }

    void loop(void)
    {
    // вызов sensors.requestTemperatures() для сбора показаний
    // со всех датчиков на шине
    sensors.requestTemperatures(); // запрос показаний температуры
    Serial.print(sensors.getTempCByIndex(0)); // первый датчик
    Serial.print("\n");

    if (Serial.available() > 0)
    {
    incomingByte = Serial.read();
    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte);

    }

    if (incomingByte == 49)
    {
    digitalWrite(Relay, LOW);
    }
    if (incomingByte == 50)
    {
    digitalWrite(Relay, HIGH);
    }

    }

    ©
  • 62310 Passat B6 Club
    офлайн
    62310 Passat B6 Club

    1436

    18 лет на сайте
    пользователь #62310

    Профиль
    Написать сообщение

    1436
    # 6 сентября 2013 13:49

    ПО-БЕ-ДА!
    Но...Вопрос остался открытым. Температуру в браузер получаю - уже через 2-й пин. С 10-м, видимо, был конфликт в связке с ethernet. До конца не могу разобраться с библиотеками - DallasTemperature и OneWire. Везде разные и иногда вылетали ошибки отсутствия разных хэдер файлов. Нашёл решение и завелось. Но осадок остался. Где нормальные библиотеки взять? Проверенные.

    ©
  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9978

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9978
    # 6 сентября 2013 19:30

    у меня небыло с этим проблем

  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9978

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9978
    # 6 сентября 2013 22:53 Редактировалось Protez1999, 2 раз(а).


    спалил заводскую мигалку пришлось сделать на дуне
    вот код
    код выделить все
    int del=100;
    int del2=300;

    byte ledPR[4]=
    { 0, // анод 0
    1, // 1-
    0, // 2
    1, // 3-
    };

    int i =0;
    int v = 0;
    void setup() {
    Serial.begin(9600);
    }

    void loop() {
    i++;

    v++;
    if(v>2) v=0;
    {
    while(i<6){// digitalWrite(8,ledPR[i]);
    digitalWrite(4,ledPR[i]);
    delay(del);
    //delay(del2);
    i++;}
    ////////
    if(i>4) i=0;

    while(i<6){// digitalWrite(8,ledPR[i]);
    digitalWrite(3,ledPR[i]);
    delay(del);
    //delay(del2);
    i++;}}

    if(i>4) i=0;
    Serial.println(i);

    }

  • BIL_ Xbox Team
    офлайн
    BIL_ Xbox Team

    768

    19 лет на сайте
    пользователь #33264

    Профиль
    Написать сообщение

    768
    # 11 сентября 2013 19:00 Редактировалось BIL_, 1 раз.

    В Минске существует возможность изучения электроники, микропроцессорных систем на базе Ардуино и робототехники в целом - в Школе робототехники. Подробная информация на нашем сайте. Приходите. Будет интересно!

  • Teacher Куратор team
    офлайн
    Teacher Куратор team

    943

    18 лет на сайте
    пользователь #70457

    Профиль
    Написать сообщение

    943
    # 11 сентября 2013 19:26 Редактировалось Teacher, 1 раз.

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

  • Неизвестный кот Senior Member
    офлайн
    Неизвестный кот Senior Member

    697

    14 лет на сайте
    пользователь #231939

    Профиль

    697
    # 11 сентября 2013 19:38
    Teacher:

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

    Запросто! Часы реального времени+обвязка к релле и само релле...

    От снайпера не убежишь!