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: Бортовой компьютер мотоцикла
Во первых на английском слова короче получаются, если бы я хотел русский алфавит наверное он был бы таким.
Управление меню, осуществляется одной! кнопкой. Одной штатной кнопкой на панели приборов, герметичной ;)