помогите новичку. счетчик

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014
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);
 
Joiner
Offline
Зарегистрирован: 04.09.2014

JollyBiber пишет:

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да :)

Не работает...однако :)

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012
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++;

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Joiner пишет:

JolliBiber, вам 2 за сочинение. Загрузил - летит каша. Сделал медленнее получилось вроде того:

.....

а потом вообще билиBiberда :)

Не работает...однако :)

Я крайне редко даю решения при использовании которых не надо думать ;)

Joiner
Offline
Зарегистрирован: 04.09.2014

KVadik пишет:

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);
 

Вот уже лучше. Смотрится красиво, но работает неправильно.

Joiner
Offline
Зарегистрирован: 04.09.2014

JollyBiber пишет:

Я крайне редко даю решения при использовании которых не надо думать ;)

OK. Подумаем на досуге :)

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014
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);
}

 

 

Клапауций 001
Offline
Зарегистрирован: 05.09.2015

Joiner пишет:

Вот уже лучше. Смотрится красиво, но работает неправильно.

мне тоже понравилось - закажу дохтору постер с картой Канады в стиле ascii-арт-Клапауций

*шо там он сказал - работать не будет потому, что он не думал, когда писал код?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

soznik пишет:

Продолжение будет?

Не вопрос. 

Не так давно, я публиковал в подарок начинающим текст функции 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() {
}

 

soznik
Offline
Зарегистрирован: 20.09.2015

работает но пока ещё ни чего не понял буду разбиратся.

Joiner
Offline
Зарегистрирован: 04.09.2014

Tomasina пишет:

Ну и для любителей краткости можно использовать сокращенный 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 работало неправильно)

Joiner
Offline
Зарегистрирован: 04.09.2014

Tomasina пишет:

оно только с виду страшное, на самом деле простое.

Tomasina, спасибо! Кое-чего понял.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Joiner пишет:
Изучал....размышлял...Нашел описки. Должно быть n<10 и n<100 (описки увидел когда запускал скетч, в районе 9 и 99 работало неправильно)

Описки там нет, все выводит корректно, во всех разрядах. А косяк в строке 3 - она ни на что не влияет, поэтому можно выкинуть.

Приведи свой код (я знаю где у тебя неточность, но попробуй найти сам).

Joiner
Offline
Зарегистрирован: 04.09.2014

Tomasina пишет:

Joiner пишет:
Изучал....размышлял...Нашел описки. Должно быть n<10 и n<100 (описки увидел когда запускал скетч, в районе 9 и 99 работало неправильно)

Описки там нет, все выводит корректно, во всех разрядах. А косяк в строке 3 - она ни на что не влияет, поэтому можно выкинуть.

Приведи свой код (я знаю где у тебя неточность, но попробуй найти сам).

Вот, посмотри

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

я в курсе, поэтому и прошу привести свой код.

У меня этого не наблюдается.

Joiner
Offline
Зарегистрирован: 04.09.2014

Tomasina пишет:

я в курсе, поэтому и прошу привести свой код.

У меня этого не наблюдается.

Это твой, вообще-то :)

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);
}

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

а вот это уже интересно, потому как у меня этот код выдает все корректно:

А твои пропуски нуля выдает только при таком коде:

  while(n < 999) Serial.println("Klapautsiy " + String(n < 9 ? "00": n < 99 ? "0":"") + n++);

P.S. IDE 1.0.5

Joiner
Offline
Зарегистрирован: 04.09.2014

Tomasina пишет:

а вот это уже интересно, потому как у меня этот код выдает все корректно:

 

А твои пропуски нуля выдает только при таком коде:

  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, то все ок.

Joiner
Offline
Зарегистрирован: 04.09.2014

Офигеть! Оказывается и так, и так можно ++n и n++. Это не одно и тоже?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

нет, не одно и то же.

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(){
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Joiner пишет:

Офигеть! Оказывается и так, и так можно ++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++;

 
 
Joiner
Offline
Зарегистрирован: 04.09.2014

Tomasina пишет:

нет, не одно и то же.

n++ сначала делает действие, потом прибавляет единичку.
++n сначала прибавляет единичку, потом делает действие.

.............................

Спасибо.

Joiner
Offline
Зарегистрирован: 04.09.2014

ЕвгенийП пишет:


..........

Упражнение для самостоятельного решения. Чему будут равны n и a после исполнения кода:

n = 1:
a = ++n++;

 
 

a=2,     n=3.

Так?

Kolchugin
Offline
Зарегистрирован: 15.12.2013

Скетчи у вас коллеги все не правильные.
Во первых вы пишите программу!!! В программе должно быть куча переменных, а так же всяких разный условий!
А то 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));
  }
}

 

Joiner
Offline
Зарегистрирован: 04.09.2014

Kolchugin пишет:

Скетчи у вас коллеги все не правильные.
Во первых вы пишите программу!!! В программе должно быть куча переменных, а так же всяких разный условий!
А то 3 сторчки всего...  С размахом нужно и чтобы никто ни чего не понял! Вот так ...........

Обалдеть! И она не просто так! Она работает!

Есть простор для изучения :)