Страница 8 из 18 ПерваяПервая ... 234567891011121314 ... ПоследняяПоследняя
Показано с 71 по 80 из 178
  1. #71
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    136

    По умолчанию Re: Бортовой компьютер мотоцикла

    Сегодня убил пол дня на освоение OLED дисплея, проблема заключалась в обновлении дисплея... если при обновлении каждый раз делать reset функцией из библиотеки - то он начинал противно мигать.
    Спустя некоторые время, присмотрелся к стандартному примеру, оказалось на пример, что бы после цифры 1 написать 2, перед выводом 2, "печатаем" на дисплее 1 в черном цвете.

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

    http://youtu.be/smmmO8h7gsM

    PHP код:
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h> 
    #include <Adafruit_SSD1306.h> 


    Adafruit_SSD1306 display(4); //OLED_RESET

    #define LINE 20 // отступ линии от левого края
    #define W_PRBAR 15 // ширина элемента прогресс бара

    static const unsigned char PROGMEM logo16_glcd_bmp[] =
    B11111111B11111111,
      
    B11111111B11111111,
      
    B11111111B11111111,
      
    B11111111B11111111,
      
    B11111111B11111111,
      
    B11111111B11111111,
      
    B11111111B11111111,
      
    B11111111B11111111,
      
    B11111111B11111111,  
      
    B11111111B11111111,};

    int temp[3];

    void setup(){           
      
    display.begin(SSD1306_SWITCHCAPVCC0x3C); 
      
    display.clearDisplay(); // Очистить буфер.
      
    display.setTextColor(WHITE); // Цвет текста.
      
    _display_add_fuel(70);
      
    display.display();
    }

    void loop() {
     
    _display_add_temp(random(-4045));
     
    _display_add_gear(random(05));
     
    _display_add_fuel(random(070)); 
     
    delay(2000);
    }

    int _display_add_fuel(int a){ //,display.height()display.width()

      
    if (temp[0]){
        for (
    int f=0faf+=5) {
        
    display.drawBitmap(display.width() - W_PRBARlogo16_glcd_bmpW_PRBAR4BLACK);
       
    display.display();
      }
      }
      
      for (
    int f=0faf+=5) {
      
    display.drawBitmap(display.width() - W_PRBARdisplay.height() - logo16_glcd_bmpW_PRBAR4WHITE);
      }
      
    display.drawLine(display.width() - LINEdisplay.height(),display.width() - LINE 0WHITE); // линия
      
    display.display();
      
    temp[0] = a;
     
    }

    int _display_add_temp(int b){
      
    display.setTextSize(2);
      
    display.setTextColor(BLACK);
      
    display.setCursor(50,0);
      
    display.println(temp[1]);  
      
    display.display();
      
    display.setTextColor(WHITE);
      
    display.setCursor(50,0);
      
    display.println(b);
      
    temp[1] = b;
      
    display.display();
    }

    int _display_add_gear(int c){
      
    display.setTextSize(8);
      
    display.setTextColor(BLACK);
      
    display.setCursor(0,0);
      
    display.println(temp[2]);
      
    display.display();
      
    display.setTextColor(WHITE);
      
    display.setCursor(0,0);
      
    display.println(c);
      
    temp[2] = c;
      
    display.display();  

    Последний раз редактировалось Oleg_33; 02.02.2015 в 00:14.

  2. #72
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    136

    По умолчанию Re: Бортовой компьютер мотоцикла

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

    http://youtu.be/qSfM5BxvRUM

  3. #73
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    136

    По умолчанию Re: Бортовой компьютер мотоцикла

    Вчера прицепил RTC модуль реального времени на базе DS1307, собственно пытался уже давно но ничего не получалось ... вначале была проблема связи модуля с ардуиной, дата и время были премерно следующие "2165/165/165 165:165:85", потом таймер каждый раз начинался заново при отключении питания, ну и в заключении долго пытался найти как синхронизировать время.

    Видео- http://youtu.be/reKBAI_8LaI

    В начале обязательно подтягиваем шину I2С к +5В через резисторы 10к, даже если устройство на шине одно, без резисторов работать не будет.

    Библиотеки из примера http://zelectro.cc/Media/Default/%D0...%8B/RTClib.zip
    http://zelectro.cc/Media/Default/%D0...D1%8B/Time.zip
    Заливаем в ардуино скетч:
    PHP код:
    #include <Wire.h>
    #include "RTClib.h"
    #include <Time.h>

    RTC_DS1307 RTC;

    void setup () {
        
    Serial.begin(9600);
        
    Wire.begin();
        
    RTC.begin();
    }

    void loop () {
        
    time_t curTime 0;
        
    // На Serial поступит время в формате unixtime
        
    if (Serial.available() > 0)
        {
          
    int eps millis();
          
    time_t coef 1000000000;
          while (
    coef 0)
          {
             
    byte b Serial.read();
             if (
    == 255)
             {
                continue; 
             }
             
    curTime += coef*(b-'0');
             
    coef /= 10;
          }
          
    // Устанавливаем считанное по байтам время в RTC
          
    RTC.adjust(curTime + (millis()-eps)/1000);
        }

    Открываем окно терминала, далее переходим по ссылке http://www.bl2.ru/programing/timestamp.html, быстро копируем Текущее Unix время,например: 1423495561, и так же быстро вставляем текст в окно терминала комбинацией клавиш Ctrl + v, нажимаем отправить! Всё! время выставлено, проверяем:

    PHP код:
    #include <Wire.h>
    #include "RTClib.h"

    RTC_DS1307 RTC;

    void setup () {
        
    Serial.begin(9600);
        
    Wire.begin();
        
    RTC.begin();
    }

    void loop () {
        
    // Определяем время
        
    DateTime now RTC.now();
        
        
    // Выводим время в монитор порта
        
    Serial.print(now.year(), DEC);
        
    Serial.print('/');
        
    Serial.print(now.month(), DEC);
        
    Serial.print('/');
        
    Serial.print(now.day(), DEC);
        
    Serial.print(' ');
        
    Serial.print(now.hour(), DEC);
        
    Serial.print(':');
        
    Serial.print(now.minute(), DEC);
        
    Serial.print(':');
        
    Serial.print(now.second(), DEC);
        
    Serial.println();
     
        
    delay(1000);

    Последний раз редактировалось Oleg_33; 11.02.2015 в 21:08.

  4. #74
    Новичок
    Регистрация
    15.03.2014
    Сообщений
    17
    Вес репутации
    129

    По умолчанию Re: Бортовой компьютер мотоцикла

    Oleg_33, у ds1302 (SPI) и ds1307 (I2C) с точностью хода зачастую проблемы. Будь готов подводить часы на 5-10сек каждый день. В идеале лучше использовать DS3231.
    Думал также готовый модуль использовать, потом посмотрел по обвязке и решил отдельно прикупить микруху и осциллятор, чтобы распаять самому и сэкономить место.

  5. #75
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    136

    По умолчанию Re: Бортовой компьютер мотоцикла

    да да я зметил модуль врёт, за 3 дня убежал секунд на 30 ... я ведь хотел DS3231 сразу заказать, но что то меня остановило

  6. #76
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    136

    По умолчанию Re: Бортовой компьютер мотоцикла

    Где то читал, что можно analogRead, digitalWrite ... заменить на код прямого доступа, тем самым с экономить память и увеличить быстродействие, где можно прочитать про это ?
    Я к чему веду, библиотека дисплея, меню и прочая ерунда =) сожрала 70% памяти ... а ещё нужно кое что добавить, вот сижу оптимизирую код, убираю лишние функции, операторы ...

  7. #77
    Новичок
    Регистрация
    15.03.2014
    Сообщений
    17
    Вес репутации
    129

    По умолчанию Re: Бортовой компьютер мотоцикла

    Oleg_33, да, можно заменить. Почитать можно здесь (один из самых популярных манов, но мне не сильно понравилось).
    Я бы не рекомендовал заниматься оптимизацией, когда еще надобности не возникло. Разумеется когда подключаешь библиотеки, память будет отжираться и казаться, что вот-вот она кончится.
    Однако забить все 30Кб (2Кб отожрет загрузчик Arduino) на atmega328 сложновато, если не подключать все подряд.

    Самый простой вариант сократить объем занимаемой памяти - выкинуть неиспользуемый код из библиотек, удалив его или окружив комментариями.
    Свой код можно особо не оптимизировать - даже 10Кб своего кода - это весьма много текста. Лучше постараться избежать г0внокода, когда заглянув через месяц в свой файл, не поймешь чего имел в виду.
    По быстродействию я бы сильно также не парился - это не то место, где оно нужно. Имхо достаточно просто delay и совсем идиотские конструкции не использовать и всё.

    Я думаю стоит прислушаться к мнению автора серии книг "Искусство программирования"
    Преждевременная оптимизация — корень всех (или большинства) проблем в программировании.
    Последний раз редактировалось Aikon; 13.02.2015 в 04:56.

  8. #78
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    136

    По умолчанию Re: Бортовой компьютер мотоцикла

    Всё таки не соглашусь, почему бы и не оптимизировать если код станет меньше (возможно сложнее в понимании - насчёт этого вообще не парюсь, всегда можно прикоментировать разъяснительные аннотации )

    С библиотеками все не просто, например убрав часть кода с инициализации SPI интерфейса и поддержки дисплея меньшего размера ... в Adafruit_SSD1306, удалось увеличить память на 5%, а вот из библиотеки MFRC522 какие бы функции я не убирал размер не меняется , получается компилятор сам берёт на себя эту функцию.

  9. #79
    Новичок
    Регистрация
    15.03.2014
    Сообщений
    17
    Вес репутации
    129

    По умолчанию Re: Бортовой компьютер мотоцикла

    Oleg_33, разумеется компилятор что-то выкидывает, но он также не всемогущ.

    По мне писать кучу комментариев, если это не обучающий код, - дурной тон. В идеале код должен вообще не содержать комментариев, т.е. быть само-документированным.
    В твоем случае, я бы, например, создал наследника класса Adafruit_SSD1306 (аналогично с ds1307, но там можно и просто либу поправить под нужны), добавил ему методы init(), temperature(val), gear(val) и прочие.
    Тогда main будет проще читать и поддерживать.

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

    Пример инициализации портов для attiny13 (аля pinMode(..., INPUT))
    Код:
    	ADCSRA |= (1<<ADPS2)|(1<<ADPS1);
    	ADCSRA |= (1<<ADEN); 
    	DDRB |= (1<<PB3);
    	PORTB &= ~(1<<PB3);
    	
    	DDRB |= (1<<PB0);
    	panel.mux = 2;
    	panel.muxgnd = 3;
    	panel.port = &PORTB;
    	panel.portmask = (1<<PB4);
    
    	PORTB |= (1<<PB0);
    Поддерживать такое можно только постоянно занимаясь программированием под МК и потому помня какие константы и где используются.
    Для тех, у кого МК хобби, т.е. большинство владельцев Arduino, такой код лучше избегать, поскольку уже через месяц не вспомнишь что он делает.
    Последний раз редактировалось Aikon; 15.02.2015 в 18:15.

  10. #80
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    136

    По умолчанию Re: Бортовой компьютер мотоцикла

    Ладно по экспериментирую потом с портами, вот такая структура получается, дальше пока не могу писать, тк нет полной обвязки от ардуино.

    Осторожно много букф

    PHP код:
    #include <MFRC522.h>
    #include <OneWire.h>
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h> 
    #include <Adafruit_SSD1306.h> 
    #include "RTClib.h"
    #include <TimerOne.h> 
    #include <EEPROM.h>

    #define INTERRUPT__INT 0                       // 0 Внешнее прерывание
    //#define Spare                                // 1
    #define TEMP_DS18B20__DIGITAL_PIN 2            // 2 Цифровой датчик температуры
    //#define Scl                                  // 3
    #define GEAR_NEITRAL__DIGITAL_PIN 10           // 4 Минус при включении нейтрали
    #define FAN_CONTROL_RUN__DIGITAL_PIN 5         // 5 Минус при включении вентилятора
    #define FUELPOMP_CONTROL_RUN__DIGITAL_PIN 6    // 6 Минус при включении насоса
    //#define Spare                                // 7
    //#define Spare                                // 8
    #define RST_PIN 9                              // 9 RFID
    #define SS_PIN 10                              // 10 RFID
    #define FUELPOMP_RELAY__DIGITAL_PIN 11         // 11 Включение реле топливного насоса
    #define FAN_RELAY__DIGITAL_PIN 12              // 12 Включение реле вентилятора охлаждения
    #define LED_ERROR__DIGITAL_PIN 13              // 13 Светодиод неисправности

    #define FUEL_LEVEL__ANALOG_PIN 0               // 0 Датчик уровня топлива
    #define TEMP_RESISTOR__ANALOG_PIN 1            // 1 Датчик температуры охлаждающей жидкости
    //#define Spare                                // 2
    //#define Spare                                // 3
    #define GEAR_SWITCH__ANALOG_PIN 4              // 4 Номер передачи
    #define IGN_ON__ANALOG_PIN 5                   // 5 Плюс при включении зажигания

    //FAN ==========================================================================================================

    // Глобальные переменные
    int RELAY_CURENT// Текущее состояние реле
    int TEMP_CURENT_ANALOG// Показания с АЦП 
    byte flag_FAN_CYRENT 0;

    // Константы 
    #define   LOW_COLING_FAN 2
    #define  HIGH_COLING_FAN 3
    #define ERROR_COLING_FAN 4

    //_Timer()
    int Timer LOW;
    unsigned long currentTime;
    unsigned long loopTime;

    int TEMP_ARRAY_FAN[4] = {88,110,12025}; // напряжение [отключение, включение, перегрев, по температуре окр. воздуха]

    //SVITCH GEAR====================================================================================================

    // Константы
    #define UP_GEAR 300 // Делитель напряжения GEAR_SWITCH__ANALOG_PIN
    #define DOWN_GEAR 550 // Делитель напряжения GEAR_SWITCH__ANALOG_PIN

    // Глобальные переменные
    int GEAR_CURENT;

    //
    int gearneital;
    int ug;
    boolean flag_gearH falseflag_gearL false;

    //OUT_TEMP=======================================================================================================

    OneWire  ds(TEMP_DS18B20__DIGITAL_PIN);

    // Глобальные переменные
    int OUT_TEMP_CORECTION 10// 0 - 20
    int OUT_TEMP_CURENT =+ (OUT_TEMP_CORECTION 10);

    //DS1307 RTC =======================================================================================================
    RTC_DS1307 RTC;

    char ch_time[11]; 
    int time_one 70timer_go;

    //RFID=======================================================================================================

    // Константы 

    MFRC522 mfrc522(SS_PINRST_PIN); // Create MFRC522 instance.

    // Глобальные переменные
    unsigned long KEY1 2910087621;
    unsigned long KEY2 4124219933;
    unsigned long uidDecuidDecTemp;  // Для отображения номера карточки в десятичном формате.
    int KEY_OK;


    //OLED Display=======================================================================================================

    Adafruit_SSD1306 display(4); //OLED_RESET
    #define LINE 20 // отступ линии от левого края
    #define W_PRBAR 15 // ширина элемента прогресс бара

    static const unsigned char PROGMEM logo16_glcd_bmp[] = 
    {
    B11111111B11111111
    B11111111B11111111,
    B11111111B11111111,
    B11111111B11111111,
    B11111111B11111111};

    // Константы 
    #define M_SERVIS 1
      #define SUB_TO2 10
      #define SUB_TO3 11
      #define SUB_OIL 12
      #define SUB_CHAIN 13
      
    #define M_OPTION_FAN 2
      #define SUB_ERROR 21
      #define SUB_SET_TEMP 22
      #define SUB_T_OUT 23
      #define SUB_FAN_OFF 24
      
    #define M_FAN 3
      #define SUB_STATUS 30
      #define SUB_AKTIV 31
      #define SUB_CORECT_OUT 32 
      #define SUB_CORECT_ENGIN 33
      
    #define M_SPEED 4
      #define SUB_CORECT 40
      #define SUB_SPEED 41

    #define M_ERROR1 5
    #define M_RROR2 6

    #define MAIN_MENU_MAIN 111
    #define MAIN_MENU_ERROR 222
    #define MAIN_MENU_TAIM 333
    #define MAIN_MENU_KEY 444


    int servis_Limit[4] = {12000600030001000};

    //_______________________________________________________________________________________________________________


    void setup()
    {
      
    //Serial.begin(9600); 
    /*  
      pinMode(FAN_RELAY__DIGITAL_PIN, OUTPUT);
      pinMode(GEAR_NEITRAL__DIGITAL_PIN, INPUT);  
      digitalWrite(GEAR_NEITRAL__DIGITAL_PIN, HIGH);

    attachInterrupt(INTERRUPT__INT, blnk, FALLING);            // 0 Внешнее прерывание
    pinMode(GEAR_NEITRAL__DIGITAL_PIN, INPUT);                 // 4 Минус при включении нейтрали
      digitalWrite(GEAR_NEITRAL__DIGITAL_PIN, HIGH);
    pinMode(FAN_CONTROL_RUN__DIGITAL_PIN, INPUT);              // 5 Минус при включении вентилятора
      digitalWrite(FAN_CONTROL_RUN__DIGITAL_PIN, HIGH);
    pinMode(FUELPOMP_CONTROL_RUN__DIGITAL_PIN, INPUT);         // 6 Минус при включении насоса
      digitalWrite(FUELPOMP_CONTROL_RUN__DIGITAL_PIN, HIGH);
    pinMode(FUELPOMP_RELAY__DIGITAL_PIN, OUTPUT);              // 11 Включение реле топливного насоса
    pinMode(FAN_RELAY__DIGITAL_PIN, OUTPUT);                   // 12 Включение реле вентилятора охлаждения
    pinMode(LED_ERROR__DIGITAL_PIN, OUTPUT);                   // 13 Светодиод неисправности
    */

     
    Wire.begin();
     
    display.begin(SSD1306_SWITCHCAPVCC0x3C); 
     
    display.setTextColor(WHITE); 
     
    SPI.begin();   
     
    mfrc522.PCD_Init(); // Init MFRC522 card  
     
    RTC.begin(); 

     
    display.clearDisplay();
     
    _DispleyAddMenu(MAIN_MENU_KEY,0); // Надпись на дисплее "KEY ?"
     
    display.display();
    }
     
    void loop()
    {
      if (
    _Timer(1005000) == 10// Считываем температуру каждые 5 сек
      
    {
        
    TEMP_CURENT_ANALOG analogRead(TEMP_RESISTOR__ANALOG_PIN); // Температуру двигателя
        
    _Out_Temp();  // Температуру наружного воздуха
      
    }
      
    _TempMonitoring(TEMP_CURENT_ANALOG);
      
    _Gear_Switch_Neutral();



      
    DateTime now RTC.now();// Определяем время
      
    if (time_one == 70)  time_one now.second() - 2;
      if (
    now.second() > time_one){timer_go now.second() - time_one;}
      else {
    timer_go ++;}
      
    sprintf (ch_time,"%02i:%02i:%02i",now.hour(),now.minute(), timer_go);

      if (
    KEY_OK == 0){
        
    unsigned long tk _ReadKeyRFID();
        if (
    tk == KEY1 || tk == KEY2KEY_OK 1;
        
    display.clearDisplay();
      }

      if (
    KEY_OK == 1){
      
    _DispleyAddMenu(MAIN_MENU_MAIN,0);
      
        
    display.display();
        
    display.clearDisplay();
        
    delay(1000);
      }



      
    }

    //________________________________________________________________________________________________________________

    //FUNC ***********************************************************************************************************

    unsigned long _ReadKeyRFID(){
     if ( !
    mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) return 0;

      for (
    byte i 0mfrc522.uid.sizei++) 
      {
        
    uidDecTemp mfrc522.uid.uidByte[i];
        
    uidDec uidDec*256+uidDecTemp;  
      }  
      return 
    uidDec;
    }


    int _DispleyAddMenu(int funint str){ // номер функции, строка функции
          
    charmyStrings[]={"TO2""TO3""Oil","Chain""Err Temp""Temp On""t out>30""Temp Off"};
          
    char charBufVar[50];
          
    String stringVar;
          
    int iii;
          
      switch (
    fun
      {
       case 
    M_SERVIS// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
          
    __dis(002WHITE0);
          
    display.println(fun String(">Servis"));
          if (
    str == SUB_TO2){ iii servis_Limit[0]; stringVar myStrings[0];}
          if (
    str == SUB_TO3){ iii servis_Limit[1]; stringVar myStrings[1];}
          if (
    str == SUB_OIL){ iii servis_Limit[2]; stringVar myStrings[2];}
          if (
    str == SUB_CHAIN){ iii servis_Limit[3]; stringVar myStrings[3];}
           
    __dis(0202WHITE0);
           
    stringVar.toCharArray(charBufVar50);
           
    display.println(charBufVar);
           
    __dis(0423WHITE1);
           
    display.println(iii); 
           break; 
    // --- >
          
       
    case M_OPTION_FAN// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
          
    __dis(002WHITE0);
          
    display.println(fun String(">Opt Fan"));
          if (
    str == SUB_ERROR){ iii TEMP_ARRAY_FAN[2]; stringVar myStrings[4];}
          if (
    str == SUB_SET_TEMP){ iii TEMP_ARRAY_FAN[1]; stringVar myStrings[5];}
          if (
    str == SUB_T_OUT){ iii TEMP_ARRAY_FAN[3]; stringVar myStrings[6];}
          if (
    str == SUB_FAN_OFF){ iii TEMP_ARRAY_FAN[0]; stringVar myStrings[7];}
           
    __dis(0202WHITE0);
           
    stringVar.toCharArray(charBufVar50);
           
    display.println(charBufVar);
           
    __dis(0423WHITE1);
           
    display.println(iii); 
           break; 
    // --- >

      
    case M_FAN// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
          
    __dis(002WHITE0);
          
    display.println(fun String(">Fan"));
              switch (
    str)
              {
              case 
    SUB_STATUS:
                  
    __dis(0202WHITE0);
                  
    display.println("Status");
                  
    __dis(0423WHITE0);
                 if (
    flag_FAN_CYRENT == 1display.println("ON");
                 else 
    display.println("OFF");
                  break; 
    // --- >
              
              
    case SUB_AKTIV:
                  
    __dis(0202WHITE0);
                   
    display.println("Activation");
                  
    __dis(0423WHITE1);
                  
    display.println("---"); 
                  break; 
    // --- >
                   
              
    case SUB_CORECT_OUT:
                  
    __dis(0202WHITE0);
                   
    display.println("Out tem +-");
                  
    __dis(0423WHITE1);
                  
    display.println(OUT_TEMP_CORECTION String("c")); 
                  break; 
    // --- >
                  
              
    case SUB_CORECT_ENGIN:
                  
    __dis(0202WHITE0);
                   
    display.println("Eng tem +-");
                  
    __dis(0423WHITE1);
                  
    display.println(OUT_TEMP_CORECTION String("c")); 
                  break; 
    // --- >              
              
    }   
     
          break; 
    // --- >MAIN_MENU_TAIM

       
    case MAIN_MENU_TAIM// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      
          
    __dis(002WHITE0);
          
    display.println("Time");
           
    __dis(0202WHITE0);
           
    display.println(ch_time);
           break; 
    // --- >


       
    case MAIN_MENU_MAIN// Главный экран
          
    __dis(008WHITE0); // Номер передачи
          
    if (GEAR_CURENT == 0display.println("N");
          
    display.println(GEAR_CURENT);
       
          
    __dis(5002WHITE0); // Температура за бортом
          
    display.printlnString(OUT_TEMP_CURENTDEC));

          for (
    int f=0frandom(065); f+=5) {
            
    display.drawBitmap(128 W_PRBAR64 logo16_glcd_bmpW_PRBAR4WHITE);
          }

          
    display.drawLine(128 LINE64,128 LINE 0WHITE); // линия
          
    break; // --- >
          
        
    case MAIN_MENU_KEY// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
         
    __dis(004WHITE0);
        
    display.println("NOKEY");
         
    __dis(0401WHITE0);
        
    display.println("Honda Varadero");
         
    __dis(0501WHITE0);
        
    display.println("computer v15.02.15");    
        break; 
    // --- > 
      
    }
       
    display.display(); 
    }
              

    int __dis(int pos_sint posint sizint colorint flag){ // 1 позиция с лева, 2 с верху, 3 размер шрифта, 4 цвет 
      
    display.setTextSize(siz);
      
    display.setCursor(pos_s,pos);
     
    display.setTextColor(color);
      if (
    flag == 1)display.setTextColor(BLACKWHITE); //Инверсия
    }


    int _Out_Temp() // Температура наружного воздуха
    {
      
    byte i,present 0,type_s,data[12],addr[8];
      
    float celsius;

      if ( !
    ds.search(addr)) ds.reset_search();
      
    ds.reset();
      
    ds.select(addr);
      
    ds.write(0x441);  
      
    present ds.reset();
      
    ds.select(addr);    
      
    ds.write(0xBE);

      for ( 
    09i++) data[i] = ds.read();

      
    int16_t raw = (data[1] << 8) | data[0];
      if (
    type_s){raw raw << 3;if (data[7] == 0x10raw = (raw 0xFFF0) + 12 data[6];}
      
    OUT_TEMP_CURENT = (float)raw 16.0;
    }  

    int _Timer(int lint h// Возвращет 5 после времени 'l' и 10 после времени 'h'
      
    {
      
    currentTime millis();                      
      if(
    currentTime >= (loopTime l) && (Timer != HIGH)){loopTime currentTime;Timer HIGH;return 5;}
      if(
    currentTime >= (loopTime h) && (Timer HIGH)){loopTime currentTime;Timer LOW;return 10;}
    }

    int _TempMonitoring(int adc// Считываем ацп указанного вывода, включаем или выключаем реле.
    {
      if (
    adc 150 ){_RelayColingFan(ERROR_COLING_FAN);return ERROR_COLING_FAN;} // Перегрев
      
    if (adc 130){_RelayColingFan(HIGH_COLING_FAN);return HIGH_COLING_FAN;}    // Включаем
      
    if (adc <  80){_RelayColingFan(LOW_COLING_FAN);return LOW_COLING_FAN;}      // Выключаем
    }

    int _RelayColingFan(int atr// Включение реле согласно принятому значению температуры
    {
      switch (
    atr)
      {
        case 
    LOW_COLING_FAN// 80C
          
    digitalWrite(FAN_RELAY__DIGITAL_PINHIGH); // Выключено
          
    RELAY_CURENT digitalRead(FAN_RELAY__DIGITAL_PIN);
          break;
     
        case 
    HIGH_COLING_FAN// 100C 
          
    digitalWrite(FAN_RELAY__DIGITAL_PINLOW); // Включено
          
    RELAY_CURENT digitalRead(FAN_RELAY__DIGITAL_PIN);
          break; 
        
        case 
    ERROR_COLING_FAN// Перегрев
          
    break;
        
        default: 
    //
        //
        
    break;
      }
    }

    int _Gear_Switch_Neutral()
    {
      
    int anread analogRead(GEAR_SWITCH__ANALOG_PIN);
      if (
    anread DOWN_GEAR) {_Gear_Set(anread,DOWN_GEAR);gear DOWN_GEAR;} // Если напряжение на делителе "равно" константе (замкнут геркон DOWN) то передаём в функцию напряжение и константу
        
    else if (anread UP_GEAR) {_Gear_Set(anread,UP_GEAR);gear UP_GEAR;} // Замкнут геркон UP

      
    if (anread == && gear == DOWN_GEAR) {_Gear_Set(0,DOWN_GEAR);gear 0;} // Передам в функцию ноль, геркон отключен
      
    if (anread == && gear == UP_GEAR) {_Gear_Set(0,UP_GEAR);gear 0;} //
      
      //if ( digitalRead(GEAR_NEITRAL__DIGITAL_PIN)== LOW ) {lcd.setCursor(0, 0); lcd.print("Neitral        "); GEAR_CURENT = 1;} //Если нейтраль то номер передачи равен одному
    }

    int _Gear_Set(int abcint gear1)// Счётчик скоростей в переменной GEAR_CURENT / напряжение ацп, up или down.
    {
      
    abcgear1;

      if (
    g) {flag_gearL true;}
      if (
    == && flag_gearL == true) {flag_gearH true;}
      if (
    flag_gearH == true && flag_gearL == true)
      {
        
    flag_gearH false
        
    flag_gearL false
        if (
    == UP_GEAR && GEAR_CURENT 5GEAR_CURENT++; //Ограничиваем наивысшую пердачу на 5
        
    if (== DOWN_GEAR && GEAR_CURENT 1GEAR_CURENT--;//Ограничиваем низшую пердачу на 1
       
    }


Страница 8 из 18 ПерваяПервая ... 234567891011121314 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •