Rs232 как сформировать и послать команду с ардуино на устройство и получить ответ .чековый принтер

Тема в разделе "Arduino & Shields", создана пользователем Дятел, 9 авг 2021.

  1. Дятел

    Дятел Нерд

    Ну и задачки задаете :)
    но мне чего-то кажется что мой вариант загнать в массив посимвольно как ваш пример 1100 1011
    char exampl[8]={1,1,0,0,1,0,1,1}
    а потом сравнить. Так как выяснять значение нужно почти у каждого байта
     
  2. b707

    b707 Гуру

    сложно придумать более неудачное решение, как преобразовывать это в чары...
     
  3. Дятел

    Дятел Нерд

    практика решения конкретной задачи покажет.
    Вариант, предложенный akl я не совсем понял, поэтому мне кажется мой вариант лучше, но на деле сравню оба варианта
     
  4. b707

    b707 Гуру

    порядок слов перепутали - надо писать "я совсем не понял"
    А если серьезно - вам надо в этом разобраться (в битовых операциях), у вас весь обмен с принтером на них построен. А если не понимаете - не сможете написать работающую программу.
     
  5. Дятел

    Дятел Нерд

    спасибо, буду разбираться. и нужно и интересно.
    Хотя, честно говоря, несмотря на пробелы в знаниях, все поставленные в этой ветке проблемы мне удалось решить.
    Особе спасибо akl :)
     
  6. akl

    akl Гуру

    дело в том, что чтобы "загнать посимвольно" надо как-то узнать какой из битов 1 и какой 0. а сделать это можно только побитовым сложением &
     
  7. akl

    akl Гуру

    напихать биты из байта в строку можно вот так например
    Код (C++):
    char bits[]="01234567";
    void bytetostr(unsigned char b, char* arr, int arrlen){
        int i=0;
        for( ; i<arrlen-1 && i<8 ;i++){
            arr[i]=!!(b&(1<<i));
            arr[i]+='0';
        }
        arr[i]=0;
    }
    unsigned char x = 0b11001011;
    bytetostr(x, bits, sizeof(bits));
    Serial.print(bits);
    насчет 400 страниц не ной - там очень крупный шрифт и много картинок, книга для детей все таки. Но ее надо прочитать чтоб понимать хотя бы чем бит от байта отличается. И она в целом развлекательная и не скучная - это не учебник какой-то
     
    Последнее редактирование: 10 авг 2021
  8. b707

    b707 Гуру

    интересные "биты" у вас :)
    Код (C++):
    char bits[]="01234567";
     
  9. akl

    akl Гуру

    эти биты ненастоящие
    [​IMG]
     
    Daniil и Дятел нравится это.
  10. Дятел

    Дятел Нерд

    1. стал разбираться с этим, и не видел ваши последние посты.
    2. уперся в то, как получить данные от принтера в двоичном коде для последующей обработки
    3. решил попробовать свой вариант:
    Код (C++):
        int resive_dat= mySerial.read();
    Serial.println(resive_dat, DEC);
    Serial.println(bitRead(resive_dat, 0));
    и далее остальные
     
    и проверить их на наличие 1.
    Вроде очень просто и наглядно.
    проверил - все работает.
    Или в моем методе есть какие-то подводные камни, которых не вижу?

    4.
    там много чего знаю, такие книги читать для меня тяжело :)
    но нашел и много интересного. книгу еще вчера скачал. буду изучать. спасибо

    5.
    уперся в то как получить число в двоичном коде типа вашего 0b11001011
    из сериал от принтера
     
    Последнее редактирование: 10 авг 2021
  11. akl

    akl Гуру

    скобка пропущена одна.
    а так - нормальный способ. тем более что внутри там почти то же самое
    #define bitRead(value, bit) (((value) >> (bit)) & 0x01)
    макрос с битовыми операциями

    получить куда? тащемта, там все числа в двоичном коде ибо это конпуктер

    кстати есть еще один способ выводить в сериал в двоичном формате числа -
    Serial.print(x, BIN);
    но там старшие разряды если они нулевые не будут выводиться.
    то есть вместо 00011010 будет 11010
     
    Последнее редактирование: 10 авг 2021