-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Serg_w
Еще раз попрошу Chipa подправить скетч и программу для All-In-One...
Пробуй
PHP код:
//http://compcar.ru
#include <IRremote.h>
byte bytes[13]; // 0-3 байт энкодер, рулевые кнопки, ИК приемник, веб камера
// 4 байт датчик света
// 5 байт датчик напряжения
// 6 байт датчик топлива
// 7-12 зарезервированы
int LIGHT_SENS = 0 ; // Вход датчика освещености
int VOLT_SENS = 1 ; // Вход датчика напряжения
int FUEL_SENS = 2 ; // Вход датчика уровня топлива
int JOYSTIK_PIN = 5 ; // Вход для рулевых Кнопок
int NC2_SENS = 4 ; // Вход датчика
int NC1_SENS = 5 ; // Вход датчика
int NC3_SENS = 6 ; // Вход датчика
int NC4_SENS = 7 ; // Вход датчика
int RECV_PIN = 6; //вход ИК приемника
int back_cam = 5; //Вход активатора камеры
int encoder0PinA = 2 ; //Вывод А энкодера
int encoder0PinB = 3 ; //Вывод В энкодера
int encoder_botton = 4; //Вход кнопки энкодера
unsigned long res_dt, ir_dt, old_ir, time;
byte temp, cam_status;
IRrecv irrecv(RECV_PIN);
decode_results results;
//******************************************
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder_botton, INPUT);
digitalWrite(encoder_botton, HIGH); // подключить подтягивающий резистор
pinMode(back_cam, INPUT);
digitalWrite(back_cam, 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()
{
IR_resiver();
joystik();
/*cam();
if ((millis()-time)>1000 && results.value ==0) //запуск процедур по таймеру
{
time = millis();
autolight();
fuel();
voltmetr();
}*/
}
//*******************ИК приемник***********************
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,13); // отправить прочитаное значение компьютеру
if (old_ir == ir_dt){delay(300);} // Пауза после нажатия и удержания(перед повторами)
else {delay(500);}
old_ir = ir_dt;
}
if (results.value == 0xFFFFFFFF )
{
delay(130); //пауза между повторами
Serial.write( bytes,13);
}
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,13); // отправить прочитаное значение компьютеру
delay(250); // Пауза между нажатиями
}
}
}
//******************Датчик освещения************************
void autolight()
{
byte light;
byte sens = analogRead(LIGHT_SENS)/4;
if ((sens > 0) && (sens<30)) {light = 2;}
if ((sens > 30) && (sens<60)) {light = 60;}
if ((sens > 60) && (sens<90)) {light = 90;}
if ((sens > 90) && (sens<120)) {light = 120;}
if ((sens > 120) && (sens<150)) {light = 150;}
if ((sens > 150) && (sens<190)) {light = 190;}
if (sens > 190) {light = 255;}
if(light != bytes[4]) // если были изменения
{
clear_buf();
bytes[4] = light;
Serial.write( bytes,13);
}
}
//*******************Измерение Напряжения***********************
void voltmetr()
{
temp = analogRead(VOLT_SENS)/4;
if(temp != bytes[5])
{
clear_buf();
bytes[5]=temp;
Serial.write( bytes,13);
}
}
//*******************Датчик топлива***********************
void fuel()
{
temp = analogRead(FUEL_SENS)/4;
if(temp != bytes[6])
{
clear_buf();
bytes[6]=temp;
Serial.write( bytes,13);
}
}
//*******************Активация веб камеры по сигналу ЗХ***********************
void cam()
{
temp=digitalRead(back_cam);
if(temp==HIGH && cam_status==0)
{
clear_buf();
cam_status=255;
bytes[1]=8;
Serial.write( bytes,13);
}
if(temp==LOW && cam_status==255)
{
clear_buf();
cam_status=0;
bytes[1]= 9;
Serial.write( bytes,13);
}
}
//*******************Активация веб камеры по сигналу ЗХ***********************
void clear_buf()
{
bytes[0] = 0;
bytes[1] = 0;
bytes[2] = 0;
bytes[3] = 0;
}
//*******************обработка прерывания***********************
void doEncoderA()
{
cli();
if(digitalRead(encoder0PinB)==HIGH){bytes[1]=24;}else{bytes[1]=15;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,13);
sei();
}
//*******************обработка прерывания***********************
void doEncoderB()
{
cli();
if(digitalRead(encoder0PinA)==HIGH){bytes[1]=15;}else{bytes[1]=24;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,13);
sei();
}
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Chip спасибо, только ты не дописал скетч по энкодеру. Нет обработки прерываний по нажатию энкодера. ОГРОМНАЯ ПРОСЬБА сделать скетч для трех проектов: Энкодер, Резисторные кнопки и ИК-пульт с правлеными скетчами. СПАСИБО!
-----------------------------
Мой проект:
http://www.pccar.ru/showthread.php?p=110691#post110691
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
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();
}
-
Вложений: 2
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Уважаемый Chip, скетч из предыдущего поста с нажатием энкодера работает в monitor.exe (посылает 0 8 0 0) и ALL_config.exe (2048) см. картинки. Но при запуске ALL_IN_ONE.exe нажатие не работает ... При открытии программы в верхний левый угол значение нажатия энкодера не отображается.
Что может быть?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Для Chipa.
Исправил два своих предыдущих поста. В посте 43 - скетч с нажатием энкодера.
Еще при запуске ALL_IN_ONE.exe, через какое то время программа начинает гасить яркость монитора :-( хотя в скетче даже нет управления яркостью...
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Как дело движется с внедрением в проект подогрева HDD?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Думаю что до наступления морозов все будет ! Даже раньше, сейчас дел не в проворот.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Можно ли вместо указанного фотоприемника TSOP31238 (аналог TSOP1738), использовать TSOP31236 (аналог TSOP1736)
Различаются они рабочей частотой.
38 и 36 KHz
Или рабочая частота, таки, критична?
Кроме того, не вижу на схеме подключения кнопки ЗХ.
Подключать аналогично этой схеме?
Автоматическое переключение на камеру заднего хода
И еще. Какой фоторезистор можно использовать в качестве датчика освещенности для авторегулировки яркости?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Serg_w
Уважаемый Chip, скетч из предыдущего поста с нажатием энкодера работает в monitor.exe (посылает 0 8 0 0) и ALL_config.exe (2048) см. картинки. Но при запуске ALL_IN_ONE.exe нажатие не работает ... При открытии программы в верхний левый угол значение нажатия энкодера не отображается.
Что может быть?
У меня такая же фигня, попробуй быстро несколько раз нажать на энкодер, и увидеш код и работать также будет :)
Потом залил этот скетч и все заработало:
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();
}
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Конденсатор на 10 мкФ электролит на 25 вольт или керамика? В схеме "+" не указан?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
А когда примерно ждать подключения подогрева HDD?
У меня SSD, греть его не нужно. Но вот матрицу я бы грел, наклеив подогреватель между контроллером и матрицей.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
плюс соответственно к плюсу питания приемника, минус к общему
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Я так и понял, спасибо Эд! Подправить первую схему просто забыл...
По ЖК: Матрица на морозе на китайском телеке тормозит весьма (пока не знаю как Лилипут себя поведёт, недавно установил). Но локальный прогрев может убить ЖК матрицу (треснет пластик).
Если подцепить в проекте подогрева HDD грелку к матрице через балласт то толку точно не будет.
Греться будет только металлический экран светодиодов а не сами ЖК кристаллы.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Павел777, может вы и правы.
Очень жаль. Видно придется постоянно ждать самопрогрева матрицы.
Или искать морозостойкую.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Skiw
Павел777, может вы и правы.
Очень жаль. Видно придется постоянно ждать самопрогрева матрицы.
Или искать морозостойкую.
А как на счет импульсного прогрева т.д. тайминг зависящий от температуры по принципу лямда подогревателя подогрел считал показания опять подогрел и так до наступления нужной температуры
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Можно наклеить подогреватель без прокладок прямо на матрицу и плавный прогрев сделать при помощи ШИМ
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Тогда надо даллас использовать именно для измерения температуры матрицы.
Чтобы не перегреть. Да и летом подогрев не нужен.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Датчик температуры однозначно ставить
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Тогда надо даллас использовать именно для измерения температуры матрицы.
Чтобы не перегреть. Да и летом подогрев не нужен.
Так Это и есть суть решения проблемы
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Шикарный проект. спасибо всем кто принимал участие в доведении его до ума. Вчера реализовал датчик освещенности и энкодер.
Есть несколько вопросов по дальнейшей реализации.
1)Энкодер. Скетч из шапки как я понял обеспечивает только реакцию на вращение. Нажатие я еще худо бедно смогу сделать, блогодаря скетчам в теме, но хочется обеспечить и реакцию на поворот с нажатой кнопкой. Где то встречал скетч отдельный где это реализовано, но там перед вращением с нажатой кнопкой, отрабатывалось простое нажатие, как будто я нажал и отпустил. Соответственно нужно что бы различалось нажатие и удержание кнопки(не обрабатывается) и нажатие и сразу же отпуск(обрабатывается)
2) По схеме в шапке не понял куда подключать 12v от заднего хода для активатора камеры. Вроде D5, но там датчик температуры.
С остальным вроде пока разобрался.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Подскажите а кнопки точно к RESET подключать или это глюк?
Да это был глюк- надпись над )))
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Надпись над контактом, так что это GND
-
Вложений: 2
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Вот такая беда (вин7, программы из шапки)
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Какие еще USB устройства подключены ?
Длинна кабеля какая?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
должен быть USB Serial Port
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Chip
Какие еще USB устройства подключены ?
Длинна кабеля какая?
кабель от кэнона 1 метр. из юсб микрософт десктоп (это комп рабочий, не авто)
+ поменял кабель +усб силовой - не поменялось
+ в ардуиновском мониторе работает без ошибок
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Возможно ты пытаешься запустить боле чем одну программу работающую с ардуино
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Chip
Возможно ты пытаешься запустить боле чем одну программу работающую с ардуино
С твоим монитор-ом таже ошибка вылезает. с другими терминалками все нормально.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Если у тебя включен монитор , то ни одна программа корректно не запустится
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Chip
Если у тебя включен монитор , то ни одна программа корректно не запустится
Если запускаю putty - он работает норм. Monitor, IRkey и ALL_IN_ONE глючат одинаково.
Вопрос: работа с ком-портом через какую библиотеку ведется? Если переписать через select - думаю поможет
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Не запускай никаких программ кроме из шапки темы.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
St@rz
Не запускай никаких программ кроме из шапки темы.
Еще раз: я запускаю их неодновременно ;) Есть ошибка в софте с первой страницы темы.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Думаю что ошибку ты где то допустил, так как эта программа работает на нескольких десятках компьютерах
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Windows какая сборка? Какая версия?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Вин 7/32 Максимальная - официальная, i5/4Гб оперы
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
У тебя какие USB устройства еще подключены к компу, кроме мышки и клавы?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Только кард ридер. аверовские дрова снес нафиг, есть контрол центр от принтера Brother, но он не мешает тому-же putty (терминалке).
ЗЫ: можешь кинуть в личку кусок кода, где ты работаешь с сериальником?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Вот этот пример я взял за основу
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
в этом примере открытие/закрытие порта сидит на таймере. Очень похоже на то, что если работу с портом пересадить в отдельный трид, проблемы с ошибками исчезнут. копаю дальше