Показать сообщение отдельно
Старый 03.05.2011, 11:31   #137
Arthur
Старший Пользователь
 
Регистрация: 16.12.2010
Возраст: 49
Город: С-Петербург
Регион: 78, 98
Машина: Outlander XL
Сообщений: 85
Arthur is on a distinguished road
По умолчанию

Спасибо большое. Уже разобрался. Сначала просто пытался шить и со снятой перемычкой и с надетым на нее джампером и ничего не получалось, поэтому думал рыть в другом месте, а оказалось, что проблема в джампере (он был закрытый с одного конца и видимо не контачил). Перемкнул открытым засунув его обратной стороной и все заработало. Установил программу для кнопок резистивных, настроил. Все работает.
Теперь вот пробую совместить резистивные кнопки с управлением яркостью светодиодной подсветки матрицы. Пока фоторезистор не приехал может кто-то понимающий в программировании глянет правильно ли я объединил эти два скетча

//AutoLight&Rezbuton
//http://compcar.ru
#define PIN 5 //номер аналогового порта
#define LIMIT 6 //предел погрешности сопротивления

int ledPin = 9;
int sens = 0;
int light = 0;
byte bytes[2];
int res_dt1;
byte idx=0;
unsigned long math_time,old_time,real_time;

void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
}

void loop()
{
sens = analogRead(0);

if ((sens > 0) && (sens<10)) {light = 10;}
if ((sens > 10) && (sens<20)) {light = 50;}
if ((sens > 20) && (sens<30)) {light = 100;}
if ((sens > 30) && (sens<40)) {light = 150;}
if ((sens > 40) && (sens<50)) {light = 180;}
if ((sens > 50) && (sens<60)) {light = 210;}
if ((sens > 70) && (sens<80)) {light = 230;}
if (sens > 80) {light = 255;}

analogWrite(ledPin, light);
Serial.print(sens, DEC);
Serial.print(" ");
delay(300);

old_time = real_time;
math_time = 0;
res_dt1 = analogRead(PIN); // прочитать данные АЦП
while(math_time < 500 && analogRead(PIN)>res_dt1-LIMIT && analogRead(PIN) < res_dt1+LIMIT && res_dt1 != 1023)
{
real_time = millis(); //получить реальное время
math_time = real_time - old_time; //считаем длительность паузы
}

if(math_time > 30 && res_dt1 != 1023) //если нет дребезга
{
if (idx==1 && math_time < 500){ res_dt1 = 1023; idx=0; }
else if(math_time > 499){ res_dt1 |= 1024; idx=1; }

bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 1792) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
} else idx=0;
}
Arthur вне форума   Ответить с цитированием