Re: Бортовой компьютер мотоцикла
	
	
		Я так думаю Олег не соберается использовать LCD от Nokia, это его перед новым годом разиграли и прислали не тот дисплей :) он ждет другой а этот использовал для тестов.
LED индикатор, будет засвечивать на солнце, и слишком много выводов требует для подключения, а если с драйвером то те же ресурсы что и с LCD да и на мой взгляд LCD посалиднее будет, слава богу они доступные в цене.
Я бы взял LCD 3,2 или если не много места 2,2 цветную
Слишком частая запись EPROM быстро убьет его, у него ограниченое число записей, хоть это и 100.000 циклов но всеже при частой записи они могут неожиданно закончиться.
Насчет датчика скорости, тут ничего не могу посоветовать, тут геркон с магнитом в помощь, но я думаю это не плохое решение.
"LM35" Я болше склоняюсь к дигитальному датчику и помех меньше, а стало бы и замеры точнее и тот же аналоговый вход можно настроить как дигитальный, если дифицит дигитальных выходов.
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		На LED хочу делать, чтобы избежать рамки вокруг, т.е. все элементы будут "в глубину" за дисплеем и итоговый маленький размер. 
Для управления max7219 есть, т.е. три цифровых пина надо. 
С ослеплением думаю заклеить можно будет черной пленкой, как например на цифровых вольтметрах делают. 
С записью в память проблем возникнуть не должно: в сезон проезжается ~20 000Км, т.е. запись раз в 10км - это 2000 раз за сезон. 
Запись по нейтрали допустим в 4 раза чаще, т.е. 8 000 раз за сезон. 
Итого 10 000 за сезон, т.е. 100 000 на 10 сезонов хватит, т.е. мотоцикл раньше сдохнет :D
Более того можно каждый сезон в свои ячейки писать.
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		Для ответов на ваши вопросы посмотрите последнюю схему, на ней всё видно, что и для чего. 
Например дисплей OLED должен встать на место часов, правый дисплей,место не ахти правда ;)
Вложение 18387
Мотоцикл - Honda Varadero XL1000V
НА мотоцикле стоит помпа электромагнитная (соленоид толкает поршень ... )
В EEPROM я лично думаю не стоит бездумно лепить данные - чем реже тем лучше.
Насчёт герконов,  даже не знаю ... на мотоцикле же есть датчик скорости, внешнее прерывание + TimerOne  всё просто получится, не вижу смысла мудрить.
Плата может и макетка ... как я по вашему сделаю печатную плату если не знаю окончательную схему! а breadboard с торчащими проводами и элементами в разные стороны мне не интересен тк на мотоцикле будет происходить окончательная обкатка, с breadboard`a всё вывалится нафик :D
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		
	PHP код:
	
// В чем разница в записях ?
#define A 5;        
pinMode (А, OUTPUT); 
// 
int a = 5;
pinMode (a, OUTPUT); 
 
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		
	Цитата:
	
		
		
			
				Сообщение от 
Oleg_33
				 
			
	PHP код:
	
// В чем разница в записях ?
#define A 5;        
pinMode (А, OUTPUT); 
// 
int a = 5;
pinMode (a, OUTPUT); 
 
	 
 Все зависит от того какая цель преследуется. В данном контексте никакой разницы, за исключением того что int использует 2 байта памяти. Просто погугли на предмет того что есть int и что есть #define
зы: я там ссылочки подставил, глянь и я думаю проясниться.
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		Цель одна сэкономить ресурсы,  что бы меньше тормозила... Я так понимаю int лучше заменить #define,  тк глобальных переменных у меня будет много
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		
	Цитата:
	
		
		
			
				Сообщение от 
Oleg_33
				 
			Цель одна сэкономить ресурсы,  что бы меньше тормозила... Я так понимаю int лучше заменить #define,  тк глобальных переменных у меня будет много
			
		
	 
 В твоем случае лучше объявлять пины с использованием #define. Int я бы использовал в том случае если нужно было бы в ходе процесса менять номер пина, либо присвоение номера пина из вне, либо по какому либо алгоритму в процессе выполнения кода.
Допустим прописал одну переменную 
	PHP код:
	
int sensor;
Void setup()
{
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
}
Void loop()
{
sensor =.            // принимаем значение по UART либо сдругова источника, присваиваем переменной значение от 2-5
DigitalWrite (sensor, HIGH); // в зависимости от значения переменной "sensor" будет выбран соответствующий пин.
} 
 Ну это так, попростенькому.
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		Menu Demo (пока только две страницы меню из 7)
http://youtu.be/RTn5k_MhUoQ
Скоро очень скоро приедет другой дисплей, а пока отрабатываю навыки на этом дисплее. Можно как нибудь упростить вывод строк для моего случая ?
	PHP код:
	
#include <PCD8544.h>
static PCD8544 lcd;
#define M_SERVIS 1
#define M_OPTION_FAN 2
#define M_FAN 3
#define M_SPEED 
#define M_FUEL_POMP 5
#define M_TIME 6
#define M_ERROR1 7
#define M_RROR2 8
int servis_Limit[4] = {12000, 6000, 3000, 1000};
// переменные включения выключения вентилятора
int ERROR_COOLING_TEMP = 105;
int SET_RUN_FAN = 100;
int IF_OUT_TEMP_MORE_30 = 95;
int FAN_OFF = 80;
int s = 0, s2; // menu
static unsigned long time; 
int NEXT_MENU, NUMBER_WINDOWS_MENU = 1;
static const byte simbol[] = { B11111111, B01111110, B00111100, B00011000, B00011000 };
void setup(){
  lcd.begin(84, 48);
  pinMode(12, INPUT);
  Serial.begin(9600);
  lcd.createChar(9, simbol);
}
void loop(){
  _Button(12);
}
int _Button(int iii){
  if (digitalRead(iii) == LOW) { // нажата кнопка
    time = millis();
    do
    {
    } while ( digitalRead(iii) < 1); // ждём когда кннопка отпустится
    
    if ((millis()-time)>500){
      if (_DispleyAddMenu(NUMBER_WINDOWS_MENU +1 ,s2) && NEXT_MENU == 0);
      else NUMBER_WINDOWS_MENU + 1;
      s2++; 
      if (s2 > 5) s2 = 0;      
    }
  }
}
int _DispleyAddMenu(int fun, int str){ // номер функции, строка функции
  char buff[300];
  lcd.setCursor(0, 0);
  
  switch (fun) 
  {
   case M_SERVIS:
      // 5 максимальное колличество строк, 
      sprintf (buff,"%6s        %s-%7i%s%s-%7i%s%s-%7i%s%s-%5i%s%s", 
      "Servis", // название пункта меню
      " TO2", servis_Limit[0], "Km",
      " TO3", servis_Limit[1], "Km",
      " Oil", servis_Limit[2], "Km",
      " Chain", servis_Limit[3], "Km", // 4 строки меню
      " GO menu?"); //возврат в основно меню
      lcd.print (buff);
      lcd.setCursor(0, str+1); // переключаем символ > на новою строку
      lcd.write(9); // символ >
      Serial.println(str);
       if (str > 5-1){ // Если достигнут конец строк , выходим из цикла, записываем в переменную номер окна меню
        NUMBER_WINDOWS_MENU = M_SERVIS;
        NEXT_MENU = 1;
        return 0;
      }     
      break;
      
   case M_OPTION_FAN:
      // 5 максимальное колличество строк
       sprintf (buff,"%s           %s-%6i%s%s-%5i%s%s-%4i%s%s-%5i%s%s", 
      "Fan",
      " Error", ERROR_COOLING_TEMP, "C",
      " SetRun", SET_RUN_FAN, "C",
      " Temp>30", IF_OUT_TEMP_MORE_30, "C",
      " FanOff", FAN_OFF, "C",
       " GO menu?"); //возврат в основно меню
      lcd.print (buff);
      if (str > 5 - 1){ // Если достигнут конец строк , выходим из цикла, записываем в переменную номер окна меню
        NUMBER_WINDOWS_MENU = M_OPTION_FAN;
        return 0;
      }
      lcd.setCursor(0, str+1); // переключаем символ > на новою строку
      lcd.write(9); // символ >
break;
  }
} 
 
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		
	Цитата:
	
		
		
			Displey, servis, Go menu
			
		
	
 Жесть какая. Display, Service, *стрелка налево*back - я бы так делал. 
А если на русском хочется, то дисплей обычно можно руссифицировать, подкрутив либу.
	 
	
	
	
		Re: Бортовой компьютер мотоцикла
	
	
		Во первых на английском слова короче получаются,  если бы я хотел русский алфавит наверное он был бы таким. 
Управление меню,  осуществляется одной! кнопкой. Одной штатной кнопкой на панели приборов,  герметичной ;)