Обучи, если не сложно.
Чему? Структура - она сама по себе тип данных
Выше void setup() не сработало. Экземпляр создаётся, но данные не усваивает
Видимо таки нужно так
commandLine Formovka[] = {
(commandLine){17, 2, 1, 170},
(commandLine){8, 3, 1, 88},
(commandLine){5, 2, 1, 55},
(commandLine){10, 3, 1, 100},
(commandLine){21, 2, 1, 210},
(commandLine){13, 3, 1, 130}
};
Видимо я чего-то упускаю. У меня с typedef не нужно было указывать struct везде где использовался экземпляр. А без struct были ошибки.
Ну не знаю, не сталкивался. Или не понял ))
Последнюю строку не видит. Добавляю ещё - видит предыдущую (которая последней была)
Кто? Кот, мыши?
Это как? Код актуальный выложите
typedef struct commandLine{
uint16_t timeFromStart;
uint8_t deviceName;
boolean onDevice;
uint16_t timeDeviceOn;
};
commandLine Formovka[] = {
{17, 2, 1, 170},
{8, 3, 1, 88},
{5, 2, 1, 55},
{10, 3, 1, 100},
{21, 2, 1, 210},
{13, 3, 1, 130}
};
void setup()
{
Serial.begin(9600);
/*
commandLine Formovka[100];
Formovka[0] = (commandLine){17, 2, 1, 170};
Formovka[1] = (commandLine){8, 3, 1, 88};
Formovka[2] = (commandLine){5, 2, 1, 55};
Formovka[3] = (commandLine){10, 3, 1, 100};
Formovka[4] = (commandLine){21, 2, 1, 210};
Formovka[5] = (commandLine){13, 3, 1, 130};
*/
/*
int arrayLength = sizeof(Formovka) / sizeof(Formovka[0]);
for(int i = 0; i < arrayLength; i++){
int z = i;
for(int x = i+1; x < arrayLength-(i+1); x++){
if(Formovka[x].timeFromStart && Formovka[z].timeFromStart){
if(Formovka[z].timeFromStart > Formovka[x].timeFromStart) {
Formovka[arrayLength-1] = Formovka[z];
Formovka[z] = Formovka[x];
Formovka[x] = Formovka[arrayLength-1];
z = x;
Serial.println("Replace");
}
}
}
if(i != z) i--;
}
Serial.println(" End Of The Sort");
*/
sortArr();
for(int i=0; i<sizeof(Formovka) / sizeof(Formovka[0]);i++){
Serial.print(Formovka[i].timeFromStart);
Serial.print(" - ");
Serial.println(i);
}
}
void loop()
{
}
void sortArr(){
int arrayLength = sizeof(Formovka) / sizeof(Formovka[0]);
for(int i = 0; i < arrayLength; i++){
int z = i;
for(int x = i+1; x < arrayLength-(i+1); x++){
if(Formovka[x].timeFromStart && Formovka[z].timeFromStart){
if(Formovka[z].timeFromStart > Formovka[x].timeFromStart) {
Formovka[arrayLength-1] = Formovka[z];
Formovka[z] = Formovka[x];
Formovka[x] = Formovka[arrayLength-1];
z = x;
Serial.println("Replace");
}
}
}
if(i != z) i--;
}
Serial.println(" End Of The Sort");
}
Выдача в Serial:
Replace
Replace
Replace
Replace
End Of The Sort
5 - 0
8 - 1
10 - 2
17 - 3
21 - 4
8 - 5
Добавляю строку:
commandLine Formovka[] = {
{17, 2, 1, 170},
{8, 3, 1, 88},
{5, 2, 1, 55},
{10, 3, 1, 100},
{21, 2, 1, 210},
{13, 3, 1, 130},
{1, 2, 1, 210},
};
Теперь видит:
Replace
Replace
Replace
Replace
End Of The Sort
5 - 0
8 - 1
10 - 2
13 - 3
21 - 4
17 - 5
8 - 6
Я уже запятую пробовал в последней строке добавлять - без изменений
В сторону готовой, доступной в системе, отлично работающей функции qsort
и выхода из колхоза.
Это сортировка косячит
Если набивать массив так:
Formovka[0] = (commandLine){17, 2, 1, 170};
Formovka[1] = (commandLine){8, 3, 1, 88};
Formovka[2] = (commandLine){5, 2, 1, 55};
Formovka[3] = (commandLine){10, 3, 1, 100};
Formovka[4] = (commandLine){3, 2, 1, 210};
Formovka[5] = (commandLine){2, 3, 1, 130};
То не косячит, почему-то
Уверены?
struct commandLine{
uint16_t timeFromStart;
uint8_t deviceName;
boolean onDevice;
uint16_t timeDeviceOn;
};
void setup()
{
Serial.begin(9600);
commandLine Formovka[6];
Formovka[0] = (commandLine){17, 2, 1, 170};
Formovka[1] = (commandLine){8, 3, 1, 88};
Formovka[2] = (commandLine){5, 2, 1, 55};
Formovka[3] = (commandLine){10, 3, 1, 100};
Formovka[4] = (commandLine){21, 2, 1, 210};
Formovka[5] = (commandLine){13, 3, 1, 130};
int arrayLength = sizeof(Formovka) / sizeof(Formovka[0]);
for(int i = 0; i < arrayLength; i++){
int z = i;
for(int x = i+1; x < arrayLength-(i+1); x++){
if(Formovka[x].timeFromStart && Formovka[z].timeFromStart){
if(Formovka[z].timeFromStart > Formovka[x].timeFromStart) {
Formovka[arrayLength-1] = Formovka[z];
Formovka[z] = Formovka[x];
Formovka[x] = Formovka[arrayLength-1];
z = x;
Serial.println("Replace");
}
}
}
if(i != z) i--;
}
Serial.println(" End Of The Sort");
// sortArr();
for(int i=0; i<sizeof(Formovka) / sizeof(commandLine);i++){
Serial.print(Formovka[i].timeFromStart);
Serial.print(" - ");
Serial.println(i);
}
}
void loop()
{
}
// void sortArr(){
// int arrayLength = sizeof(Formovka) / sizeof(commandLine);
// for(int i = 0; i < arrayLength; i++){
// int z = i;
// for(int x = i+1; x < arrayLength-(i+1); x++){
// if(Formovka[x].timeFromStart && Formovka[z].timeFromStart){
// if(Formovka[z].timeFromStart > Formovka[x].timeFromStart) {
// Formovka[arrayLength-1] = Formovka[z];
// Formovka[z] = Formovka[x];
// Formovka[x] = Formovka[arrayLength-1];
// z = x;
// Serial.println("Replace");
// }
// }
// }
// if(i != z) i--;
// }
// Serial.println(" End Of The Sort");
// }
Replace
Replace
Replace
Replace
End Of The Sort
5 - 0
8 - 1
10 - 2
17 - 3
21 - 4
8 - 5
Ну и где оно видит?
Вы точно понимаете, что делаете? Посмотрите внимательно и найдите отличие от вашего кода
commandLine Formovka[] = {
commandLine{17, 2, 1, 170},
commandLine{8, 3, 1, 88},
commandLine{5, 2, 1, 55},
commandLine{10, 3, 1, 100},
commandLine{21, 2, 1, 210},
commandLine{13, 3, 1, 130},
commandLine{1, 2, 1, 210},
};
Мошт до завтра? Завтра пятница… ))
Если бы точно понимал - не отвлекал бы уважаемых людей от подготовки к пятнице)
Я так пробовал. Нет, так тоже последняя строка не впитывается