Показать сообщение отдельно
Старый 12.04.2012, 20:59   #120
Frud
 
Frud
 
Адрес: Днепропетровск
Возраст: 44
Сообщений: 2,008
Машина: Тавринатор 1.3 карб. Люкс 92 г
Длина: 8460мкм
Диаметр: 36мм
Отправить сообщение для Frud с помощью ICQ Отправить сообщение для Frud с помощью Skype™
По умолчанию

Скетч на котором сейчас тестируется программа. Тестовый сигнал имитирующий датчик скорости идет с 22-го цифрового выхода (Arduino Mega).
Если у вас другая версия платы, то сигнал следует брать с другого свободного выхода.

volatile int count;
volatile int tah;
unsigned long odometr;
unsigned long odo;
int resultInput[17];
int i;

void setup()
{
odo = 0;
// Обнуление массива значений
for(i=0; i<=16; i++)
{
resultInput[i]=0;
}
// Инициализация цифровых портов
// d2 вход спидометра
// d3 вход тахометра
// d4 датчик уровня тормозной жидкости
// d5 датчик стояночного тормоза
// d6 контрольная лампа габаритных огней
// d7 контрольная лампа дальнего света
// d8 контрольная лампа противотуманных огней
// d9 контрольная лампа обогрева заднего стекла
// d10 контрольная лампа давления масла
// d11 контрольная лампа давления масла
// d12 левый поворот
// d13 правый поворот

digitalWrite(2, HIGH);
for(i=4; i<=13; i++)
{
pinMode(i,INPUT);
digitalWrite(i, HIGH); //Подключить внутренние cтягивающие резисторы
}

// Инициализация ком порта
Serial.begin(9600);
// Прерывание спидометра
attachInterrupt(0, speedometr, CHANGE);
attachInterrupt(1, tahometr, CHANGE);
}

void loop()
{
tone(22, 200); // тестовый сигнал 200 Гц (120 км/ч)
//записываем частоту со входа спмдометра в массив
resultInput[0] = count;
resultInput[1] = tah;
// Сбор данных с трех АЦП, диапазон значений [0, 255]
// а0 температура охлаждающей жидкости
// а1 уровень топлива
// а2 напряжение автомобильной сети

for(i=0; i<=2; i++)
{
resultInput[i+2]=analogRead(i);
}
// Чтение цифровых входов
for(i=4; i<=13; i++)
{
resultInput[i+1] = !digitalRead(i);
}
if(resultInput[2] > 800){resultInput[15] = 1;}
else{resultInput[15] = 0;}
// Передаем данные из массива в компьютер
// 0 скорость
// 1 обороты
// 2 температура
// 3 топливо
// 4 напряжение
// 5 датчик уровня тормозной жидкости
// 6 датчик стояночного тормоза
// 7 контрольная лампа габаритных огней
// 8 контрольная лампа дальнего света
// 9 контрольная лампа противотуманных огней
// 10 контрольная лампа обогрева заднего стекла
// 11 контрольная лампа давления масла
// 12 контрольная лампа уровня масла
// 13 левый поворот
// 14 правый поворот
// 15 перегрев
odometr = odometr+count;
if (odometr >=1200){odo = odo + 1; odometr=odometr-1200;}
resultInput[16] = odo;
for(i=0; i<=15; i++)
{
Serial.print (resultInput[i]);
Serial.print (",");
}
Serial.println (resultInput[16]);
count = 0;
tah = 0;
delay(200);
}
// Измеряем частоту на входе спидометра по прерыванию
void speedometr()
{
count=count+1;
}
// Измеряем частоту на входе тахометра по прерыванию
void tahometr()
{
tah=tah+1;
}
__________________
Изготовление эксклюзивных акриловых шильдов, значков, брелоков
Frud вне форума   Ответить с цитированием