Выкладываю программу для дублирования параметров автомобильной панели приборов, написаную Urvin . Мной был подправлен только код для arduino. Обработку прерывания для одометра еще не успел поправить
Программу скачиваем здесь
Перед использованием программы совместно с arduino необходимо изменить следующие настройки (файл torpedo.ini)
Код:
[usb]
useusb=false
...
[com]
name=Com#
baudrate=9600
parity=0
flowcontrol=0
databits=8
stopbits=1
DTR=false
RTS=false
Com# - имя com-порта, на котором работает ардуино. Например, Com4.
Скетч для Arduino
PHP код:
#include <EEPROM.h>
// Массив значений по портам
byte resultInput[11];
byte i;
void setup()
{
// Обнуление массива значений
for(i=0; i<=10; i++)
{
resultInput[i]=0;
}
// Инициализация цифровых портов
for(i=2; i<=13; i++)
{
pinMode(i,INPUT);
digitalWrite(i, HIGH); //Подключить внутренние подтягивающие резисторы
}
// Инициализация ком порта
Serial.begin(9600);
// привязываем 0-е прерывание к функции interrupt()
// attachInterrupt(0, interrupt, CHANGE);
}
void loop()
{
// Сбор данных с пяти АЦП, диапазон значений [0, 255]
// 0 - скорость
// 1 - тахометр
// 2 - температура охлаждающей жидкости
// 3 - уровень топлива
// 4 - напряжение автомобильной сети
for(i=0; i<=4; i++)
{
resultInput[i]=analogRead(i)/4;
}
// Чтение данных одометра из EEPROM
for(i=0; i<=3; i++)
{
// resultInput[i+7] = EEPROM.read(i);
}
// Перевод состояний на цифровых входах в общее число
// 5 - двоиный код включения лампочек (
// 6 - двоичный код включения лампочек
// + двоичный код включенной передачи (3 старших бита)
// 7-10 - текущее значение одометра
resultInput[5] = digitalRead(2) +
digitalRead(3)*2 +
digitalRead(4)*4 +
digitalRead(5)*8 +
digitalRead(6)*16 +
digitalRead(7)*32 +
digitalRead(8)*64;
resultInput[6] = digitalRead(9) +
digitalRead(10)*2 +
digitalRead(11)*4 +
digitalRead(12)*8 +
digitalRead(13)*16;
// Контроль за отключением питания
if (resultInput[4]<180)
{
// Запись одометра в энергонезависимую память
for(i=0; i<=3; i++)
{
// EEPROM.write(i, resultInput[i+7]);
}
}
// Добавление информации о включенной передаче
byte trm=analogRead(5)/4;
byte gear=0b00100000; // 1
if (trm<20) gear=0; // N
else if (trm<60) gear=0b11100000; // R
else if (trm<105) gear=0b10100000; // 5
else if (trm<145) gear=0b10000000; // 4
else if (trm<190) gear=0b01100000; // 3
else if (trm<230) gear=0b01000000; // 2
resultInput[6] = (resultInput[6] & 0b00011111) | gear; // накладываем маску и старшие биты
Serial.write(resultInput, 11); // Передаем данные из массива в компьютер
delay(300);
}
//------------------------ Обработка прерываний -----------------------//
void interrupt ()
{
}
Схема подключения. При не правильном подключении диодов вы рискуете спалить устройств. По приведенной схеме катоды диодов подключаются к соответствующим индикаторам(лампочкам) со стороны управляющего сигнала. В случаи если индикатор управляется минусом , то в скетче придется проинвертировать соответствующий сигнал.
Вложение 6388
Исходник программы для PC