Ви не увійшли.
Сторінки 1
Добрий вечір! Другий день намагаюсь написати повідомлення і не виходить. Пишу через "Цитувати", едине що то це додаю посилання на файл. Якщо зайти у "Цитувати" або "Відповісти", то там вже два моїх повідомлення, а у темі їх немає. Чому так?
Filaka пише:Чи можете Ви допомогти та зробити приклад?
Оголошуєм константу з розміром масиву та сам масив:
const size_t N = 16; uint8_t cols[N];
Набираєм ентропію для генерації випадкових чисел. Достатньо один раз на початку, десь в setup():
unsigned long seed = 0; for (size_t i = 0; i < sizeof(seed)*8; i++) { seed <<= 1; seed |= analogRead(10) & 1; } randomSeed(seed ? seed : 1);
Заповнюємо масив послідовними значеннями:
for (size_t i = 0; i < N; i++) { cols[i] = i; }
і перемішуємо:
for (size_t i = 0; i < N-1; i++) { size_t j = random(i, N); auto tmp = cols[i]; cols[i] = cols[j]; cols[j] = tmp; }
Далі можете послідовно вибирати значення з масиву і робити з ними, що вам там потрібно. Наприклад, вивод в послідовний порт:
Serial.println(); for (auto i : cols) { Serial.print("X: "); Serial.print(i % 4); Serial.print(", Y: "); Serial.print(i / 4); Serial.println(); }
Якщо потрібна ще одна випадкова перестановка, можна не заповнювати послідовними значеннями заново, а лише перемішати існуючу.
Дуже дякую за допомогу та пояснення! Але мені ще поки що складно було розібратись в коді та синтаксису Інтернет моцна штука, допоміг! Спробував виводити у Монітор Порта Arduino, щоб зрозуміти що тут відбувається. Але поки що не зрозумів як це все реалізувати у своєму проєкт Куба. Та поєднати з :
digitalWrite (column[i] , 1);
digitalWrite (layer[j] , 0);
Можливо я не так пояснив свій задум, ось посилання на приклад. Куб повинен повністю заповнитись.
drive.google.com/file/d/1bFwaPjvazLKD6y … drive_link
Filaka пише:Чи можете Ви допомогти та зробити приклад?
Оголошуєм константу з розміром масиву та сам масив:
const size_t N = 16; uint8_t cols[N];
Набираєм ентропію для генерації випадкових чисел. Достатньо один раз на початку, десь в setup():
unsigned long seed = 0; for (size_t i = 0; i < sizeof(seed)*8; i++) { seed <<= 1; seed |= analogRead(10) & 1; } randomSeed(seed ? seed : 1);
Заповнюємо масив послідовними значеннями:
for (size_t i = 0; i < N; i++) { cols[i] = i; }
і перемішуємо:
for (size_t i = 0; i < N-1; i++) { size_t j = random(i, N); auto tmp = cols[i]; cols[i] = cols[j]; cols[j] = tmp; }
Далі можете послідовно вибирати значення з масиву і робити з ними, що вам там потрібно. Наприклад, вивод в послідовний порт:
Serial.println(); for (auto i : cols) { Serial.print("X: "); Serial.print(i % 4); Serial.print(", Y: "); Serial.print(i / 4); Serial.println(); }
Якщо потрібна ще одна випадкова перестановка, можна не заповнювати послідовними значеннями заново, а лише перемішати існуючу.
Дуже дякую за допомогу та пояснення! Але мені ще поки що складно було розібратись в коді та синтаксису Інтернет моцна штука, допоміг! Спробував виводити у Монітор Порта Arduino, щоб зрозуміти що тут відбувається. Але поки що не зрозумів як це все реалізувати у своєму проєкт Куба. Та поєднати з :
digitalWrite (column[i] , 1);
digitalWrite (layer[j] , 0);
Можливо я не так пояснив свій задум, ось посилання на приклад. Куб повинен повністю заповнитись.
https://drive.google.com/file/d/1bFwaPj … drive_link
Зробіь масив int random_index[16]; спочатку заповніть його числами від 0 до 15, а потім їх перетасуйте (google: shuffle), з масиву послідовно берете індекс і заповнюєте цей стовпчик
Дякую! Але моїх знань ще замало щоб це все зрозуміти та зробити) Чи можете Ви допомогти та зробити приклад? Дуже вдячний за допомогу та розуміння
Honey пише:Вилазите за межі масива
i=4 замінити на i=3
i<=4 замінити на i<4Дякую! Працює )))
Підкажіть будь ласка ще, як реалізувати поступове заповнення всього куба по одному стовпчику. Так як в прикладах вище, але щоб поступово рандомно кожен стовпчик заповнився з верху до низу і так у весь куб
Вилазите за межі масива
i=4 замінити на i=3
i<=4 замінити на i<4
Дякую! Працює )))
Всім доброго дня та з Новим Роком! Допоможіть розібратись з кодом. Зробили з сином Led Cub 4*4*4. Куб працює, все добре. Програму взяли з GitHub, також все працює добре. Але хочемо створювати свої ефекти. По маленьку щось виходить, разом вчимо програмування ))). Стикнулись з таким. Два ефекти. Один (randomRain_v2) - рандомне заповнення одного стовпчика з низу до верху, Другий (randomRain_v3) навпаки - рандомне заповнення одного стовпчика з верху до низу. У першому випадку все добре, у другому сам ефект працюе, але чомусь спрацьовує ще один стовпчик. Буду дуже вдячний за допомогу та роз'яснення.
#include <avr/wdt.h>
//initializing and declaring led rows
int column[16]={13,12,11,10,9,8,7,6,5,4,3,2,1,0,A5,A4};
//initializing and declaring led layers
int layer[4]={A3,A2,A1,A0};
void setup() {
//настройка колонок для вывода
for(int i = 0; i<16; i++)
{
pinMode(column[i], OUTPUT);
}
//настройка слоев для вывода
for(int i = 0; i<4; i++)
{
pinMode(layer[i], OUTPUT);
}
//seeding random for random pattern
randomSeed(analogRead(10));
}
void loop() {
//randomRain_v2();
randomRain_v3();
//onCube();
//reboot();
}
void reboot() { // перезагрузка платы
wdt_disable();
wdt_enable(WDTO_1S);
while (1) {}
};
void offCube() { // выключение куба
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 4; j++) {
digitalWrite (column[i] , 1);
digitalWrite (layer[j] , 0);
}
}
}
void onCube() { // включение куба
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 4; j++) {
digitalWrite (column[i] , 0);
digitalWrite (layer[j] , 1);
}
}
}
void randomRain_v2(){
offCube();
for(int i = 0; i!=60; i+=2)
{
int randomColumn = random(0,16);
digitalWrite(column[randomColumn], 0);
for(int i = 4; i >= 0; i--) {
digitalWrite(layer[i], 1);
delay(50);
}
delay(300);
for(int j = 0; j <= 4; j++) {
digitalWrite(layer[j], 0);
delay(300);
}
digitalWrite(column[randomColumn], 1);
}
}
void randomRain_v3(){
offCube();
for(int i = 0; i!=60; i+=2)
{
int randomColumn = random(0,16);
digitalWrite(column[randomColumn], 0);
for(int i = 0; i <= 4; i++) {
digitalWrite(layer[i], 1);
delay(100);
}
delay(300);
for(int i = 4; i >= 0; i--) {
digitalWrite(layer[i], 0);
delay(100);
}
digitalWrite(column[randomColumn], 1);
}
}
Сторінки 1