Вывод корявых данных
- Войдите на сайт для отправки комментариев
Добрый день, прощу помочь найти ошибку в коде
Есть весы и есть чековый принтер CB-910, нужно чтобы в чеке было прописано (модель весов, серийник весов, начало чека, время дата и конец чека) это все получилось сделать.
#include "microDS3231.h" MicroDS3231 rtc; #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX #include "sav_button.h" SButton button1(4,50,2000,4000,1000); SButton button2(3,50,2000,4000,1000); void setup(){ Serial.begin(9600); mySerial.begin(9600); button1.begin(); button2.begin(); if (rtc.lostPower()) { rtc.setTime(COMPILE_TIME); } //rtc.setTime(SEC, MIN, HOUR, DAY, MONTH, YEAR); // устанвока времени вручную } void loop(){ if (Serial.available()) mySerial.write(Serial.read()); int buff = Serial.read(); if (buff == 'S') { mySerial.print(rtc.getHours()); mySerial.print(":"); mySerial.print(rtc.getMinutes()); mySerial.print(":"); mySerial.print(rtc.getSeconds()); mySerial.print(" "); } switch( button1.Loop() ){ case SB_CLICK: mySerial.print("***************\r\nBW-60RB\r\nS/N: 014330529\r\n\r\nSTART TIME: "); mySerial.print(rtc.getHours()); mySerial.print(":"); mySerial.print(rtc.getMinutes()); mySerial.print(":"); mySerial.print(rtc.getSeconds()); mySerial.print("\r\nDATE:"); mySerial.print(" "); mySerial.print(rtc.getDate()); mySerial.print("/"); mySerial.print(rtc.getMonth()); mySerial.print("/"); mySerial.println(rtc.getYear()); mySerial.print("\r\n"); break; case SB_LONG_CLICK: mySerial.println("Speed 9600"); break; } switch( button2.Loop() ){ case SB_CLICK: mySerial.print("\r\nEND TIME: "); mySerial.print(rtc.getHours()); mySerial.print(":"); mySerial.print(rtc.getMinutes()); mySerial.print(":"); mySerial.print(rtc.getSeconds()); mySerial.print("\r\nDATE:"); mySerial.print(" "); mySerial.print(rtc.getDate()); mySerial.print("/"); mySerial.print(rtc.getMonth()); mySerial.print("/"); mySerial.println(rtc.getYear()); mySerial.print("\r\nSIGNATURE\r\n***************"); break; case SB_LONG_CLICK: mySerial.println("Organika"); break; } }
И осталось только сделать, что когда приходит строчка веса, то тоже добавлялось время к этой строчке, НО где то ошибка, строчка эта при каждом нажатии прилетает , как попало, только один раз выдало нормальный результат на 4 нажатии (реализовано это поиском литеры S, которая всегда прилетает в весе и после того,как ее находим, выводим время)
-0000005 S
0000007 G S
-000.0007 S
-000.0006 G 17:55:59
000000 G 17:56:35
-000.006 G 17:56:44
-000.0006G S
-000.00 G S-000.006 G S
-000.0006 G S
-00.006 S-000.0006 G S-0000006G S
-000.0005 G S
-000.0010G S
фигурные скобки в коде правильно расставьте. У вас при приходе символа с весов в строке 24 выполняется только строчка 25, а не весь блок проверки литеры. как наверно вы предполагаете...
Да и вот это непонятно зачем сделано.
Да и вот это непонятно зачем сделано.
ну да, так один символ всегда теряется
Да и вот это непонятно зачем сделано.
ну да, так один символ всегда теряется
Получается и эти строки не правильные?
Уже варианта 4 скобок пробовал, при которых компиляцию проходит, но так же не работает(
Да и вот это непонятно зачем сделано.
Как тогда можно по другому реализовать, добавление времени к строчке с весов?
на другом форуме мне посоветовали сделать так
но BYTE больше не поддерживается
Что такое BYTE? Вы хоть объясните, что пытаетесь сделать в этом фрагменте.
Уже варианта 4 скобок пробовал, при которых компиляцию проходит, но так же не работает(
не надо пробовать варианты, надо разобраться. что эти скобки значат и сделать правильно
Что такое BYTE? Вы хоть объясните, что пытаетесь сделать в этом фрагменте.
Пытаюсь после строчки веса, добавить строчку времени
но BYTE больше не поддерживается
зачем там BYTE. можете обьяснить?
но BYTE больше не поддерживается
зачем там BYTE. можете обьяснить?
К сожалению нет(
Если бы я хорошо разбирался , я бы не спрашивал).А так за такой скетч мне выставляли счет в 15к , а по итогу методом проб и ошибок и конечно благодаря вашим подсказкам , получилось сделать все самому, кроме последнего момента , в котором дико туплю
Если уж очень хотите написать слово BYTE, то вот так: mySerial.write((byte)buff);
Но особого смысла в в данном случае нет.
Уже варианта 4 скобок пробовал, при которых компиляцию проходит, но так же не работает(
не надо пробовать варианты, надо разобраться. что эти скобки значат и сделать правильно
И если литера S не выполняется, то почему иногда проскакивает нормальный вариант?
И если литера S не выполняется, то почему иногда проскакивает нормальный вариант?
у вас там несколько ошибок накладывается. поэтому иногда работает, иногда нет.
И если литера S не выполняется, то почему иногда проскакивает нормальный вариант?
у вас там несколько ошибок накладывается. поэтому иногда работает, иногда нет.
Ошибки только в скобках? Или есть еще где то? Если я разберусь со скобками, то остальное все норм?) будет работать?)
откуда же я могу знать:) надо исправить те ошибки, что нашли - и дальше посмотреть, заработает или нет.
Найти ошибки просто просмотром кода не всегда выходит, например, тот косяк, что указал sadman - я не заметил. Так что не факт, что найденные ошибки - последние.
за такой скетч мне выставляли счет в 15к , а по итогу методом проб и ошибок ...получилось сделать все самому, кроме последнего момента
насколько я помню, начальное ТЗ за 15К было совсем другим. Там была куча разных типов весов, подключенных одновременно к одной ардуине, были какие-то "секретные коды", переворачивающие текст и печать должна была осуществляться вовсе не в терминал.
То что сейчас делаете вы - это даже не четверть того, на что вы сначала замахивались, так что ваша похвальба "просили 15к, а в итоге написал три строки и все работает" мягко говоря вранье. Да и эти "три строки" вы уже вымучиваете вторую неделю...
за такой скетч мне выставляли счет в 15к , а по итогу методом проб и ошибок ...получилось сделать все самому, кроме последнего момента
насколько я помню, начальное ТЗ за 15К было совсем другим. Там была куча разных типов весов, подключенных одновременно к одной ардуине, были какие-то "секретные коды", переворачивающие текст и печать должна была осуществляться вовсе не в терминал.
То что сейчас делаете вы - это даже не четверть того, на что вы сначала замахивались, так что ваша похвальба "просили 15к, а в итоге написал три строки и все работает" мягко говоря вранье. Да и эти "три строки" вы уже вымучиваете вторую неделю...
Ничего подобного не было, было конкретное ТЗ с картинками , чтоб всем все понятно было.
Тема на форуме все могут ознакомиться.
Вот именно за такое просить 15к, человеку который в этом разбирается работы на 15 минут.
Для человека который, первый раз держит ардуину в руках, получилось разобраться за неделю, считаю норм.
Ибо тема там на форуме одного действующего лица
Вам конечно спасибо большое, ткнули носом пару раз, но опять же все додумывал сам, даже сейчас нет, чтобы конкретно исправить мои ошибки , все делаете для того , чтобы я еще 2 недели вымучивал код)
Зачем это нам?
а зачем форум? я же не прошу полностью код мне написать.
Ладно к чему полемика эта вся? нет так нет, сам буду разбираться
Ну так разобрались?
Теперь делайте сами - за 15 минут.
И нечего здесь на форуме надоедать своими причитаниями. Форум не для того, чтобы делать работу за халявщиков.
а зачем форум?
Я с b707 на форуме переписываюсь, например.
я же не прошу полностью код мне написать.
Дак вот мы и не пишем. Никому. Даже девочкам.
Ладно к чему полемика эта вся? нет так нет, сам буду разбираться
к тому что вы либо платите, либо разбираетесь сами. А выбрать самостоятельный путь по подсказкам форума и при этом ныть "какие все жадные" - как-то не очень красиво.
А что каается цен - теперь, когда вы всему научились и узнали, как легко зарабатывать на программировании - можете сами выставлять ценник 15К за три строчки текста... :) потом расскажете, сколько заработали. ладно? :)
Злые вы все))
Ладно к чему полемика эта вся? нет так нет, сам буду разбираться
к тому что вы либо платите, либо разбираетесь сами. А выбрать самостоятельный путь по подсказкам форума и при этом ныть "какие все жадные" - как-то не очень красиво.
А что каается цен - теперь, когда вы всему научились и узнали, как легко зарабатывать на программировании - можете сами выставлять ценник 15К за три строчки текста... :) потом расскажете, сколько заработали. ладно? :)
Да не ныл я о цене, это рынок. Есть спрос и есть предложение. Так что тут все норм. Я тоже когда то за 5 проводков припаяных 4к брал))
Еще раз вам спасибо за помощь)
Попробую разобраться, не получится да и фиг с ним, основное сделано.
и дальше намерен так же делать.
Когда я тыкаю вас носом - я делаю это именно с целью того, чтобы вы додумывали сами. И разобрались, как правильно делать, а не бегали на форум из-за каждой скобки и каждых одинарных-двойных кавычек. в конце-концов. это в ваших же интересах. Поняв общий принцип - вы всегда сможете поменять код под свои нужды. если захотите расширить функционал или сделать что-то новое.
В отличии от этого, если "конуретно исправить ваши ошибки" - ы ничего не поймете и так и будете сидеть с недоделанным кодом, не смея исправить в нем ни буквы.
Вычитал про ещё вот такие варианты поиска нужных мне данных
char target[] = "S"
void loop(){
if (Serial.available())
mySerial.write(Serial.read());
if (Serial.find(target)){
mySerial.println(rtc.getHours());
mySerial.println(":");
mySerial.println(rtc.getMinutes());
mySerial.println(":");
mySerial.println(rtc.getSeconds());
mySerial.println(" ");
}
И 2ой способ
if(Serial.find(«S»))
Или
Serial.findUntil («S»);
mySerial.println(rtc.getHours());
mySerial.println(":");
mySerial.println(rtc.getMinutes());
mySerial.println(":");
mySerial.println(rtc.getSeconds());
mySerial.println(" ");
}
Жизне способные варианты?
после долгой доработки напильником возможно что-то выйдет, но вряд ли этот подход оправдан, когда вы ищете всего одну литеру.
Кроме того, конкретные приведенные куски кода абсолютно нерабочие. Если взять к примеру, первый пример(сорри за тафтологию) - в нем у вас перестанет что-либо выводится на печать. кроме строчек времени.
И ошибку, на которую указывал Садман - вы в этом коде снова повторили, первый байт потока всегда теряется.
Добавка - эти идеи сродни использованию parseInt(). которое мы с вами уже проходили
Вот нигде не нашел примера char buff = Serial.read(), который мне посоветовали
void loop(){
char buff = Serial.read();
mySerial.write(buff);
if (buff == 'S') {
mySerial.print(rtc.getHours());
mySerial.print(":");
mySerial.print(rtc.getMinutes());
mySerial.print(":");
mySerial.print(rtc.getSeconds());
mySerial.print(" ");
}
работает?
работает?
Через час смогу проверить, пока не на месте.
Спасибо большое) время выдает, а вот сам вес нет
Спасибо большое) время выдает, а вот сам вес нет
сорри, не заметил что код alexbnd разместил... иначе бы не спрашивал.
\а вот сам вес нет/
а в коде и нету вывода веса насколько я вижу своим непрофессиональным взглядом. поэтому какбы наивно ждать что он его распечатает
а в коде и нету вывода веса насколько я вижу
а если не видите, что полезли тогда?
а в коде и нету вывода веса насколько я вижу
Очки подарить или сам купишь?
строка 25 исходного "кода".
-------------
ЗЫ: не нужно лезть в то, в чем не понимаешь вообще нихера. Если мы не указываем ТС, как решить его задачу, значит нам прикольнее смотреть на "живых обезьянок".
ну там такая логика что действительно очки не помешают
К сожалению все так же(
Потому что человек пишет бред вместо кода, так как не знает формата анализируемой строки.
Спасибо большое) время выдает, а вот сам вес нет
сорри, не заметил что код alexbnd разместил... иначе бы не спрашивал.
Можно маленькую подсказку?)
не поэтому , а потому что это alexbmd. когда он писал что-то. кроме бреда? :) Он в принципе не понимает логики программного кода и этот скетч - замечательный пример этому.
Можно маленькую подсказку?)
можно.
Возьмите тот пример, что у вас в #30 и сравните с соответвующем местом кода #31/ Если смотреть вдумчиво. вы увидите какой строчки не хвататет в #31
Код #39 вообще не смотрите.
Можно маленькую подсказку?)
можно.
Возьмите тот пример, что у вас в #30 и сравните с соответвующем местом кода #31/ Если смотреть вдумчиво. вы увидите какой строчки не хвататет в #31
Код #39 вообще не смотрите.
Прошу прощения)) точно строчки 30 и 31 моего самого первого сообщения?)
[Прошу прощения)) точно строчки 30 и 31 моего самого первого сообщения?)
нет, коды в сообщениях 30 и 31
Совсем уж подскажу - насколько я вижу , в коде #31 не хвататет одной строки для счастья :) ... хотя не исключено. что какой-нить косяк я просмотрел
[Прошу прощения)) точно строчки 30 и 31 моего самого первого сообщения?)
нет, коды в сообщениях 30 и 31
Совсем уж подскажу - насколько я вижу , в коде #31 не хвататет одной строки для счастья :) ... хотя не исключено. что какой-нить косяк я просмотрел
mySerial.write(buff) оно?)
пробуйте
пробуйте
Все огонь работает))) спасибо большое) Единственное пишет и букву S тоже, ну да ладно с ней
-000.0006 G S21:28:41
Если S нужно прибить, то изучайте else для if.