много чего подключено. я пробовал частично отрубать вх-выходы и проверять - ничего.
стало так греться после подключения выходов (к светодиодной шкале) таким способом...
много чего подключено. я пробовал частично отрубать вх-выходы и проверять - ничего.
стало так греться после подключения выходов (к светодиодной шкале) таким способом...
Судя по схеме ничего криминального.
Но если греется то значит гдето большой ток , нужно все подключения смотреть.
Chip спасибо, только ты не дописал скетч по энкодеру. Нет обработки прерываний по нажатию энкодера. ОГРОМНАЯ ПРОСЬБА сделать скетч для трех проектов: Энкодер, Резисторные кнопки и ИК-пульт с правлеными скетчами. СПАСИБО!
-----------------------------
Мой проект:
http://www.pccar.ru/showthread.php?p=110691#post110691
Последний раз редактировалось Serg_w; 13.06.2010 в 13:27.
Chip, "методом научного тыка" удалил лишнее из скетча и оставил только: ИК-приемник, Резисторные кнопки и Энкодер с нажатием. Вроде получилось.
#include <IRremote.h>
byte bytes[4]={0,3}; // 0-3 байт - энкодер, рулевые кнопки, ИК приемник
int JOYSTIK_PIN = 5 ; // вход для рулевых кнопок
int RECV_PIN = 11; // вход ИК приемника
int encoder0PinA = 2 ; // вывод А энкодера
int encoder0PinB = 3 ; // вывод В энкодера
int encoder0PinC = 4 ; // вход кнопки энкодера
unsigned long res_dt, ir_dt, old_ir, time;
byte temp;
IRrecv irrecv(RECV_PIN);
decode_results results;
//******************************************
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder0PinC, INPUT);
digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор энкодера
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание энкодера interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание энкодера interrupt 0 на pin 3
Serial.begin(115200); // настроить скорость com порт
irrecv.enableIRIn(); // включить приемник
}
//****************Кнопка Энкодера****************************
void loop()
{
if(digitalRead(encoder0PinC)==LOW)
{
bytes[0] = 0;
bytes[1] = 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write(bytes,4);
while(digitalRead(encoder0PinC)==LOW){delay(50);}
bytes[0] = 0;
bytes[1] = 7;
bytes[2] = 0;
bytes[3] = 0;
}
IR_resiver();
joystik();
}
//****************ИК приемник********************************
void IR_resiver()
{
if ((millis()-time)>1000 )
{
time = millis();
results.value=0;
}
if (irrecv.decode(&results))
{
if (results.value > 0 && results.value < 0xFFFFFFFF)
{
ir_dt = results.value;
bytes[0] = ir_dt & 0xFF; // преобразовать в 4-байта
bytes[1] = (ir_dt & 0xFF00) >> 8;
bytes[2] = (ir_dt & 0xFF0000) >> 16;
bytes[3] = (ir_dt & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
if (old_ir == ir_dt){delay(100);} // пауза между короткими нажатиями
else {delay(50);} // пауза после первого нажатия и удержания (перед повторами)
old_ir = ir_dt;
}
if (results.value == 0xFFFFFFFF )
{
delay(5); //пауза между повторами
Serial.write( bytes,4);
}
irrecv.resume();
}
}
//****************Резистивные кнопки**************************
void joystik()
{
res_dt = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
if( res_dt < 1023 && results.value == 0)
{
delay(50); // пауза для проверки дребезга
if(res_dt == analogRead(JOYSTIK_PIN)) // если нет дребезга
{
bytes[0] = res_dt & 255; // преобразовать в 2-байта
bytes[1] = (res_dt & 768) >> 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
delay(250); // пауза между нажатиями
}
}
}
//*******************Поворот Энкодера (обработка прерывания)****
void doEncoderA()
{
cli();
if(digitalRead(encoder0PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
sei();
}
//*******************Поворот Энкодера (обработка прерывания)****
void doEncoderB()
{
cli();
if(digitalRead(encoder0PinA)==HIGH){bytes[1]=5;}else{bytes[1]=25;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
sei();
}
Последний раз редактировалось Serg_w; 13.06.2010 в 20:19.
Уважаемый Chip, скетч из предыдущего поста с нажатием энкодера работает в monitor.exe (посылает 0 8 0 0) и ALL_config.exe (2048) см. картинки. Но при запуске ALL_IN_ONE.exe нажатие не работает ... При открытии программы в верхний левый угол значение нажатия энкодера не отображается.
Что может быть?
Последний раз редактировалось Serg_w; 13.06.2010 в 20:32.
У меня такая же фигня, попробуй быстро несколько раз нажать на энкодер, и увидеш код и работать также будет
Потом залил этот скетч и все заработало:
PHP код:
#include <IRremote.h>
byte bytes[4]={0,3}; // 0-3 байт - энкодер, рулевые кнопки, ИК приемник
int JOYSTIK_PIN = 5 ; // вход для рулевых кнопок
int RECV_PIN = 11; // вход ИК приемника
int encoder0PinA = 2 ; // вывод А энкодера
int encoder0PinB = 3 ; // вывод В энкодера
int encoder0PinC = 4 ; // вход кнопки энкодера
unsigned long res_dt, ir_dt, old_ir, time;
byte temp;
IRrecv irrecv(RECV_PIN);
decode_results results;
//******************************************
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder0PinC, INPUT);
digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор энкодера
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание энкодера interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание энкодера interrupt 0 на pin 3
Serial.begin(115200); // настроить скорость com порт
irrecv.enableIRIn(); // включить приемник
}
//****************Кнопка Энкодера****************************
void loop()
{
if(digitalRead(encoder0PinC)==LOW)
{
bytes[0] = 0;
bytes[1] = 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write(bytes,4);
while(digitalRead(encoder0PinC)==LOW){delay(50);}
bytes[0] = 0;
bytes[1] = 7;
bytes[2] = 0;
bytes[3] = 0;
}
IR_resiver();
joystik();
}
//****************ИК приемник********************************
void IR_resiver()
{
if ((millis()-time)>1000 )
{
time = millis();
results.value=0;
}
if (irrecv.decode(&results))
{
if (results.value > 0 && results.value < 0xFFFFFFFF)
{
ir_dt = results.value;
bytes[0] = ir_dt & 0xFF; // преобразовать в 4-байта
bytes[1] = (ir_dt & 0xFF00) >> 8;
bytes[2] = (ir_dt & 0xFF0000) >> 16;
bytes[3] = (ir_dt & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
if (old_ir == ir_dt){delay(100);} // пауза между короткими нажатиями
else {delay(50);} // пауза после первого нажатия и удержания (перед повторами)
old_ir = ir_dt;
}
if (results.value == 0xFFFFFFFF )
{
delay(5); //пауза между повторами
Serial.write( bytes,4);
}
irrecv.resume();
}
}
//****************Резистивные кнопки**************************
void joystik()
{
res_dt = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
if( res_dt < 1023 && results.value == 0)
{
delay(50); // пауза для проверки дребезга
if(res_dt == analogRead(JOYSTIK_PIN)) // если нет дребезга
{
bytes[0] = res_dt & 255; // преобразовать в 2-байта
bytes[1] = (res_dt & 768) >> 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
delay(250); // пауза между нажатиями
}
}
}
//*******************Поворот Энкодера (обработка прерывания)****
void doEncoderA()
{
cli();
if(digitalRead(encoder0PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
sei();
}
//*******************Поворот Энкодера (обработка прерывания)****
void doEncoderB()
{
cli();
if(digitalRead(encoder0PinA)==HIGH){bytes[1]=5;}else{bytes[1]=25;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
sei();
}
Для Chipa.
Исправил два своих предыдущих поста. В посте 43 - скетч с нажатием энкодера.
Еще при запуске ALL_IN_ONE.exe, через какое то время программа начинает гасить яркость монитора :-( хотя в скетче даже нет управления яркостью...
Последний раз редактировалось Serg_w; 13.06.2010 в 20:35.
Самообучаемость ? :-)
Как дело движется с внедрением в проект подогрева HDD?
Последний раз редактировалось Павел777; 06.07.2010 в 20:34.
Думаю что до наступления морозов все будет ! Даже раньше, сейчас дел не в проворот.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)