Помогите отредактировать код точечной сварки

Тема в разделе "Arduino & Shields", создана пользователем Andrei brest, 10 июл 2016.

  1. Andrei brest

    Andrei brest Нерд

  2. alex-prog

    alex-prog Гик

    В чём запутались?
     
  3. Andrei brest

    Andrei brest Нерд

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

    int led= 8; // подключаем светодиод
    int knopkaled = 10; // подключаеи кнопку

    void setup() {
    pinMode(led, OUTPUT); //настраиваем на выход
    pinMode(knopkaled, INPUT_PULLUP); // настраиваем на вход
    }


    void loop(){

    if (digitalRead(knopkaled) == LOW) {

    digitalWrite(led,LOW);
    delay(5000);
    }

    else {

    digitalWrite(led, HIGH);

    }

    }

    Реле с ниским запускам
     
  4. alex-prog

    alex-prog Гик

    Это у Вас работает:
    Код (C++):
    int led= 8; // подключаем светодиод
    int knopkaled = 10; // подключаеи кнопку

    void setup() {
    pinMode(led, OUTPUT); //настраиваем на выход
    pinMode(knopkaled, INPUT_PULLUP); // настраиваем на вход
    }


    void loop(){

    if (digitalRead(knopkaled) == LOW) {

    digitalWrite(led,LOW);
    delay(5000);
    }

    else {

    digitalWrite(led, HIGH);

    }

    }
    ?
     
  5. Andrei brest

    Andrei brest Нерд

  6. alex-prog

    alex-prog Гик

    Почему if (digitalRead(knopkaled) == LOW) ?

    В одном блоке:
    digitalWrite(led,LOW);
    delay(5000);

    в другом:
    digitalWrite(led, HIGH);
    Кже без delay?
     
  7. Andrei brest

    Andrei brest Нерд

    не знаю Почему if (digitalRead(knopkaled) == LOW) ?
    взял пример Button загрузил на реле горит красный и зеленый светодиод
    на кнопку не реагировал изменил на LOW заработала
    реле подключил Vcc к +
    GND к -
    IN на порт 8
    если IN подключить к GND произойдет переключение (с работка) с сылка на реле
    http://ru.aliexpress.com/item/1pcs-...2401517134.html?spm=2114.13010608.0.97.LIXpuS
     
  8. alex-prog

    alex-prog Гик

    Что в ДАННЫЙ момент Вы хотите добиться? Слишком много информации, напишите что сейчас нужно сделать...
     
  9. Andrei brest

    Andrei brest Нерд

    Tomasina
    скинул код

    #define DATA_PIN 13
    #define LATCH_PIN 12
    #define CLOCK_PIN 11
    #define RELAY 8 // пин выхода управляющего сигнала
    #define BUTTON_START 9 // кнопка запуска чего-то
    #define BUTTON_MODE 10 // кнопка переключения режимов, подключается между пином и GND
    enum {MODE_1, MODE_2, MODE_3, MODE_4, MODE_5, MODE_6, MODE_7, MODE_8, MODE_9, MODE_10, END};// названия режимов, последняя метка всегда END
    byte number[END]= {0b01000000, 0b01111001, 0b00100100, 0b00110000, 0b00011001, 0b00010010, 0b00000010, 0b01111000, 0b00000000, 0b00010000,};// сегменты индикатора
    byte currentMode; // текущий режим работы


    void setup()
    {
    pinMode(BUTTON_MODE, INPUT_PULLUP);
    pinMode(BUTTON_START, INPUT_PULLUP);
    pinMode(RELAY, OUTPUT);
    pinMode(LATCH_PIN,OUTPUT);
    pinMode(CLOCK_PIN,OUTPUT);
    pinMode(DATA_PIN,OUTPUT);
    currentMode = MODE_1;// режим по умолчанию (при включении питания)

    }


    void loop()
    {
    byte timeout; // переменная для хранения времени отключения

    if(!digitalRead(BUTTON_MODE))// нажата кнопка переключения режимов
    {
    currentMode++;// увеличиваем счетчик
    if(currentMode == END) currentMode = MODE_1;// зацикливаем счетчик

    // выводим на дисплей номер режима
    digitalWrite(LATCH_PIN, LOW);
    shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, number[currentMode]);
    digitalWrite(LATCH_PIN,HIGH);

    // управляем выходами по номеру режима
    switch(currentMode) // задаем параметры для каждого режима
    {
    case MODE_1: timeout =1;break;// ставим задержку в 1 сек
    case MODE_2: timeout =2;break;
    case MODE_3: timeout =4;break;
    case MODE_4: timeout =5;break;
    case MODE_5: timeout =10;break;
    case MODE_6: timeout =15;break;
    case MODE_7: timeout =20;break;
    case MODE_8: timeout =30;break;
    case MODE_9: timeout =60;break;
    case MODE_10: timeout =90;break;
    }
    delay (200); // защита от дребезга
    }

    if(!digitalRead(BUTTON_START))// принудительный запуск
    {
    digitalWrite(RELAY, HIGH);// подаем импульс
    delay(timeout *1000); // ждем n секунд
    digitalWrite(RELAY, LOW);
    // currentMode = MODE_1; // задаем режим 1 после срабатывания
    }
    }


    НЕ ХОЧЕТ РАБОТАТЬ РЕЛЕ
    РЕЖИМЫ ПЕРЕКЛЮЧАЮТСЯ
    НА РЕЛЕ ПОСТОЯННО СВЕТИТСЯ КРАСНЫЙ И ЗЕЛЕНЫЙ ДИОД
    ЕСЛИ ИЗМЕНИТЬ
    digitalWrite(RELAY, LOW);// подаем импульс
    delay(timeout *1000); // ждем n секунд
    digitalWrite(RELAY, HIGH);

    ТО РЕЛЕ СРАБАТЫВАЕТ И НЕ ВЫХОДИТ С СРАБОТКИ
     
  10. alex-prog

    alex-prog Гик

    Попробуйте после:
    delay(timeout *1000); // ждем n секунд
    digitalWrite(RELAY, HIGH);

    добавить:
    delay(timeout *1000); // ждем n секунд

    А то у Вас реле включается, ждет n секунд, отключается и снова включается. Задержки между отключением и включением у Вас нет...
     
    Последнее редактирование: 13 июл 2016
  11. Andrei brest

    Andrei brest Нерд

    ок завтра
     
  12. Andrei brest

    Andrei brest Нерд

    не чего не меняеться
     
  13. alex-prog

    alex-prog Гик

    Ну а код можно привести, который Вы исправили?

    Если есть желание дойти до истины, и реализовать задуманное, нужно конкретизировать проблему детально. Создаётся впечатление, что кто-то должен быть заинтересованным, и ещё вытягивать информацию: что у Вас не получилось, и какие коррективы Вы внесли...
     
  14. Andrei brest

    Andrei brest Нерд

    ДА простите буду исправляться
    на ваше предложение добавить

    Попробуйте после:
    delay(timeout *1000); // ждем n секунд
    digitalWrite(RELAY, HIGH);

    добавить:
    delay(timeout *1000); // ждем n секунд
    результатов нет все осталось как было
    РЕЛЕ СРАБАТЫВАЕТ И НЕ ВЫХОДИТ С СРАБОТКИ
     
  15. aleksis-76

    aleksis-76 Нерд

    if(!digitalRead(BUTTON_START))// принудительный запуск
    попробуйте так
    у вас реле я так понял включается 0
    сначала выключается,затем задежка,включение реле digitalWrite(RELAY, LOW);, затем программа очень быстро оказывается в строке
    digitalWrite(RELAY, HIGH);, реле размыкается не успев замкнуться
    это по поводу того что не работает вот это
    как я понял функция
    не подавляет дребезг
     
    Последнее редактирование: 14 июл 2016
  16. alex-prog

    alex-prog Гик

    Давай делить задачу на части:

    Если правильно понимаю, то идея при нажатии кнопки менять режимы, с 1 по n. Чем больше номер, тем больше задержка реле.

    Здесь нужно код из Вики, и что я Вам приводил немного переделать, и всё.

    Но, как я понимаю, у Вас реле ещё начинает себя странно вести? Тогда его нужно протестировать. Если с маркировкой реле разобрались правильно, и правильно подключаете управляющий сигнал, то если оно исправное - всё должно быть в порядке.

    К сожалению, у меня нет Вашего реле, если Вы можете прикрепить его фотографию или ссылку на него, будет гораздо проще понять, как заставить его правильно работать, если оно исправное, конечно ;)
     
  17. Andrei brest

    Andrei brest Нерд

    СПАСИБО за помощь я очень признателен ,,,,,,,

    реле подключил так
    реле подключил Vcc к +
    GND к -
    IN на порт 8
    если IN подключить к GND произойдет переключение (с работка) с сылка на реле
    http://ru.aliexpress.com/item/1pcs-...2401517134.html?spm=2114.13010608.0.97.LIXpuS
    хотел проверить работу на отдельном коде
    Взял пример Button загрузил и не работает
    изменил код

    int led=8;// подключаем реле
    int knopkaled =9;// подключаеи кнопку

    void setup(){
    pinMode(led, OUTPUT);//настраиваем навыход
    pinMode(knopkaled, INPUT_PULLUP);//настраиваем на вход
    }


    void loop(){

    if(digitalRead(knopkaled)== LOW){

    digitalWrite(led,LOW);
    delay(5000);
    }

    else{

    digitalWrite(led, HIGH);

    }

    }
    и заработала

    Да суть такая что кнопкой mode переключать режим работы
    кнопкой start запускать этот режим
    семисегментный диод отображает выброный режим
    при запуске режима реле должно включится и выключится по оконьчанию времени режима
    и должен остаться тотже режим который был до сработки
     
  18. alex-prog

    alex-prog Гик

    Ну, и в чём сейчас трудности возникают?

    Единственное замечание,
    Код (C++):
    if(digitalRead(knopkaled)== LOW){
    digitalWrite(led,LOW);
    delay(5000);
    }
    else{
    digitalWrite(led, HIGH);
    }
    я бы заменил на:
    Код (C++):
    if (digitalRead(knopkaled) == LOW){
    digitalWrite(led, LOW);
    delay(5000);
    digitalWrite(led, HIGH);
    }
    При таком варианте нажав на кнопку, будет выполнено включение реле на определенное время, а затем его отключение.

    И:
    не достаточно для 100% утверждения, что кнопка была нажата. Читайте про дребезг контактов, нужно паузу сделать, хотя бы на 10 мс, и потом опять проверить.
     
  19. aleksis-76

    aleksis-76 Нерд

    раз заработало отлично, поздравляю
    угу
    не подавляет дребезг, сделайте задежку и проверьте еще раз
    if(digitalRead(knopkaled)== LOW)
    {
    delay(10);
    i=true;
    }
    if((digitalRead(knopkaled)== LOW)&&(i==rtue))
    {
    //обработчик
    i=false;
    }
     
  20. alex-prog

    alex-prog Гик

    aleksis-76, можно же переменную не вводить:
    Код (C++):
    if (digitalRead(knopkaled) == LOW){
    //
    delay(10);
    //
    if (digitalRead(knopkaled) == LOW){
    //
    digitalWrite(led, LOW);
    //
    delay(5000);
    //
    digitalWrite(led, HIGH);
    }
    }