Ответить
  • ARTexpress Member
    офлайн
    ARTexpress Member

    289

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

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

    289
    # 13 октября 2017 16:41
    Benjamin_:

    В общем не осилил я написать скетч для бортовика своего. посему если кто может это сделать за твёрдую белорусскую валюту- в ЛС. Туда же и описание задачи скину.

    А можно, хотя бы в двух словах, но здесь?

  • Benjamin_ Senior Member
    офлайн
    Benjamin_ Senior Member

    1155

    13 лет на сайте
    пользователь #323890

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

    1155
    # 15 октября 2017 13:47
    ARTexpress:

    Benjamin_:

    В общем не осилил я написать скетч для бортовика своего. посему если кто может это сделать за твёрдую белорусскую валюту- в ЛС. Туда же и описание задачи скину.

    А можно, хотя бы в двух словах, но здесь?

    данные с датчиков (темп., давления, наклона) выводить на ТФТ . Жмём кнопку- данные одного датчика, ещё раз жмём- другого и т.д. И ГСМ модуль связать с датчиком наклона. Меняется уровень наклона- гсм звонит на мобилку. Как то так.

  • ARTexpress Member
    офлайн
    ARTexpress Member

    289

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

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

    289
    # 15 октября 2017 16:48 Редактировалось ARTexpress, 1 раз.
    Benjamin_:

    ARTexpress:

    Benjamin_:

    В общем не осилил я написать скетч для бортовика своего. посему если кто может это сделать за твёрдую белорусскую валюту- в ЛС. Туда же и описание задачи скину.

    А можно, хотя бы в двух словах, но здесь?

    данные с датчиков (темп., давления, наклона) выводить на ТФТ . Жмём кнопку- данные одного датчика, ещё раз жмём- другого и т.д. И ГСМ модуль связать с датчиком наклона. Меняется уровень наклона- гсм звонит на мобилку. Как то так.

    А что у вас не получилось? Может вам просто помочь дописать скетч?

  • Benjamin_ Senior Member
    офлайн
    Benjamin_ Senior Member

    1155

    13 лет на сайте
    пользователь #323890

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

    1155
    # 15 октября 2017 18:14
    ARTexpress:

    Benjamin_:

    ARTexpress:

    Benjamin_:

    В общем не осилил я написать скетч для бортовика своего. посему если кто может это сделать за твёрдую белорусскую валюту- в ЛС. Туда же и описание задачи скину.

    А можно, хотя бы в двух словах, но здесь?

    данные с датчиков (темп., давления, наклона) выводить на ТФТ . Жмём кнопку- данные одного датчика, ещё раз жмём- другого и т.д. И ГСМ модуль связать с датчиком наклона. Меняется уровень наклона- гсм звонит на мобилку. Как то так.

    А что у вас не получилось? Может вам просто помочь дописать скетч?

    ну последний мой крик о помощи остался без ответа, поэтому от безысходности решил кинуть затею самому писать. А не получается работа с прерываниями. Я пытался уже с помощью прерываний и диоды зажигать по кнопке, что бы как то понять принцип работы прерываний, но слабо выходило. Вот как то так.

  • Drosha Senior Member
    офлайн
    Drosha Senior Member

    1960

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

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

    1960
    # 15 октября 2017 18:39

    Benjamin_, скиньте пример вашего кода с прерываниями, может где то мелкий недочет... там же вроде ничего сложного нет

  • Benjamin_ Senior Member
    офлайн
    Benjamin_ Senior Member

    1155

    13 лет на сайте
    пользователь #323890

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

    1155
    # 15 октября 2017 18:59 Редактировалось Benjamin_, 3 раз(а).
    Drosha:

    Benjamin_, скиньте пример вашего кода с прерываниями, может где то мелкий недочет... там же вроде ничего сложного нет

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

    #include <Adafruit_GFX.h> // Core graphics library
    #include <Adafruit_ST7735.h> // Hardware-specific library
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <SPI.h>

    // Подключение ТФТ
    #define TFT_CS 10

    #define TFT_RST 8
    #define TFT_DC 9
    #define TFT_SCLK 13
    #define TFT_MOSI 11

    //Инициализируем дисплей
    Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

    // Параметры датчика DS18B
    // Устанавливаем пин 3 на DS18B20
    #define ONE_WIRE_BUS 3
    OneWire oneWire(ONE_WIRE_BUS);
    float tempMin = 999;
    float tempMax = 0;
    int barra = 0;
    int RegimCount = 0;
    int KNOPKA = 2;
    int flagKNOPKA = 0;
    char conta = 0;
    DallasTemperature sensors(&oneWire);
    DeviceAddress sensor1;

    // обработка таймера
    volatile bool timerKNOPKAOn; //переменная вкл/выкл таймера
    unsigned long int timerKNOPKALoop; //переменная для хранения значения таймера
    bool KNOPKAOn; //переменная для хранения состояния кнопки
    volatile unsigned long int timerKNOPKA; //переменная подсчета миллисекунд - значение таймера

    ISR (TIMER0_COMPA_vect) //функция, вызываемая таймером-счетчиком каждые 0,001 сек.
    {
    if(timerKNOPKAOn) //если включен миллисекудный таймер для REGIM
    timerKNOPKA++; //инкремент переменной таймера (+1)
    }

    void setup() {
    pinMode(KNOPKA, INPUT);
    Serial.begin(9600);
    sensors.begin();
    tft.initR(INITR_BLACKTAB); // You will need to do this in every sketch
    //attachInterrupt(KNOPKA, regim, RISING);

    /**** настройка прерывания по таймеру каждую 0,001 сек (вызов функции ISR (TIMER0_COMPA_vect)) ****/
    TCCR0A |= (1 << WGM01); //сброс при совпадении
    OCR0A = 0xF9; //начало отсчета до переполнения (249)
    TIMSK0 |= (1 << OCIE0A); //разрешить прерывание при совпадении с регистром А
    TCCR0B |= (1 << CS01) | (1 << CS00); //установить делитель частоты на 64
    sei(); //разрешить прерывания

    }
    void loop()
    {
    if(digitalRead(2) == 1 && KNOPKAOn == 0) //флаг работы таймера == 0
    {
    timerKNOPKAOn = 1000; // запустить таймер на 1 сек;
    KNOPKAOn == 1; //флаг работы таймера = 1;
    flagKNOPKA == 1; // флаг нажатия кнопки = 1;
    if(RegimCount != 2) //переменная-счетчик экранов !=
    {
    RegimCount++; //переменная-счетчик экранов++;
    }
    else
    RegimCount = 1; //переменная-счетчик экранов = 0
    }

    if(timerKNOPKALoop < 1000)
    {
    cli();
    timerKNOPKALoop = timerKNOPKA;
    sei();
    }
    else
    {
    KNOPKAOn = 0;
    timerKNOPKAOn = 0;
    timerKNOPKAOn = 0;
    }

    if(flagKNOPKA == 1 && RegimCount == 1)
    {
    flagKNOPKA == 0;
    regim1 (); //функция вывода экрана №1();
    }

    if(flagKNOPKA == 1 && RegimCount == 2)
    {
    flagKNOPKA == 0;
    regim2 (); //функция вывода экрана №1();
    }
    }

    void regim1(void)
    {
    //tft print function!
    tft.setTextColor(ST7735_YELLOW);
    tft.setRotation(3);
    tft.setTextSize(2);
    tft.setCursor(35, 10);
    tft.println(" TEMP = C");
    tft.setTextSize(1);
    tft.setCursor(131, 10);
    tft.println("O");
    termo();
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(0);
    tft.setCursor(19, 59);
    tft.print("50");
    tft.setTextSize(0);
    tft.setCursor(19, 106);
    tft.print("0");
    tft.setTextSize(0);
    tft.setCursor(19, 7);
    tft.print("100");
    tft.setTextSize(0);
    tft.setCursor(19, 82);
    tft.print("25");
    tft.setTextSize(0);
    tft.setCursor(19, 32);
    tft.print("75");
    tft.setTextColor(ST7735_BLUE);
    tft.setTextSize(2);
    tft.setCursor(10, 40);
    tft.print(" CUR");
    tft.setTextSize(2);
    tft.setCursor(20, 65);
    tft.print(" MIN");
    tft.setTextSize(2);
    tft.setCursor(20, 90);
    tft.print(" MAX");
    // Информация датчика темп.
    if (sensors.getAddress(sensor1, 0))
    {
    sensors.requestTemperatures();
    float tempC = sensors.getTempC(sensor1);
    // Atualiza temperaturas minima e maxima
    if (tempC < tempMin)
    {
    tempMin = tempC;
    }
    if (tempC > tempMax)
    {
    tempMax = tempC;
    }
    barra = (int)tempC;

    // Отображаем на ТФТ
    tft.setTextColor(ST7735_RED);
    apaga_linha(100, 40);
    tft.setTextSize(2);
    tft.setCursor(100, 40);
    tft.println(tempC, 1);
    //tft.print("C");

    tft.setTextColor(ST7735_GREEN);
    apaga_linha(100, 65);
    tft.setCursor(100, 65);
    tft.println(tempMin, 1);

    tft.setTextColor(ST7735_YELLOW);
    apaga_linha(100, 90);
    tft.setCursor(100, 90);
    tft.println(tempMax, 1);

    tft.setTextColor(ST7735_GREEN);
    tft.setTextSize(1);
    apaga_linha(99, 104);
    tft.setCursor(45, 110);
    tft.print(" SENSOR OK ");
    if (tempMin > 50)
    tempMin = 999;
    tft.fillRect(5, 12, 7, 99, ST7735_RED);
    tft.fillRect(5, 12, 7, 100 - barra, ST7735_BLACK);
    conta++;
    if (conta == 1)
    {
    tft.setTextSize(1);
    tft.setCursor(45, 110);
    tft.print(" |");
    }
    if (conta == 2)
    {
    tft.setTextSize(1);
    tft.setCursor(45, 110);
    tft.print(" /");
    }

    if (conta == 3)
    {
    tft.setTextSize(1);
    tft.setCursor(45, 110);
    tft.print(" -");
    }
    if (conta == 4)
    {
    tft.setTextSize(1);
    tft.setCursor(45, 110);
    tft.print(" \\");
    conta = 1;
    }
    }
    else (!sensors.getAddress(sensor1, 0));
    {
    tft.setTextColor(ST7735_RED);
    tft.setTextSize(1);
    apaga_linha(99, 104);
    tft.setCursor(45, 110);
    tft.print(" SENSOR ERRO ");
    tempMin = 999;
    tempMax = 0;
    }
    }

    void regim2(void)
    {
    tft.fillScreen(ST7735_BLACK);
    tft.setRotation(3);
    tft.setTextSize(2); // Определяем размер шрифта
    tft.setCursor(5, 60); // Устанавливаем курсор в левый верхний угол области вывода
    tft.setTextColor(ST7735_BLUE); // Определяем цвет вывода на дисплей
    tft.print("loading...");
    }

    void apaga_linha (int16_t x, int16_t y)
    {
    tft.fillRect(x, y, 50, 16, ST7735_BLACK);
    }
    void termo ()
    {
    tft.drawRect(4, 11, 9, 100, ST7735_WHITE);
    // tft.fillRect(5, 12, 7, barra, ST7735_YELLOW);
    tft.drawRect(40, 4, 119, 122, ST7735_MAGENTA);

    //Рисунок термометра
    tft.drawLine(14, 11, 17, 11, ST7735_WHITE); // LINHA DE 100
    tft.drawLine(13, 86, 16, 86, ST7735_WHITE); // LINHA DE 75
    tft.drawLine(13, 36, 16, 36, ST7735_WHITE); // LINHA DE 25
    tft.drawLine(13, 61, 16, 61, ST7735_WHITE); // LINHA DE 50
    tft.drawLine(14, 110, 16, 110, ST7735_WHITE); // LINHA DE 0
    tft.drawLine(13, 98, 14, 98, ST7735_WHITE); //
    tft.drawLine(13, 73, 14, 73, ST7735_WHITE); //
    tft.drawLine(13, 48, 14, 48, ST7735_WHITE); //
    tft.drawLine(13, 23, 14, 23, ST7735_WHITE); // L
    tft.drawCircle(8, 118, 8, ST7735_WHITE);
    tft.fillCircle(8, 118, 7, ST7735_RED);
    }

  • ARTexpress Member
    офлайн
    ARTexpress Member

    289

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

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

    289
    # 15 октября 2017 19:43

    Поясните еще раз, что вы ждете от прерываний?

  • Benjamin_ Senior Member
    офлайн
    Benjamin_ Senior Member

    1155

    13 лет на сайте
    пользователь #323890

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

    1155
    # 15 октября 2017 19:51
    ARTexpress:

    Поясните еще раз, что вы ждете от прерываний?

    https://forum.onliner.by/viewtopic.php?t=4683606&p=97097530#p97097530
    вот тут хорошо сформулировано то, что мне нужно от прерываний.

  • Drosha Senior Member
    офлайн
    Drosha Senior Member

    1960

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

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

    1960
    # 15 октября 2017 20:18

    Benjamin_, из того что сразу в глаза бросается

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

    if(digitalRead(2) == 1 &amp;&amp; KNOPKAOn == 0) //флаг работы таймера == 0
    {
    timerKNOPKAOn = 1000; // запустить таймер на 1 сек;
    KNOPKAOn == 1; //флаг работы таймера = 1;
    flagKNOPKA == 1; // флаг нажатия кнопки = 1;

    if(RegimCount != 2) //переменная-счетчик экранов !=
    {
    RegimCount++; //переменная-счетчик экранов++;
    } else {
    RegimCount = 1; //переменная-счетчик экранов = 0
    }

    }

    flagKNOPKA == 1; // флаг нажатия кнопки = 1; - это сравнение а не присваивание, дальше по коду тоже есть такое
    прерывание привязано к функции regim а такой функции в коде нет

  • ARTexpress Member
    офлайн
    ARTexpress Member

    289

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

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

    289
    # 15 октября 2017 20:20
    Benjamin_:

    ARTexpress:

    Поясните еще раз, что вы ждете от прерываний?

    https://forum.onliner.by/viewtopic.php?t=4683606&p=97097530#p97097530
    вот тут хорошо сформулировано то, что мне нужно от прерываний.

    Пробовали библиотеку TimerOne?
    Я пока не смотрел ваш код, но по вашей ссылке я видел совет отрисовывать экран в обработчике прерывания по таймеру. Не советую, не успеете, если только таймер на единицы секунд не настроите, но тогда смысла тем более нету.

    Еще раз, простите мне мою лень и нежелание выискивать ваши сообщения - повторите еще раз целиком, что вы хотите получить.

  • Drosha Senior Member
    офлайн
    Drosha Senior Member

    1960

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

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

    1960
    # 15 октября 2017 20:22

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

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

    int displayNum = 1;

    void regim() {
    displayNum = 3 - displayNum;
    renderDisplay(displayNum);
    }

    void renderDisplay(int number) {
    /**код отрисовки нужного экрана в зависимости от number*/
    }

  • Benjamin_ Senior Member
    офлайн
    Benjamin_ Senior Member

    1155

    13 лет на сайте
    пользователь #323890

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

    1155
    # 15 октября 2017 20:41 Редактировалось Benjamin_, 2 раз(а).
    ARTexpress:

    Benjamin_:

    ARTexpress:

    Поясните еще раз, что вы ждете от прерываний?

    https://forum.onliner.by/viewtopic.php?t=4683606&p=97097530#p97097530
    вот тут хорошо сформулировано то, что мне нужно от прерываний.

    Пробовали библиотеку TimerOne?
    Я пока не смотрел ваш код, но по вашей ссылке я видел совет отрисовывать экран в обработчике прерывания по таймеру. Не советую, не успеете, если только таймер на единицы секунд не настроите, но тогда смысла тем более нету.

    Еще раз, простите мне мою лень и нежелание выискивать ваши сообщения - повторите еще раз целиком, что вы хотите получить.

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

    Добавлено спустя 2 минуты 29 секунд

    Drosha, спасибо , попробую.

    По итогу всё стало налаживаться. Ушёл от прерываний и по рекоммендации начал использовать функцию millis (). Получилось loop сократить до 4-х строчек. Пока что всё гуд.

  • RadioKid Senior Member
    офлайн
    RadioKid Senior Member

    588

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

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

    588
    # 19 октября 2017 12:13 Редактировалось RadioKid, 2 раз(а).

    Всем привет, построил машину по этому видео:

    но что-то пошло не так, блютуз не работает, а машина ездит рывками по кругу сама :) В чем может быть проблема? У чувака на видео два аккума по 3.6V, а у меня 4 простых батарейки, может быть дело в питании?

    Ссылка на его проект: http://www.instructables.com/id/Smartphone-Controlled-Arduino-Rover/

  • SIO Паяльник & Отвертка TEAM
    офлайн
    SIO Паяльник & Отвертка TEAM

    4105

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

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

    4105
    # 19 октября 2017 13:57
    RadioKid:

    а у меня 4 простых батарейки, может быть дело в питании?

    Это не питание, что-то с подключением напутали или в проге косяк, либо блютуз.

    Добавлено спустя 1 минута 1 секунда

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

    Паяльник & Отвертка TEAM, MikroPascal for AVR http://forum.onliner.by/viewtopic.php?t=637523
  • Planer Senior Member
    офлайн
    Planer Senior Member

    1886

    20 лет на сайте
    пользователь #11364

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

    1886
    # 20 октября 2017 16:19

    если кому чего написать, подгребай https://baraholka.onliner.by/viewtopic.php?t=18051618

  • Benjamin_ Senior Member
    офлайн
    Benjamin_ Senior Member

    1155

    13 лет на сайте
    пользователь #323890

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

    1155
    # 23 октября 2017 23:02

    Кто нибудь калибровал датчик давления bmp 280 ? В инете много информации по bmp 180, но они ни разу не одинаково калибруются. Если кто знает как справиться с 280-м - откликнитесь плиз.

  • bonza2 Senior Member
    офлайн
    bonza2 Senior Member

    1003

    15 лет на сайте
    пользователь #132605

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

    1003
    # 24 октября 2017 08:38

    Benjamin_, пару лет юзаю bmp280, мне и заводской калибровки хватает. заметил глюк\баг, перед считыванием давления надо прочитать температуру.

    <p>карта РБ для garmin - сайт в профиле.</p>
  • Benjamin_ Senior Member
    офлайн
    Benjamin_ Senior Member

    1155

    13 лет на сайте
    пользователь #323890

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

    1155
    # 24 октября 2017 19:29
    bonza2:

    Benjamin_, пару лет юзаю bmp280, мне и заводской калибровки хватает. заметил глюк\баг, перед считыванием давления надо прочитать температуру.

    высота над уровнем моря отличается от гугловской на 40 пунктов. давление в среднем на 10-15. Глюков не заметил, но возникает вопрос: прав гугл или датчик? ибо в первом случае это не погрешность, а кривая работа датчика.

  • Snoop_Lion Neophyte Poster
    офлайн
    Snoop_Lion Neophyte Poster

    4

    8 лет на сайте
    пользователь #1857134

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

    4
    # 25 октября 2017 12:22

    Ребята такой вопрос,есть у меня светодиоды по 3вата,к ним драйвер 18-36v,можно ли их диммировать ардуино спомощью платки на irf520?

  • SIO Паяльник & Отвертка TEAM
    офлайн
    SIO Паяльник & Отвертка TEAM

    4105

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

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

    4105
    # 25 октября 2017 18:13
    Snoop_Lion:

    Ребята такой вопрос,есть у меня светодиоды по 3вата,к ним драйвер 18-36v,можно ли их диммировать ардуино спомощью платки на irf520?

    Можно.

    Паяльник & Отвертка TEAM, MikroPascal for AVR http://forum.onliner.by/viewtopic.php?t=637523