Нужна помощь с кодом.

Тема в разделе "Arduino & Shields", создана пользователем AngelLeo, 17 июн 2016.

  1. AngelLeo

    AngelLeo Нуб

    в том и беда что sendSony работает на ура
    а sendSamsung нет 0.JPG
     
  2. AngelLeo

    AngelLeo Нуб

    Возможно я что не так делаю, библиотека вроде та же. по весу один в один. да и все равно хочется добиться именно raw так легче будет в дальнейшем. Не заморачиваться с кодом к примеру при покупке нового кондиционера. Закинул 10 файлов с кодом кнопок от кондюшника и ничего править ненужно в коде к примеру с 50 по 60 файл именно кондей с 1 по 49 телевизор с 61 по 70 хоть унитаз. и суть меняется только по отправке номера по bluetooth или wifi отправил 1 включил телик, отправил 50 включил кондей, отправил 70 смыл унитаз)))) это ближе к понятию УНИВЕРСАЛЬНЫЙ ПУЛЬТ все вплоть до жалюзи и света в ванной в 1 устройстве
     
  3. AlexU

    AlexU Гуру

    sendSAMSUNG
    'C/C++' регистрозависимый язык.

    Хоть бы заглянули внутрь 'IRemote.h'
     
  4. AngelLeo

    AngelLeo Нуб

    Как сказал один умный человек лень двигатель прогресса. мне лень пользоваться десятком пультов вечно рыская по квартире в поисках этого зла. будет легче 1 пульт вкрутить к примеру в потолок и забыть про эту проблему на века. думаю в современно мире у всех есть смартфон, и думаю не ошибусь сказав, что даже на горшке большинство сидит со смартфоном как и я со своей Z ultra
     
  5. AngelLeo

    AngelLeo Нуб

    пробовал по разному
    к примеру на sony там всего 10 строчек кода и все работает очень просто
    0.JPG
    а с самсунгом в подобном варианте это танци с бубном

    #include <IRremote.h>
    #include <IRremoteInt.h>

    //Samsung remote control

    #define SAMSUNG_HDR_MARK 4674
    #define SAMSUNG_HDR_SPACE 4703
    #define SAMSUNG_ONE_MARK 573
    #define SAMSUNG_ONE_SPACE 1663
    #define SAMSUNG_ZERO_SPACE 534
    #define SAMSUNG_PTRAIL 556
    #define SAMSUNG_GAP 48962

    IRsend irsend;

    void IRsend::sendSamsung(unsigned long data, int nbits,int repeat){
    enableIROut(38);

    mark(SAMSUNG_HDR_MARK);
    space(SAMSUNG_HDR_SPACE);
    //Invio il pre_data 0xE0E0 del protocollo http://lirc.sourceforge.net/remotes/samsung/AA59-00382A
    unsigned long pre_data = 0xE0E0;
    pre_data <<= 16;
    for (int i = 0; i < 16; i++) {
    if (pre_data & TOPBIT) {
    mark(SAMSUNG_ONE_MARK);
    space(SAMSUNG_ONE_SPACE);
    }
    else {
    mark(SAMSUNG_ONE_MARK);
    space(SAMSUNG_ZERO_SPACE);
    }
    pre_data <<= 1;
    }
    //Ora trasmetto il mio segnale
    data = data << (32-nbits);
    for (int i = 0; i < 16; i++) {
    if (data & TOPBIT) {
    mark(SAMSUNG_ONE_MARK);
    space(SAMSUNG_ONE_SPACE);
    }
    else {
    mark(SAMSUNG_ONE_MARK);
    space(SAMSUNG_ZERO_SPACE);
    }
    data <<= 1;
    }
    //aggiungo il trail
    mark(SAMSUNG_PTRAIL);
    space(48962); //gap
    }



    void setup()
    {
    Serial.begin(9600);
    pinMode(13,OUTPUT);
    }

    void loop() {
    digitalWrite(13,HIGH);
    for(int i=0;i<3;i++) {
    irsend.sendSamsung(0x807F, 16,i); // Samsung code for changing the Video Source
    delay(45);
    }
    digitalWrite(13,LOW);
    delay(500);
    }
    но он после внесения всех кнопок все равно не влазит в arduino
     
  6. DIYMan

    DIYMan Guest

    Значит, надо оптимизировать. Зачем вам держать коды всех кнопок в оперативке? Это совершенно излишне. Первое, что приходит на ум - это каждый код - в отдельный файл с номером кода. Второе, что приходит на ум - типизированный файл, с записями строго фиксированного размера, тогда можно легко по номеру кода вычислить смещение в файле для чтения.

    Алгоритм такой: запросили ардуину послать код с номером 123 - она читает из файла именно этот код, всё. Далее уже можно накрутить кэширование самых часто вызываемых кодов, держа их в оперативке.

    Но все все все коды вычитывать - незачем, память не резиновая.

    З.Ы. Это если я правильно понял проблему, почему не влезает.
     
  7. AngelLeo

    AngelLeo Нуб

    Я приверженец стиля кода как у китайцев все без заморочек и просто.

    в идеале вообще все работает в коде ))) по китайскому стилю который был изначально написан

    #include <IRremote.h>
    int khz = 38; // 38kHz —астота сигнала

    // Кнопки пульта код RAW
    // Power (1) Encoding : SAMSUNG / Code : E0E040BF (32 bits) / Timing[67]
    unsigned int irSignalPwr[] = {4600, 4400, 650, 1600, 650, 1600, 650, 1600, 600, 500, 650, 450, 650, 500, 650, 450, 650, 500, 600, 1600, 650, 1600, 650, 1600, 650, 450, 650, 500, 650, 450, 650, 500, 600, 500, 650, 500, 600, 1600, 650, 500, 600, 500, 650, 500, 600, 500, 650, 450, 650, 500, 600, 1650, 600, 500, 650, 1600, 600, 1650, 600, 1600, 650, 1600, 650, 1600, 650, 1600, 650}; // SAMSUNG E0E040BF
    // Source (2) Encoding : SAMSUNG / Code : E0E0807F (32 bits) / Timing[67]
    unsigned int irSignalSrc[] = {4600, 4400, 650, 1600, 650, 1600, 600, 1650, 600, 500, 650, 450, 650, 500, 600, 500, 650, 500, 600, 1600, 650, 1600, 650, 1600, 650, 450, 650, 500, 650, 450, 650, 500, 600, 500, 650, 1600, 650, 450, 650, 500, 600, 500, 650, 450, 650, 500, 650, 450, 650, 500, 600, 500, 650, 1600, 650, 1600, 600, 1600, 650, 1600, 650, 1600, 650, 1600, 650, 1600, 600}; // SAMSUNG E0E0807F

    // Chenal 1 (3) Encoding : SAMSUNG / Code : E0E020DF (32 bits) / Timing[67]
    unsigned int irSignalCh1[] = {4550, 4450, 600, 1650, 650, 1600, 600, 1650, 600, 550, 600, 500, 600, 500, 650, 500, 550, 550, 600, 1650, 600, 1650, 550, 1700, 600, 500, 600, 500, 600, 550, 550, 550, 600, 550, 550, 550, 600, 500, 600, 1650, 600, 550, 600, 500, 600, 500, 600, 550, 550, 550, 600, 1650, 600, 1650, 600, 500, 600, 1650, 600, 1650, 600, 1650, 550, 1650, 600, 1650, 600}; // SAMSUNG E0E020DF
    // Chenal 2 (4) Encoding : SAMSUNG / Code : E0E0A05F (32 bits) / Timing[67]
    unsigned int irSignalCh2[] = {4600, 4400, 650, 1600, 600, 1650, 600, 1600, 650, 500, 600, 500, 650, 500, 600, 500, 650, 450, 650, 1600, 650, 1600, 650, 1600, 600, 500, 650, 500, 600, 500, 650, 450, 650, 500, 600, 1650, 600, 500, 650, 1600, 600, 500, 650, 500, 600, 500, 650, 450, 650, 500, 600, 500, 650, 1600, 650, 450, 650, 1600, 650, 1600, 650, 1600, 650, 1600, 600, 1600, 650}; // SAMSUNG E0E0A05F
    // Chenal 3 (5) Encoding : SAMSUNG / Code : E0E0609F (32 bits) / Timing[67]
    unsigned int irSignalCh3[] = {4500, 4500, 600, 1650, 550, 1700, 600, 1650, 550, 550, 600, 550, 500, 600, 550, 550, 550, 600, 500, 1750, 550, 1650, 550, 1750, 500, 600, 500, 600, 550, 550, 550, 600, 550, 550, 550, 600, 550, 1650, 550, 1700, 550, 600, 500, 600, 550, 600, 550, 550, 600, 500, 550, 1700, 600, 500, 600, 550, 600, 1600, 600, 1650, 600, 1650, 600, 1650, 550, 1700, 600}; // SAMSUNG E0E0609F
    // Chenal 4 (6) Encoding : SAMSUNG / Code : E0E010EF (32 bits) / Timing[67]
    unsigned int irSignalCh4[] = {4550, 4450, 600, 1650, 600, 1650, 550, 1700, 550, 550, 550, 600, 550, 550, 600, 500, 600, 550, 550, 1700, 550, 1650, 600, 1650, 600, 550, 550, 550, 600, 500, 600, 550, 550, 550, 600, 550, 550, 550, 600, 500, 600, 1650, 550, 600, 550, 550, 550, 550, 600, 550, 550, 1700, 550, 1650, 600, 1650, 600, 550, 550, 1650, 600, 1650, 550, 1700, 550, 1700, 550}; // SAMSUNG E0E010EF
    // Chenal 5 (7) Encoding : SAMSUNG / Code : E0E0906F (32 bits) / Timing[67]
    unsigned int irSignalCh5[] = {4500, 4500, 550, 1700, 550, 1700, 550, 1650, 600, 550, 600, 500, 600, 550, 550, 550, 550, 600, 550, 1650, 600, 1650, 600, 1650, 550, 550, 600, 550, 550, 550, 550, 600, 550, 550, 550, 1700, 550, 550, 600, 550, 550, 1650, 550, 600, 550, 550, 600, 550, 550, 550, 550, 550, 600, 1650, 600, 1650, 550, 550, 550, 1700, 550, 1700, 550, 1700, 550, 1650, 600}; // SAMSUNG E0E0906F
    // Chenal 6 (8) Encoding : SAMSUNG / Code : E0E050AF (32 bits) / Timing[67]
    unsigned int irSignalCh6[] = {4550, 4450, 600, 1650, 550, 1700, 600, 1650, 550, 550, 600, 550, 550, 550, 550, 550, 600, 550, 550, 1700, 550, 1650, 600, 1650, 600, 550, 550, 550, 550, 550, 600, 550, 550, 550, 600, 550, 550, 1650, 600, 550, 550, 1700, 550, 550, 550, 550, 600, 550, 550, 550, 600, 1650, 550, 550, 600, 1700, 500, 600, 550, 1650, 600, 1650, 600, 1650, 600, 1650, 600}; // SAMSUNG E0E050AF
    // Chenal 7 (9) Encoding : SAMSUNG / Code : E0E030CF (32 bits) / Timing[67]
    unsigned int irSignalCh7[] = {4550, 4450, 600, 1650, 600, 1650, 550, 1700, 550, 550, 600, 500, 600, 550, 550, 550, 550, 600, 550, 1650, 600, 1650, 600, 1650, 600, 500, 600, 550, 600, 500, 600, 550, 550, 550, 600, 500, 600, 550, 600, 1650, 550, 1650, 600, 550, 600, 500, 600, 550, 550, 550, 600, 1650, 600, 1650, 550, 550, 600, 500, 600, 1650, 600, 1650, 550, 1700, 600, 1650, 550}; // SAMSUNG E0E030CF
    // Chenal 8 (10) Encoding : SAMSUNG / Code : E0E0B04F (32 bits) / Timing[67]
    unsigned int irSignalCh8[] = {4500, 4500, 550, 1700, 550, 1700, 550, 1650, 600, 550, 550, 600, 500, 600, 550, 550, 550, 550, 600, 1700, 550, 1650, 600, 1650, 550, 600, 550, 550, 550, 550, 550, 550, 600, 550, 550, 1700, 550, 550, 550, 1700, 550, 1700, 550, 550, 550, 600, 550, 550, 550, 600, 550, 550, 550, 1650, 600, 550, 550, 600, 500, 1700, 600, 1650, 550, 1700, 550, 1700, 550}; // SAMSUNG E0E0B04F

    IRsend irsend;

    void setup()
    {
    Serial.begin(9600); //установка порта на скорость 9600 бит/сек
    }

    void loop() {


    while (Serial.available() == 0); // ”ункция Serial.аvailable() проверЯет, есть ли в COM порте доступные длЯ чтениЯ данные!
    int val = Serial.parseInt(); // —итаем строку целиком
    Serial.println(val); // ‚ывод в терминал

    if (val == 1) irsend.sendRaw(irSignalPwr, sizeof(irSignalPwr) / sizeof(irSignalPwr[0]), khz); //КЉнопка Power
    if (val == 2) irsend.sendRaw(irSignalSrc, sizeof(irSignalSrc) / sizeof(irSignalSrc[0]), khz); //КЉнопка Source

    if (val == 3) irsend.sendRaw(irSignalCh1, sizeof(irSignalCh1) / sizeof(irSignalCh1[0]), khz); //КЉнопка канал 1
    if (val == 4) irsend.sendRaw(irSignalCh2, sizeof(irSignalCh2) / sizeof(irSignalCh2[0]), khz); //КЉнопка канал 2
    if (val == 5) irsend.sendRaw(irSignalCh3, sizeof(irSignalCh3) / sizeof(irSignalCh3[0]), khz); //КЉнопка канал 3
    if (val == 6) irsend.sendRaw(irSignalCh4, sizeof(irSignalCh4) / sizeof(irSignalCh4[0]), khz); //КЉнопка канал 4
    if (val == 7) irsend.sendRaw(irSignalCh5, sizeof(irSignalCh5) / sizeof(irSignalCh5[0]), khz); //КЉнопка канал 5
    if (val == 8) irsend.sendRaw(irSignalCh6, sizeof(irSignalCh6) / sizeof(irSignalCh6[0]), khz); //КЉнопка канал 6
    if (val == 9) irsend.sendRaw(irSignalCh7, sizeof(irSignalCh7) / sizeof(irSignalCh7[0]), khz); //КЉнопка канал 7
    if (val == 10) irsend.sendRaw(irSignalCh8, sizeof(irSignalCh8) / sizeof(irSignalCh8[0]), khz); //КЉнопка канал 8

    delay(100); //делаем небольшую паузу
    }

    все примитивно но работает и ооочень быстро. минус в том, что не хватает места на ардуине.
    кирилица в коментах мальца побилась.
    скинул кусочек кода.
    весь не входит там 44 кнопки
     
  8. DIYMan

    DIYMan Guest

    Ааа, ну тогда я без претензий :) Берите Мегу, там оперативки больше. Если прямо вот хочется в оперативку всё положить. Можно ведь и во флеш кинуть, не сильно и медленнее. Гуглить по слову PROGMEM.
     
  9. AngelLeo

    AngelLeo Нуб

    Вот я и пытаюсь упростить и оптимизировать. скинув по сути raw всех кнопок хоть пол милиона на флешку.
    а при нажатии на кнопку посылать к примеру 1 она открывает файл 1 и содержимое подгружает в код, отправляет закрывает файл и ждет дальше.
     
  10. DIYMan

    DIYMan Guest

    Вам ещё раз код написать? В случае, когда в одном файле - один код - всё ещё проще, только надо определиться, в каком формате файл - в текстовом или бинарном? В смысле - как хранится код кнопки: текстом или байтами?
     
  11. AngelLeo

    AngelLeo Нуб

    У меня получается,что код работает при вводе номера кнопки файл загружается. Все нормально отписывается в терминал, но я не могу отправить содержимое файла так как dataFile нормально отображается в char или string а при попытке воткнуть значение в unsigned int для отправки я получаю кашу. Перепробовал кучу вариантов конвертации но получаю или смешение запятых и смену номеров, или только цифры, или вообще какуюто кракозябру. а ума вывести значение в буфер или еще куда, не хватает. Так как я не программист. технарь я, могу спаять все, что угодно, делаю платы, могу прошить почти все а программировать не научился мне легче зажаренный ноут воскресить или мать перепоять чем в коде разобраться.
     
  12. AngelLeo

    AngelLeo Нуб

    Больше 10 лет в сервисном сижу. Паять научился, а вот программировать только учусь! По книжкам, из постов в сети и т.п. самоучка я. И некоторые замуты сложно понять. из за незнания что это и как это готовить. По профессии я вообще повар/кондитер.
     
  13. DIYMan

    DIYMan Guest

    Что именно у вас не получается - я не понял? Куда надо "отправить содержимое файла"? Вам надо прочитать из текстового файла числа, разделённые запятыми, и их послать куда-то? Я вам дал код на ардуинору, который как раз читает файл, парсит числа по разделителю и складывает их в массив - чем не устроило-то?

    Здесь его продублировать что-ль?
     
  14. DIYMan

    DIYMan Guest

    Все мы самоучки.
     
  15. AngelLeo

    AngelLeo Нуб

    Уважаемый DIYMan я понял, что вы скинули код. Для вас это как 2 байта отослать подобный код написать. Думаю не ошибусь, что вы на программиста учились или учитесь или возможно в меру раннего увлечения вы перечитали массу книг. Реально респект. С детства уважаю людей которые развиваются. Беда в том, что для одного просто, другому кажется темным лесом. Я никогда еще не работал с буфером и не парсил что либо. Поэтому легкий код для вас это головоломка для меня. А понять как это работает хочется. к несчастью уже 4 ночи и пора идти пить посмотреть пару серий сериала Criminal Minds и спать. завтра с утра обязательно попытаюсь вникнуть в ваш код и разобраться. И естественно спасибо за код. Главное что я понял как это должно выглядеть а остальное дело времени. и да С++ я в глаза не видел ((( самоучил только delphi из за простоты самообучения. Графика всетаки.
     
  16. DIYMan

    DIYMan Guest

    Ошибётесь - я на 200% самоучка.
    Вот именно поэтому я вам сначала привёл не код, а алгоритм ;) Поймите, любая программа, по сути - это набор действий по определённым условиям, всё. И если вы научитесь мыслить категориями алгоритма, вроде "если условие такое-то - сделать то-то", то вам будет неважно, на каком языке написан код - вы будете видеть алгоритм. Именно в этом и заключается программирование, а написание кода - это кодерство, реализация алгоритма выбранным инструментом (читай, на языке программирования).
     
  17. AngelLeo

    AngelLeo Нуб

    Еще больше уважения! за 200 процентов самоучки.
     
  18. AngelLeo

    AngelLeo Нуб

    проблема в том что в вашем коде мне в новинку ))))
    writeIndex, buffer ! что значит (!) , что такое &&, char* что такое (*) никогда не сталкивался ))) завтра буду искать что это и с чем это едят
     
  19. AngelLeo

    AngelLeo Нуб

    И да с английским у меня на уровне средней школы , то есть знаний мало а 90 % мануалов на инглише. инглиш пока начал только учить...
     
  20. AngelLeo

    AngelLeo Нуб

    Поколение ZXспектрума с гипертерминалом в поисках знаний )))