Индикатор включенной передачи.
Пока вместо герконов ,пока использую кнопки, они подключены к аналоговому входу через делитель напряжения.
Принцип работы : при замыкании геркона UP номер передачи прирастает от 1 до 5, при замыкании геркона DOWN убывает от 5 до 1, время удержания геркона замкнутым роли не играет. Для сигнала о нейтральной передаче используется цифровой вход (кнопки не нашёл, просто замыкаю на массу ), поскольку нейтральная передача возможна только между первой и второй передачей, после нейтрали можно включить либо первую либо вторую скорость (герконы UP и DOWN), так же минус с датчика нейтрали нужен для синхронизации счётчика, ведь мотоцикл можно завести не только на нейтрали но и на скорости
http://www.youtube.com/watch?feature...&v=RLtfptgGj3s
PHP код:
#include <PCD8544.h>
static PCD8544 lcd;
const int GEAR_ANALOG_CONTROL_PIN = 4;
const int GEAR_DIGITAL_NEITRAL_PIN = 12;
const int UP_GEAR = 300 ; // Делитель напряжения А4
const int DOWN_GEAR = 550; // Делитель напряжения А4
int GEAR_CURENT;
int gear, neital;
int u, g;
boolean flag_gearH = false, flag_gearL = false;
void setup()
{
pinMode(GEAR_DIGITAL_NEITRAL_PIN, INPUT);
digitalWrite(GEAR_DIGITAL_NEITRAL_PIN, HIGH); // включить подтягивающий резистор
lcd.begin(84, 48);
}
int _Gear_Switch(int abc, int gear1)// напряжение ацп, up или down
{
u = abc, g = gear1;
if (u > g) {flag_gearL = true;}
if (u == 0 && flag_gearL == true) {flag_gearH = true;}
if (flag_gearH == true && flag_gearL == true)
{
flag_gearH = false;
flag_gearL = false;
if (g == UP_GEAR && GEAR_CURENT < 5) GEAR_CURENT++; //Ограничиваем наивысшую передачу на 5
if (g == DOWN_GEAR && GEAR_CURENT > 1) GEAR_CURENT--;//Ограничиваем низшую передачу на 1
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Gear - ");
lcd.print(GEAR_CURENT);
}
}
void loop()
{
int anread = analogRead(GEAR_ANALOG_CONTROL_PIN);
if (anread > DOWN_GEAR) {_Gear_Switch(anread,DOWN_GEAR);gear = DOWN_GEAR;} // Если напряжение на делителе "равно" константе (замкнут геркон DOWN) то передаём в функцию напряжение и константу
else if (anread > UP_GEAR) {_Gear_Switch(anread,UP_GEAR);gear = UP_GEAR;} // Замкнут геркон UP
if (anread == 0 && gear == DOWN_GEAR) {_Gear_Switch(0,DOWN_GEAR);gear = 0;} // Передам в функцию ноль, геркон отключен
if (anread == 0 && gear == UP_GEAR) {_Gear_Switch(0,UP_GEAR);gear = 0;} //
if ( digitalRead(GEAR_DIGITAL_NEITRAL_PIN)== LOW ) {lcd.setCursor(0, 0); lcd.print("Neitral "); GEAR_CURENT = 1;} //Если нейтраль то номер передачи равен одному
}