вопрос по чтению массива

dimOnOff
Offline
Зарегистрирован: 21.04.2015

Возник вопрос: как читать массив не с начала до конца, и потом опять сначала, а с заданной точки до конца и потом опять сначала до этой точки, используя один цикл. Есть подозрение, что так можно сделать) Натолкните на мысль))

int myPins[11] = {0,1,2,3,4,5,6,7,8,9,10};
int point = 3;

void setup() {
Serial.begin(9600);
}

void loop() {

for (int t = point; t < 11; t ++) {
     Serial.println(myPins[t]);  
     delay(1000);
    }
for (int t = 1; t < point; t ++) {
     Serial.println(myPins[t]);  
     delay(1000);
    }     
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Только во втором цикле нумерация с нуля - первый элемент массива имеет индекс 0, а не 1 ;)

dimOnOff
Offline
Зарегистрирован: 21.04.2015

Да да) Это чтоб в сЕриал первый элемент массива не выходил) Ну это не принципиально. Можно и нолик поставить) 

Так вот можно ли эти два цикла объединить в один ?

vk007
Offline
Зарегистрирован: 16.06.2015

Если в одном цикле, то мысль вот такого плана:

int myPins[11] = {0,1,2,3,4,5,6,7,8,9,10};
int point = 3;

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (int i = 0; i < 11; i ++)
  {
    int t = point + i;
    if (t  > 10) t = t - 11;
    Serial.println(myPins[t]);
    delay(1000);
  }
}

Писал в вашем стиле, но правильней было бы вместо проверок на голые 11 и 10 использовать функцию sizeof(). Понимаю, что пример, но int тут избыточен, однобайтовые byte или char в самый раз.

dimOnOff
Offline
Зарегистрирован: 21.04.2015

Спасибо, vk007. В общем смысл понятен. Я до этого не дошел. Хотя варианты с перменной, увеличивающей значение, были. Вроде бы все просто. Так всегда кажется, когда видишь готовое решение)) Про функцию sizeof() почитаю. Спасибо.