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

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем CasperSimfer, 7 дек 2014.

  1. ИгорьК

    ИгорьК Гуру

    А как же локальные static?
     
  2. DMS

    DMS Нерд

    Да этот тоже.
    Нагуглил что goto только внутри функции работает.
    Один вариант удалось скомпилировать, но по моему не так как надо работало, крутились оба скетча.
    Точно так и нужно.
    По памяти пока темный лес...
    Тренируюсь на кошках - первых попавшихся под руку скетчах.
     
  3. parovoZZ

    parovoZZ Гуру

    их либо нет, либо очень мало.

    снаружи функций вообще ничего не работает. Не только GoTo. Язык же Си.
     
  4. Asper Daffy

    Asper Daffy Иксперд

    А що? Що сталося?
    Видать, с сетевым фольклором у Вас не очень :)
     
    ИгорьК нравится это.
  5. Asper Daffy

    Asper Daffy Иксперд

    Правильные гото использовать надо :)

    Вам не вот это, случайно, надо? -- https://habr.com/ru/articles/841472/
     
    ИгорьК нравится это.
  6. ИгорьК

    ИгорьК Гуру

    Это кто как привык код выдумывать.

    Видимо. Благодаря вам я открыл Овечкина а затем Покровского.

    Что касается этой басни, то как-то не взяло, а в контекст этой темы не смог обернуть, честно говоря.
     
  7. Asper Daffy

    Asper Daffy Иксперд

    Думаю, Вы не знаете контекста. Выражение "грабить корованы" это сетевой мем, который используется, когда человек лезет в дела, которые несравнимо сложнее того, что он реально может сделать. Источник - пост на форуме, где человек предлагает сделать игру в которой, в частности, можно "грабить корованы" и говорит, что он такую игру "джва года ждёт", вот тут подробнее.

    Примеры применения мема:
    1. "Ну, за такую цену эта микросхема должна не только напряжение стабилизировать, а ещё и корованы грабить"
    2. (в ответ на хотелку нуба сделать всё и сразу) "Да, делайте, на здоровье. В следующей версии можно будет и о корованах подумать, но пока это чересчур"
    Т.е. по сути я сказал ТС, что эта задача ему не по зубам.
     
    Последнее редактирование: 8 ноя 2024
    ИгорьК и DetSimen нравится это.
  8. ИгорьК

    ИгорьК Гуру

    Действительно не знаю :) Спасибо :)
     
  9. Bott

    Bott Гик

    [​IMG]
     
  10. IURIJ

    IURIJ Нуб

    Прошу помощи в соединении 2 скетчев в один заранее благодарен

    Парковник с ЖК

    Код (C++):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C _lcd1(0x27, 20, 4);
    int _dispTempLength1=0;
    boolean _isNeedClearDisp1;

    int _ultrasonic1O = 0;
    unsigned long _ultrasonic1P = 0UL;
    int _disp1oldLength = 0;
    int _disp3oldLength = 0;
    int _ultrasonic2O = 0;
    unsigned long _ultrasonic2P = 0UL;

    void setup()
    {

    Wire.begin();
    delay(10);
    _lcd1.init();
    _lcd1.backlight();
    pinMode(2, OUTPUT);
    pinMode(3, INPUT);
    pinMode(11, OUTPUT);
    pinMode(12, INPUT);

    }
    void loop()
    {

    if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}





    //Плата:1
    if (abs((millis() - _ultrasonic1P))>100) {
    digitalWrite(11, HIGH);
    delayMicroseconds(10);
    digitalWrite(11, LOW);
    int _ultrasonicTemp=(pulseIn(12, HIGH))/58;
    if( _ultrasonicTemp<4000) {_ultrasonic1O=_ultrasonicTemp;}
    _ultrasonic1P=millis();}
    if (1) {
    _dispTempLength1 = (((String((_ultrasonic1O), DEC)))).length();
    if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
    _disp3oldLength = _dispTempLength1;
    _lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
    _lcd1.print(((String((_ultrasonic1O), DEC))));
    } else {
    if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;}
    }
    if (abs((millis() - _ultrasonic2P))>100) {
    digitalWrite(4, HIGH);
    delayMicroseconds(10);
    digitalWrite(4, LOW);
    int _ultrasonicTemp=(pulseIn(5, HIGH))/58;
    if( _ultrasonicTemp<4000) {_ultrasonic2O=_ultrasonicTemp;}
    _ultrasonic2P=millis();}
    if (1) {
    _dispTempLength1 = (((String((_ultrasonic2O), DEC)))).length();
    if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
    _disp1oldLength = _dispTempLength1;
    _lcd1.setCursor(int((20 - _dispTempLength1)/2), 2);
    _lcd1.print(((String((_ultrasonic2O), DEC))));
    } else {
    if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
    }






    }


    -----------------------------------------------------------------------------------------------------------------------------------
    Парковник  с светодиодом

    / Пины для HC-SR04
    const int trigPin = 3;
    const int echoPin = 2;

    // Пины для RGB светодиода
    const int redPin = 4;
    const int greenPin = 5;
    const int bluePin = 6;

    // Пин для пьезо-пищалки
    const int buzzerPin = 8;

    // Переменные для хранения времени и расстояния
    long duration;
    int distance;

    void setup() {
      // Настройка пинов для HC-SR04
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);

      // Настройка пинов для RGB светодиода
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);

      // Настройка пина для пьезо-пищалки
      pinMode(buzzerPin, OUTPUT);
    }

    void loop() {
      // Генерация ультразвукового импульса
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);

      // Чтение импульса Echo и расчет расстояния
      duration = pulseIn(echoPin, HIGH);
      distance = duration * 0.034 / 2;  // Расчет расстояния в сантиметрах

      // Логика изменения цвета RGB светодиода и звуковых сигналов
      if (distance > 100) {
        // Если препятствий нет (дальше 100 см) — синий цвет, звук выключен
        setColor(255, 0, 0);  // Синий
        noTone(buzzerPin);    // Отключаем звук
      } else if (distance > 50 && distance <= 100) {
        // Препятствие далеко (50–100 см) — зеленый цвет, один короткий сигнал
        setColor(0, 255, 0);  // Зеленый
        playBeep(1);
      } else if (distance > 30 && distance <= 50) {
        // Препятствие приближается (30–50 см) — желтый цвет, два коротких сигнала
        setColor(0, 200, 200);  // Желтый
        playBeep(2);
      } else if (distance > 20 && distance <= 30) {
        // Препятствие близко (20–30 см) — оранжевый цвет, три коротких сигнала
        setColor(0, 100, 255);  // Оранжевый
        playBeep(3);
      } else if (distance <= 15) {
        // Препятствие очень близко (меньше 15 см) — красный цвет, постоянный звук
        setColor(0, 0, 255);  // Красный
        tone(buzzerPin, 1000);  // Постоянный звук
      }

      delay(500);  // Задержка перед следующим измерением
    }

    // Функция установки цвета на RGB светодиоде
    void setColor(int red, int green, int blue) {
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);
    }

    // Функция для проигрывания звуковых сигналов
    void playBeep(int count) {
      for (int i = 0; i < count; i++) {
        tone(buzzerPin, 1000);   // Включаем звук с частотой 1000 Гц
        delay(100);              // Задержка для короткого сигнала
        noTone(buzzerPin);       // Отключаем звук
        delay(100);              // Задержка между сигналами
      }
    }
     
  11. Asper Daffy

    Asper Daffy Иксперд

    Какая именно помощь нужна?
    1. Пожелать удачи?
    2. Сделать за тебя?
    3. Помолиться, чтобы всё получилось*
    4. Ешё варианты?
     
  12. IURIJ

    IURIJ Нуб

    Я просто не разбираюсь в скетчах. Я вроде объединил но вместе программа не хочет работать так что понимаю что наглею но объединить сам не смогу.
     
  13. IURIJ

    IURIJ Нуб

    Код (C++):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C _lcd1(0x27, 20, 4);
    int _dispTempLength1=0;
    boolean _isNeedClearDisp1;

    int _ultrasonic1O = 0;
    unsigned long _ultrasonic1P = 0UL;
    int _disp1oldLength = 0;
    int _disp3oldLength = 0;
    int _ultrasonic2O = 0;
    unsigned long _ultrasonic2P = 0UL;

    // Пины для RGB светодиода
    const int redPin = 4;
    const int greenPin = 5;
    const int bluePin = 6;

    // Пин для пьезо-пищалки
    const int buzzerPin = 8;

    // Переменные для хранения времени и расстояния
    long duration;
    int distance;

    void setup()
    {
       // Настройка пинов для RGB светодиода
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);

      // Настройка пина для пьезо-пищалки
      pinMode(buzzerPin, OUTPUT);

    Wire.begin();
    delay(10);
    _lcd1.init();
    _lcd1.backlight();
    pinMode(2, OUTPUT);
    pinMode(3, INPUT);
    pinMode(11, OUTPUT);
    pinMode(12, INPUT);

    }
    void loop()
    {

    if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}





    //Плата:1
    if (abs((millis() - _ultrasonic1P))>100) {
    digitalWrite(11, HIGH);
    delayMicroseconds(10);
    digitalWrite(11, LOW);
    int _ultrasonicTemp=(pulseIn(12, HIGH))/58;
    if( _ultrasonicTemp<4000) {_ultrasonic1O=_ultrasonicTemp;}
    _ultrasonic1P=millis();}
    if (1) {
    _dispTempLength1 = (((String((_ultrasonic1O), DEC)))).length();
    if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
    _disp3oldLength = _dispTempLength1;
    _lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
    _lcd1.print(((String((_ultrasonic1O), DEC))));
    } else {
    if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;}
    }
    if (abs((millis() - _ultrasonic2P))>100) {
    digitalWrite(4, HIGH);
    delayMicroseconds(10);
    digitalWrite(4, LOW);
    int _ultrasonicTemp=(pulseIn(5, HIGH))/58;
    if( _ultrasonicTemp<4000) {_ultrasonic2O=_ultrasonicTemp;}
    _ultrasonic2P=millis();}
    if (1) {
    _dispTempLength1 = (((String((_ultrasonic2O), DEC)))).length();
    if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
    _disp1oldLength = _dispTempLength1;
    _lcd1.setCursor(int((20 - _dispTempLength1)/2), 2);
    _lcd1.print(((String((_ultrasonic2O), DEC))));
    } else {
    if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
    }






      // Логика изменения цвета RGB светодиода и звуковых сигналов
      if (distance > 100) {
        // Если препятствий нет (дальше 100 см) — синий цвет, звук выключен
        setColor(255, 0, 0);  // Синий
        noTone(buzzerPin);    // Отключаем звук
      } else if (distance > 50 && distance <= 100) {
        // Препятствие далеко (50–100 см) — зеленый цвет, один короткий сигнал
        setColor(0, 255, 0);  // Зеленый
        playBeep(1);
      } else if (distance > 30 && distance <= 50) {
        // Препятствие приближается (30–50 см) — желтый цвет, два коротких сигнала
        setColor(0, 200, 200);  // Желтый
        playBeep(2);
      } else if (distance > 20 && distance <= 30) {
        // Препятствие близко (20–30 см) — оранжевый цвет, три коротких сигнала
        setColor(0, 100, 255);  // Оранжевый
        playBeep(3);
      } else if (distance <= 15) {
        // Препятствие очень близко (меньше 15 см) — красный цвет, постоянный звук
        setColor(0, 0, 255);  // Красный
        tone(buzzerPin, 1000);  // Постоянный звук
      }

      delay(500);  // Задержка перед следующим измерением
    }

    // Функция установки цвета на RGB светодиоде
    void setColor(int red, int green, int blue) {
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);
    }

    // Функция для проигрывания звуковых сигналов
    void playBeep(int count) {
      for (int i = 0; i < count; i++) {
        tone(buzzerPin, 1000);   // Включаем звук с частотой 1000 Гц
        delay(100);              // Задержка для короткого сигнала
        noTone(buzzerPin);       // Отключаем звук
        delay(100);              // Задержка между сигналами
      }
    }
     
    Вот объединенный скет он загружается но вместе не работает
     
  14. Asper Daffy

    Asper Daffy Иксперд

    Прости, ты не заметил, что ты забыл сказать, что этот код, по твоей задумке, должен делать? Ты думаешь, что все это и сами знают? Таки нет. Не знают.

    Чтобы рассчитывать хоть на что-то, ты должен:

    1. внятно объяснить чего ты хочешь достичь;
    2. внятно объяснить чего удалось достичь;
    3. внятно объяснить, чем №2 отличается от №1;
    4. наконец, чётко ответить на мой вопрос: "Какая именно помощь тебе нужна?".
    Пока у тебя нет ничего из перечисленного.
     
    DetSimen и Airbus нравится это.
  15. Airbus

    Airbus Радиохулиган Модератор

    Вот именно! Вчера тоже смотрел этот скетч. Предположил что это видимо Парктроник? Или нет? Код работает точно так как написан. А вот что он именно должен делать и что не делает—непонятно. С точки зрения синтаксиса—ошибок нет. Вы или пишите коментарии—так и Вам и нам будет легче разобраться или да как Вам уже сказали п.1—п.3
     
  16. IURIJ

    IURIJ Нуб

    Да это парковник на 2 датчика расстояния с LDC экраном. Что он должен делать измерять дистанцию до препятствия показывая расстояние на дисплее с двух датчиков и предупреждать как звуковым сигналом разной тональностью так и световым разными цветами. На данный момент на этом скетчи на дисплее показания только с одного датчика, горит один цвет светодиода и не прерывный сигнал пищалки.
     
  17. Asper Daffy

    Asper Daffy Иксперд

    Понятно. Ну, хозяин - барин, на нет и суда нет.
     
    DetSimen нравится это.
  18. parovoZZ

    parovoZZ Гуру

    Не мучай себя. Всё уже есть.
    upload_2025-1-13_16-2-43.png

    По цене дурины, только не надо изобретать изобретённое.
     
    DetSimen и Bott нравится это.
  19. Bott

    Bott Гик