//------------------------------------------------------------------------------
// Include the IRremote library header
//
#include <IRremote.h>
//------------------------------------------------------------------------------
// Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838)
//
int recvPin = 11;
IRrecv irrecv(recvPin);
//+=============================================================================
// Configure the Arduino
//
void setup ( )
{
Serial.begin(9600); // Status message will be sent to PC at 9600 baud
irrecv.enableIRIn(); // Start the receiver
}
//+=============================================================================
// Display IR code
//
void ircode (decode_results *results)
{
// Panasonic has an Address
if (results->decode_type == PANASONIC) {
Serial.print(results->address, HEX);
Serial.print(":");
}
// Print Code
Serial.print(results->value, HEX);
}
//+=============================================================================
// Display encoding type
//
void encoding (decode_results *results)
{
switch (results->decode_type) {
default:
case UNKNOWN: Serial.print("UNKNOWN"); break ;
case NEC: Serial.print("NEC"); break ;
case SONY: Serial.print("SONY"); break ;
case RC5: Serial.print("RC5"); break ;
case RC6: Serial.print("RC6"); break ;
case DISH: Serial.print("DISH"); break ;
case SHARP: Serial.print("SHARP"); break ;
case JVC: Serial.print("JVC"); break ;
case SANYO: Serial.print("SANYO"); break ;
case MITSUBISHI: Serial.print("MITSUBISHI"); break ;
case SAMSUNG: Serial.print("SAMSUNG"); break ;
case LG: Serial.print("LG"); break ;
case WHYNTER: Serial.print("WHYNTER"); break ;
case AIWA_RC_T501: Serial.print("AIWA_RC_T501"); break ;
case PANASONIC: Serial.print("PANASONIC"); break ;
case DENON: Serial.print("Denon"); break ;
}
}
//+=============================================================================
// Dump out the decode_results structure.
//
void dumpInfo (decode_results *results)
{
// Check if the buffer overflowed
if (results->overflow) {
Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWBUF");
return;
}
// Show Encoding standard
Serial.print("Encoding : ");
encoding(results);
Serial.println("");
// Show Code & length
Serial.print("Code : ");
ircode(results);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
}
//+=============================================================================
// Dump out the decode_results structure.
//
void dumpRaw (decode_results *results)
{
// Print Raw data
Serial.print("Timing[");
Serial.print(results->rawlen-1, DEC);
Serial.println("]: ");
for (int i = 1; i < results->rawlen; i++) {
unsigned long x = results->rawbuf[i] * USECPERTICK;
if (!(i & 1)) { // even
Serial.print("-");
if (x < 1000) Serial.print(" ") ;
if (x < 100) Serial.print(" ") ;
Serial.print(x, DEC);
} else { // odd
Serial.print(" ");
Serial.print("+");
if (x < 1000) Serial.print(" ") ;
if (x < 100) Serial.print(" ") ;
Serial.print(x, DEC);
if (i < results->rawlen-1) Serial.print(", "); //',' not needed for last one
}
if (!(i % 8)) Serial.println("");
}
Serial.println(""); // Newline
}
//+=============================================================================
// Dump out the decode_results structure.
//
void dumpCode (decode_results *results)
{
// Start declaration
Serial.print("unsigned int "); // variable type
Serial.print("rawData["); // array name
Serial.print(results->rawlen - 1, DEC); // array size
Serial.print("] = {"); // Start declaration
// Dump data
for (int i = 1; i < results->rawlen; i++) {
Serial.print(results->rawbuf[i] * USECPERTICK, DEC);
if ( i < results->rawlen-1 ) Serial.print(","); // ',' not needed on last one
if (!(i & 1)) Serial.print(" ");
}
// End declaration
Serial.print("};"); //
// Comment
Serial.print(" // ");
encoding(results);
Serial.print(" ");
ircode(results);
// Newline
Serial.println("");
// Now dump "known" codes
if (results->decode_type != UNKNOWN) {
// Some protocols have an address
if (results->decode_type == PANASONIC) {
Serial.print("unsigned int addr = 0x");
Serial.print(results->address, HEX);
Serial.println(";");
}
// All protocols have data
Serial.print("unsigned int data = 0x");
Serial.print(results->value, HEX);
Serial.println(";");
}
}
//+=============================================================================
// The repeating section of the code
//
void loop ( )
{
decode_results results; // Somewhere to store the results
if (irrecv.decode(&results)) { // Grab an IR code
dumpInfo(&results); // Output the results
dumpRaw(&results); // Output the results in RAW format
dumpCode(&results); // Output the results as source code
Serial.println(""); // Blank line between entries
irrecv.resume(); // Prepare for the next value
}
}
Так ИК дрянь еще та. И Вы тоже плаваете в программировании как батискаф. Так что начинайте с основ и не беритесь за такие задачи. Вам даже объянения не по зубам.
С приёмом одной цифры всё в порядке?
Тогда бери блинк без делей, выкидывай диод или добавь к нему переменную, где будешь считать тики. Например пришла цифра, прошло 5 тиков а второй нет - значит однозначно число. Пришла вторая за 10 тиков, а за 15 тиков больше ничего не пришло - число двухзначное. Набиваешь чарами стринг и toint.
С приёмом одной цифры всё в порядке? Тогда бери блинк без делей, выкидывай диод или добавь к нему переменную, где будешь считать тики. Например пришла цифра, прошло 5 тиков а второй нет - значит однозначно число. Пришла вторая за 10 тиков, а за 15 тиков больше ничего не пришло - число двухзначное. Набиваешь чарами стринг и toint.
проблема в том, что как только я принимаю какой то сигнал с пульта, прога начинает выполняться, ему пофиг что я нажму дальше на пульте. То есть прога воспринимает только первую нажатую кнопку, а дальше ей пофиг
ua6em пишет:
А какую помощь вы хотите?
Разные пульты передают разную кодовую последовательность, к примеру пульт от RTL-SDR:
1
FF906F
2
FFB847
3
FFF807
4
FFB04F
5
FF9867
6
FFD827
7
FF8877
8
FFA857
9
FFE817
0
FF48B7
Принимаете, присваиваете переменным значения, трудности возникнут с комбинациями 11-22-33 и т.д.
тут уже я сам запутался,но сначала логика в моих действиях была
Вот это первый признак того, что вы не знаете основ. Это как не знал , и бац забыл. Вот те крест -забыл. А знали что такое цифровой автомат и как его написать и не надо было искать пятый угол в четырех стенах. Цифровой автомат с двумя состояниями- 1-ждем первую цифру, 2 ждем вторую цифру. Когда пришла вторая цифра запустили программу и ждем 1 цифру. Ели долго ждем 2 цифру переходим в состояние ждем 1 цифру.
enum state_t {wait1num = 0, wait2num};
state_t state = wait1num;
Мне кажется что если ТС сможет себе объяснить что делают 83,89 и 92 строки то вопрос будет решён. Пока это для него загадка, можно только написать программу за него. Иначе никакие советы не помогут.
Есть у кого-нибудь готовый скетч?
Последний готовый скетч неделю назад ушёл. Новых не завозили еще.
Есть!
А что такое
двузначные цифры
и откуда они берутся на пульте?
Как его найти?
Скинешь может?
Скинешь может?
Да легко! Читает почти все типы пультов.
//------------------------------------------------------------------------------ // Include the IRremote library header // #include <IRremote.h> //------------------------------------------------------------------------------ // Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838) // int recvPin = 11; IRrecv irrecv(recvPin); //+============================================================================= // Configure the Arduino // void setup ( ) { Serial.begin(9600); // Status message will be sent to PC at 9600 baud irrecv.enableIRIn(); // Start the receiver } //+============================================================================= // Display IR code // void ircode (decode_results *results) { // Panasonic has an Address if (results->decode_type == PANASONIC) { Serial.print(results->address, HEX); Serial.print(":"); } // Print Code Serial.print(results->value, HEX); } //+============================================================================= // Display encoding type // void encoding (decode_results *results) { switch (results->decode_type) { default: case UNKNOWN: Serial.print("UNKNOWN"); break ; case NEC: Serial.print("NEC"); break ; case SONY: Serial.print("SONY"); break ; case RC5: Serial.print("RC5"); break ; case RC6: Serial.print("RC6"); break ; case DISH: Serial.print("DISH"); break ; case SHARP: Serial.print("SHARP"); break ; case JVC: Serial.print("JVC"); break ; case SANYO: Serial.print("SANYO"); break ; case MITSUBISHI: Serial.print("MITSUBISHI"); break ; case SAMSUNG: Serial.print("SAMSUNG"); break ; case LG: Serial.print("LG"); break ; case WHYNTER: Serial.print("WHYNTER"); break ; case AIWA_RC_T501: Serial.print("AIWA_RC_T501"); break ; case PANASONIC: Serial.print("PANASONIC"); break ; case DENON: Serial.print("Denon"); break ; } } //+============================================================================= // Dump out the decode_results structure. // void dumpInfo (decode_results *results) { // Check if the buffer overflowed if (results->overflow) { Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWBUF"); return; } // Show Encoding standard Serial.print("Encoding : "); encoding(results); Serial.println(""); // Show Code & length Serial.print("Code : "); ircode(results); Serial.print(" ("); Serial.print(results->bits, DEC); Serial.println(" bits)"); } //+============================================================================= // Dump out the decode_results structure. // void dumpRaw (decode_results *results) { // Print Raw data Serial.print("Timing["); Serial.print(results->rawlen-1, DEC); Serial.println("]: "); for (int i = 1; i < results->rawlen; i++) { unsigned long x = results->rawbuf[i] * USECPERTICK; if (!(i & 1)) { // even Serial.print("-"); if (x < 1000) Serial.print(" ") ; if (x < 100) Serial.print(" ") ; Serial.print(x, DEC); } else { // odd Serial.print(" "); Serial.print("+"); if (x < 1000) Serial.print(" ") ; if (x < 100) Serial.print(" ") ; Serial.print(x, DEC); if (i < results->rawlen-1) Serial.print(", "); //',' not needed for last one } if (!(i % 8)) Serial.println(""); } Serial.println(""); // Newline } //+============================================================================= // Dump out the decode_results structure. // void dumpCode (decode_results *results) { // Start declaration Serial.print("unsigned int "); // variable type Serial.print("rawData["); // array name Serial.print(results->rawlen - 1, DEC); // array size Serial.print("] = {"); // Start declaration // Dump data for (int i = 1; i < results->rawlen; i++) { Serial.print(results->rawbuf[i] * USECPERTICK, DEC); if ( i < results->rawlen-1 ) Serial.print(","); // ',' not needed on last one if (!(i & 1)) Serial.print(" "); } // End declaration Serial.print("};"); // // Comment Serial.print(" // "); encoding(results); Serial.print(" "); ircode(results); // Newline Serial.println(""); // Now dump "known" codes if (results->decode_type != UNKNOWN) { // Some protocols have an address if (results->decode_type == PANASONIC) { Serial.print("unsigned int addr = 0x"); Serial.print(results->address, HEX); Serial.println(";"); } // All protocols have data Serial.print("unsigned int data = 0x"); Serial.print(results->value, HEX); Serial.println(";"); } } //+============================================================================= // The repeating section of the code // void loop ( ) { decode_results results; // Somewhere to store the results if (irrecv.decode(&results)) { // Grab an IR code dumpInfo(&results); // Output the results dumpRaw(&results); // Output the results in RAW format dumpCode(&results); // Output the results as source code Serial.println(""); // Blank line between entries irrecv.resume(); // Prepare for the next value } }А нет ничего попроще?
Да легко! Читает почти все типы пультов.
Тема "двузначных цифр" не раскрыта!
Кстати да
Да легко! Читает почти все типы пультов.
Тема "двузначных цифр" не раскрыта!
а каких именно?
73,88 или 99?
Кстати да
что "да" то?
перевожу - вы несете сплошную пургу. поэтому вас тролят.
Двухзначных цифр не бывает, если вы это в школе не усвоили.
А готовых скетчей тут не подают, не ждите.
Пофиг, что тролят) суть то все поняли
Есть кто сможет объяснить, как считывать последовательность цифр, и сделать его двухзначным числом?
Кстати да
что "да" то?
перевожу - вы несете сплошную пургу. поэтому вас тролят.
Двухзначных цифр не бывает, если вы это в школе не усвоили.
А готовых скетчей тут не подают, не ждите.
Пофиг, что тролят) суть то все поняли
Есть кто сможет объяснить, как считывать последовательность цифр, и сделать его двухзначным числом?
Вы такие сложные вопросы задаете. Вот есть последовательность цифр "1234567890" и как из них сделать двухзначное. Надо наверное все сложить.
как Заставить ардуино принимать комбинацию цифр вводимую с пульта, например 12
Нажал кнопку 1 он прочитал, ожидание следующего сигнала, нажали кнопку 2
вот как сделать так чтобы он ждал какое-то время ещё одну цифру а только потом выполнял прогу?
Так ИК дрянь еще та. И Вы тоже плаваете в программировании как батискаф. Так что начинайте с основ и не беритесь за такие задачи. Вам даже объянения не по зубам.
как Заставить ардуино принимать комбинацию цифр вводимую с пульта, например 12
Нажал кнопку 1 он прочитал, ожидание следующего сигнала, нажали кнопку 2
вот как сделать так чтобы он ждал какое-то время ещё одну цифру а только потом выполнял прогу?
Я вижу только один простой способ разрешения вашей задачи, берёте пульт с нужным количеством кнопок и будет вам счастье
Вы тоже плаваете в программировании как батискаф
Скорее, как топор :)
Спасибо, что так четко объяснили
нет чтобы помочь
С приёмом одной цифры всё в порядке?
Тогда бери блинк без делей, выкидывай диод или добавь к нему переменную, где будешь считать тики. Например пришла цифра, прошло 5 тиков а второй нет - значит однозначно число. Пришла вторая за 10 тиков, а за 15 тиков больше ничего не пришло - число двухзначное. Набиваешь чарами стринг и toint.
для одной цифры все норм работает
Зачем чарами махать, если достаточно кастануть на число *=10?
Спасибо, что так четко объяснили
нет чтобы помочь
А какую помощь вы хотите?
Разные пульты передают разную кодовую последовательность, к примеру пульт от RTL-SDR:
Принимаете, присваиваете переменным значения, трудности возникнут с комбинациями 11-22-33 и т.д.
проблема в том, что как только я принимаю какой то сигнал с пульта, прога начинает выполняться, ему пофиг что я нажму дальше на пульте. То есть прога воспринимает только первую нажатую кнопку, а дальше ей пофиг
А какую помощь вы хотите?
Разные пульты передают разную кодовую последовательность, к примеру пульт от RTL-SDR:
Принимаете, присваиваете переменным значения, трудности возникнут с комбинациями 11-22-33 и т.д.
И где эта программа?
#include "IRremote.h" IRrecv irrecv(A0); // указываем вывод, к которому подключен приемник decode_results results; int bt = 0, p=0, b, s,a,old; const int data_pin = 2; const int sh_pin = 4; const int st_pin = 3; void setup() { Serial.begin(9600); // выставляем скорость COM порта irrecv.enableIRIn(); // запускаем прием pinMode(data_pin, OUTPUT); pinMode(sh_pin, OUTPUT); pinMode(st_pin, OUTPUT); } void shift(byte v){ for(int i=0; i<8; i++){ digitalWrite(sh_pin, LOW); digitalWrite(data_pin, v & (1 << i )); digitalWrite(sh_pin, HIGH); } digitalWrite(st_pin, HIGH); digitalWrite(st_pin, LOW); } int define( int z) { switch ( z ) { case 0xC: bt=0b00000000; return -10; break; case 0x1: bt=0b10000000; return 1; break; case 0x2: bt=0b01000000; return 2; break; case 0x3: bt=0b00100000; return 3; break; case 0x4: bt=0b00010000; return 4; break; case 0x5: bt=0b00001000; return 5; break; case 0x6: bt=0b00000100; return 6; break; case 0x7: bt=0b00000010; return 7; break; case 0x8: bt=0b01000000; return 8; break; case 0x9: bt=0b01000000; return 9; break; case 0x0: bt=0b00000000; return 0; break; } } void loop() { if ( irrecv.decode( &results )) { // если данные пришли Serial.println("Kod= "); Serial.println( results.value, DEC ); // печатаем данные p=define( results.value)*10; Serial.println("P= "); Serial.println(p ); // печатаем данные irrecv.resume(); // принимаем следующую команду } Serial.println(define( results.value) ); // печатаем данные s=p+define( results.value); // Serial.println("p= "); //Serial.println( p, BIN ); // печатаем данные //Serial.println("p*10= "); //Serial.println( p*10, BIN ); // печатаем данные //Serial.println("b= "); //Serial.println( b, BIN ); // печатаем данные Serial.println("s= "); Serial.println(s ); // печатаем данные Serial.println("________________________"); switch ( s ) { case 0xC: bt=0b00000000; break; case 0x1: bt=0b10000000; break; case 0x2: bt=0b01000000; break; } shift(bt); } }тут уже я сам запутался,но сначала логика в моих действиях была
enum state_t {wait1num = 0, wait2num}; state_t state = wait1num;Вопрос? А пульт то у Вас какой системы?
От телевизора lg вроде, это имеет какое то значение?
Вопрос? А пульт то у Вас какой системы?
Естественно! Каждая марка пульта гонит свои коды кнопок
Я то понимаю это, но проблем с этим у меня нет
Естественно! Каждая марка пульта гонит свои коды кнопок
Я то понимаю это, но проблем с этим у меня нет
Естественно! Каждая марка пульта гонит свои коды кнопок
И какие именно коды кнопок гонит ваш пульт?
Как и есть) 1 - 1, 2 - 2 и так далее. У меня в кейсаях прописано это
Я то понимаю это, но проблем с этим у меня нет
Естественно! Каждая марка пульта гонит свои коды кнопок
И какие именно коды кнопок гонит ваш пульт?
Этого не может быть, потому, что не может быть никогда.
Залейте код, что я приводил и посмотрите, тогда станет понятно, что и как
Этого не может быть, потому, что не может быть никогда.
Залейте код, что я приводил и посмотрите, тогда станет понятно, что и как
скину позже скрин
Этого не может быть, потому, что не может быть никогда.
Залейте код, что я приводил и посмотрите, тогда станет понятно, что и как
и да, я же сказал уже, что у меня работало с однозначными числами
Почему-то вспомнилась шутка про "Поле чудес":
- Угадал все буквы, но не смог назвать слово! (про милиционера, теперь - полисмена).
;) ;) ;)
Почему-то вспомнилась шутка про "Поле чудес":
- Угадал все буквы, но не смог назвать слово! (про милиционера, теперь - полисмена).
;) ;) ;)
Самое главное ТС в полнейшей уверенности в своей правоте )))
Мне кажется что если ТС сможет себе объяснить что делают 83,89 и 92 строки то вопрос будет решён. Пока это для него загадка, можно только написать программу за него. Иначе никакие советы не помогут.