Не так давно, я публиковал в подарок начинающим текст функции SerialPrintf. Если пользоваться ею, то задача становится настолько тривиальной, что даже неинтересно.
/*
* SerialPrintf
* Реализует функциональность printf в Serial.print
* Применяется для отладочной печати
* Параметры как у printf
* Возвращает
* 0 - ошибка формата
* отрицательное чило - нехватка памяти, модуль числа равен запрашиваемой памяти
* положительное число - количество символов, выведенное в Serial
*/
const size_t SerialPrintf (const char *szFormat, ...) {
va_list argptr;
va_start(argptr, szFormat);
char *szBuffer = 0;
const size_t nBufferLength = vsnprintf(szBuffer, 0, szFormat, argptr) + 1;
if (nBufferLength == 1) return 0;
szBuffer = (char *) malloc(nBufferLength);
if (! szBuffer) return - nBufferLength;
vsnprintf(szBuffer, nBufferLength, szFormat, argptr);
Serial.print(szBuffer);
free(szBuffer);
return nBufferLength - 1;
}
/*
* Пример использования SerialPrintf
*/
void setup() {
Serial.begin(19200);
while(!Serial) yield();
for (short register i=0; i<1000; i++) {
SerialPrintf("Klapa %03d\n", i);
delay(100);
}
}
void loop() {
}
Скетчи у вас коллеги все не правильные.
Во первых вы пишите программу!!! В программе должно быть куча переменных, а так же всяких разный условий!
А то 3 сторчки всего... С размахом нужно и чтобы никто ни чего не понял! Вот так:
Скетчи у вас коллеги все не правильные.
Во первых вы пишите программу!!! В программе должно быть куча переменных, а так же всяких разный условий!
А то 3 сторчки всего... С размахом нужно и чтобы никто ни чего не понял! Вот так ...........
for(int s = 0; s<10; s++) for(int d = 0; d<10; d++) for(int e = 0; e<10; e++) Serial.println("Klapautsiy " + s + d + e), delay(1000);for(int i = 0; i<10; i++) { Serial.prinln("Klapautsiy 00" + i); } for(int i = 10; i<100; i++) { Serial.prinln("Klapautsiy 0" + i); } for(int i = 100; i<1000; i++) { Serial.prinln("Klapautsiy " + i); }JolliBiber, вам 2 за сочинение. Загрузил - летит каша. Сделал медленнее получилось вроде того:
Klapautsiy
lapautsy
apautsy
pautsy
autsy
utsy
tsy
sy
y
а потом вообще билиBiberда :)
Не работает...однако :)
int y = 0; switch(y) { case 0: Serial.println("Klapautsiy 00" + i); if(i == 9) y = 10; break; case 10: Serial.println("Klapautsiy 0" + i); if(i == 99) y = 100; break; case 100: Serial.println("Klapautsiy " + i); break; default: break; } i++;JolliBiber, вам 2 за сочинение. Загрузил - летит каша. Сделал медленнее получилось вроде того:
.....
а потом вообще билиBiberда :)
Не работает...однако :)
Я крайне редко даю решения при использовании которых не надо думать ;)
for(int s = 0; s<10; s++) for(int d = 0; d<10; d++) for(int e = 0; e<10; e++) Serial.println("Klapautsiy " + s + d + e), delay(1000);Вот уже лучше. Смотрится красиво, но работает неправильно.
Я крайне редко даю решения при использовании которых не надо думать ;)
OK. Подумаем на досуге :)
char kl[] = "Klapautsiy 000"; void setup() { Serial.begin(9600); } void loop() { Serial.println(kl); kl[13]++; if (kl[12] == ':') kl[12] = '0', kl[11]++; if (kl[13] == ':') kl[13] = '0', kl[12]++; if (kl[11] == ':') kl[11] = '0'; delay(1000); }Вот уже лучше. Смотрится красиво, но работает неправильно.
мне тоже понравилось - закажу дохтору постер с картой Канады в стиле ascii-арт-Клапауций
*шо там он сказал - работать не будет потому, что он не думал, когда писал код?
Продолжение будет?
Не так давно, я публиковал в подарок начинающим текст функции SerialPrintf. Если пользоваться ею, то задача становится настолько тривиальной, что даже неинтересно.
/* * SerialPrintf * Реализует функциональность printf в Serial.print * Применяется для отладочной печати * Параметры как у printf * Возвращает * 0 - ошибка формата * отрицательное чило - нехватка памяти, модуль числа равен запрашиваемой памяти * положительное число - количество символов, выведенное в Serial */ const size_t SerialPrintf (const char *szFormat, ...) { va_list argptr; va_start(argptr, szFormat); char *szBuffer = 0; const size_t nBufferLength = vsnprintf(szBuffer, 0, szFormat, argptr) + 1; if (nBufferLength == 1) return 0; szBuffer = (char *) malloc(nBufferLength); if (! szBuffer) return - nBufferLength; vsnprintf(szBuffer, nBufferLength, szFormat, argptr); Serial.print(szBuffer); free(szBuffer); return nBufferLength - 1; } /* * Пример использования SerialPrintf */ void setup() { Serial.begin(19200); while(!Serial) yield(); for (short register i=0; i<1000; i++) { SerialPrintf("Klapa %03d\n", i); delay(100); } } void loop() { }работает но пока ещё ни чего не понял буду разбиратся.
Ну и для любителей краткости можно использовать сокращенный if...:
void loop() { while(n < 999) Serial.println("Klapautsiy " + String(n < 9 ? "00": n < 99 ? "0":"") + ++n); delay(1000); }Только детям на ночь не показывайте...
Изучал....размышлял...Нашел описки. Должно быть n<10 и n<100 (описки увидел когда запускал скетч, в районе 9 и 99 работало неправильно)
оно только с виду страшное, на самом деле простое.
Tomasina, спасибо! Кое-чего понял.
Описки там нет, все выводит корректно, во всех разрядах. А косяк в строке 3 - она ни на что не влияет, поэтому можно выкинуть.
Приведи свой код (я знаю где у тебя неточность, но попробуй найти сам).
Описки там нет, все выводит корректно, во всех разрядах. А косяк в строке 3 - она ни на что не влияет, поэтому можно выкинуть.
Приведи свой код (я знаю где у тебя неточность, но попробуй найти сам).
я в курсе, поэтому и прошу привести свой код.
У меня этого не наблюдается.
я в курсе, поэтому и прошу привести свой код.
У меня этого не наблюдается.
Это твой, вообще-то :)
int n =0; // уставливаем начально значение int up = 1; // шаг увеличения void setup() { Serial.begin(9600); // подключаем порт } void loop() { while(n < 999) Serial.println("Klapautsiy " + String(n < 9 ? "00": n < 99 ? "0":"") + ++n), delay(1000); }а вот это уже интересно, потому как у меня этот код выдает все корректно:
А твои пропуски нуля выдает только при таком коде:
while(n < 999) Serial.println("Klapautsiy " + String(n < 9 ? "00": n < 99 ? "0":"") + n++);P.S. IDE 1.0.5
а вот это уже интересно, потому как у меня этот код выдает все корректно:
А твои пропуски нуля выдает только при таком коде:
while(n < 999) Serial.println("Klapautsiy " + String(n < 9 ? "00": n < 99 ? "0":"") + n++);P.S. IDE 1.0.5
У меня IDE 1.6.5. Если 9 заменить на 10, а 99 на 100, то все ок.
Офигеть! Оказывается и так, и так можно ++n и n++. Это не одно и тоже?
нет, не одно и то же.
n++ сначала делает действие, потом прибавляет единичку.
++n сначала прибавляет единичку, потом делает действие.
byte x = 0; byte y = 0; void setup(){ Serial.begin(9600); Serial.print("x++ ==> "); Serial.println(x++); // вывели x, затем прибавили 1 Serial.print("x++ ==> "); Serial.println(x++); // вывели x, затем прибавили 1 Serial.print("++y ==> "); Serial.println(++y); // прибавили 1, затем вывели y Serial.print("++y ==> "); Serial.println(++y); // прибавили 1, затем вывели y } void loop(){ }Офигеть! Оказывается и так, и так можно ++n и n++. Это не одно и тоже?
n++ - результатом является значение n ДО инкрементирования
++n - результатом является значение n ПОСЛЕ инкрементирования
Например:
n = 1:
a = n++;
Имеем: n=2, а a=1
А в случае
n = 1:
a = ++n;
и n, и a будут равны 2
-----------------
Упражнение для самостоятельного решения. Чему будут равны n и a после исполнения кода:
n = 1:
a = ++n++;
нет, не одно и то же.
n++ сначала делает действие, потом прибавляет единичку.
++n сначала прибавляет единичку, потом делает действие.
.............................
Спасибо.
..........
Упражнение для самостоятельного решения. Чему будут равны n и a после исполнения кода:
n = 1:
a = ++n++;
Так?
Скетчи у вас коллеги все не правильные.
Во первых вы пишите программу!!! В программе должно быть куча переменных, а так же всяких разный условий!
А то 3 сторчки всего... С размахом нужно и чтобы никто ни чего не понял! Вот так:
bool k = 0; bool kl = 0; bool klap = 0; bool klapa = 0; bool klapau = 0; bool klapauts = 0; bool klapautsy = 0; bool klapautsyA = 0; bool klapautsyC = 0; bool klapautsyD = 0; int kla = 0; String klapautsyE; String klapaut; unsigned long klapautsyB; void setup() { Serial.begin(9600); } void loop() { if (klapautsyC) { if (! kl) { kla = kla + 1; kl = 1; } } else { kl = 0; } if (kla < 0 ) kla = 0; if (klapau) kla = 0; if ( kla > 999) { if (klapa) { klap = 0; } else { klap = 1; klapa = 1; } } else { klap = 0; klapa = 0; }; klapau = klap; if ((kla) > (99)) { klapautsyD = 1; } else { klapautsyD = 0; } if (1) { if (! klapautsy) { klapautsy = 1; klapautsyA = 1; klapautsyB = millis(); } } else { klapautsy = 0 ; klapautsyA = 0; } if (klapautsy) { if ( klapautsyF ( klapautsyB , 100 )) { klapautsyB = millis(); klapautsyA = ! klapautsyA; } } if (klapautsyA) { klapautsyC = 1; } else { klapautsyC = 0; } if ((kla) > (9)) { klapauts = 1; } else { klapauts = 0; } if (klapauts) { klapaut = ((String("Klapautsy")) + (String("0")) + ((String(kla)))); } else { klapaut = ((String("Klapautsy")) + (String("00")) + ((String(kla)))); } if (klapautsyD) { klapautsyE = ((String("Klapautsy")) + ((String(kla)))); } else { klapautsyE = klapaut; } if (klapautsyC) { if (! k) { Serial.println (klapautsyE); k = 1; } } else { k = 0; } } bool klapautsyF(unsigned long klapautsyG, unsigned long klapautsyH ) { unsigned long klapautsyX; klapautsyX = millis(); if (klapautsyX >= klapautsyG) { return (klapautsyX >=(klapautsyG + klapautsyH)); } else { return (klapautsyX >=(32768 - klapautsyG + klapautsyH)); } }Скетчи у вас коллеги все не правильные.
Во первых вы пишите программу!!! В программе должно быть куча переменных, а так же всяких разный условий!
А то 3 сторчки всего... С размахом нужно и чтобы никто ни чего не понял! Вот так ...........
Обалдеть! И она не просто так! Она работает!
Есть простор для изучения :)