Показать сообщение отдельно
Старый 28.08.2009, 17:53   #9
Urvin
Старший Пользователь
 
Аватар для Urvin
 
Регистрация: 13.11.2008
Возраст: 36
Город: Москва
Регион: 77, 97, 99, 177
Машина: 2000\Basin\2111
Сообщений: 250
Urvin will become famous soon enough
По умолчанию

Что у меня выходит для arduino Nano v3

Уж насколько ненавижу "теоретическое" программирование... Устройства у меня нет, потому исхожу из предположений и документации.
Как я понял, в arduino сидит переходник USB-COM, и компьютер определяет устройство именно как "нечто на ком-порту". Также я понял, что если мы хотим использовать связь с компьютером, у нас пропадают цифровые входы-выходы D0 и D1.

У Carduino Nano цифровых входов маловато, потому отказываемся от индикации "Check Engine" и передачи трансмиссии. Увы.

Подключение аналоговых датчиков (см. схемы п.1 первого поста):
A0 - спидометр;
A1 - тахометр;
A2 - охлаждающая жидкость;
A3 - уровень топлива;
A4 - АКБ
A5 - [в программе не отображается, но прием налажен]

Подключение дискретных цепей:
D2 - водительская дверь;
D3 - задняя левая дверь;
D4 - передняя правая дверь;
D5 - задняя правая дверь;
D6 - левый поворотник;
D7 - правый поворотник;
D8 - аварийка;
D9 - габариты/ближний свет;
D10 - ручной тормоз;
D11 - масло;
D12 - тормоза;
D13 - дальний свет.

Программа для arduino следующая:
Код:
// Массив значений по портам
char resultInput[8];

void setup()
{
	char i;
	
	// Обнуление массива значений
	for(i=0; i<8; i++)
	{
		resultInput[i]=0;
	}
	
	// Инициализация цифровых портов
	for(i=2; i<14; i++)
	{
		pinMode(i,INPUT);
	}
	
	// Инициализация порта
	Serial.begin(9600);
}

void loop()
{
	// Сбор данных по шести АЦП, диапазон значений [0, 255]
	for(char i=0; i<6; i++)
	{
		resultInput[i]=analogRead(i)/4;
	}
	
	// Перевод состояний на цифровых входах в общее число
	resultInput[6] = digitalRead(2) +
			 digitalRead(3)*2 +
			 digitalRead(4)*4 +
			 digitalRead(5)*8 +
			 digitalRead(6)*16 +
			 digitalRead(7)*32 +
			 digitalRead(8)*64;
			 	 
	resultInput[7] = digitalRead(9) +
			 digitalRead(10)*2 +
			 digitalRead(11)*4 +
			 digitalRead(12)*8 +
			 digitalRead(13)*16;		 
			 
	// Если на порт что-то пришло
	if (Serial.available()>0)
	{
		int command = Serial.read();
		
		// Команда - вывести значение одного из портов
		if (command<=8)
		{
			Serial.print(resultInput[command-1])
		}
		// Если команда - вывести все сразу
		else if (command==15)
		{
			Serial.print(resultInput);
		}
	}			 
			 
}
Если программа и мои предположения верны, то в написанной мной приборке будут показываться подаваемые на arduino значения.

Последний раз редактировалось admin; 16.03.2017 в 22:49.
Urvin вне форума   Ответить с цитированием