Перейти к содержимому

Фото
- - - - -

ATMega328 - хранение и использование набора данных.


  • Вы не можете создать новую тему
  • Please log in to reply
5 ответов в этой теме

#1 BiHiTRiLL

BiHiTRiLL
  • Пользователь
  • 396 сообщений

Отправлено 05 марта 2015 - 11:30

Помогите советом.

 

Собрал на ATMega328 простенькую игрушку - электронные игральные кости, две матрицы светодиодов 3х3.

Собственно сам скетч для кубика вопросов не вызывает, но как бонус хочется сделать режим световых эффектов используя эти самые две матрицы. Пока задумка такая: 

 

Предполагаю создать набор данных в котором храниться информация о том какие сегменты включены а какие нет. Возможно массив или список.

Подскажите как правильно хранить и использовать в программе подобные конструкции. в С++ совсем не силен.


Сообщение изменено: BiHiTRiLL (05 марта 2015 - 11:52 )

  • 0

¡ʁɐнεɐd ɐно - ɐɓʚɐdu


#2 Sergio

Sergio
  • Постоялец
  • 3 051 сообщений

Отправлено 06 марта 2015 - 21:08

Помогите советом.

 

Собрал на ATMega328 простенькую игрушку - электронные игральные кости, две матрицы светодиодов 3х3.

Собственно сам скетч для кубика вопросов не вызывает, но как бонус хочется сделать режим световых эффектов используя эти самые две матрицы. Пока задумка такая: 

 

Предполагаю создать набор данных в котором храниться информация о том какие сегменты включены а какие нет. Возможно массив или список.

Подскажите как правильно хранить и использовать в программе подобные конструкции. в С++ совсем не силен.

 

Вариантов великое множество.

А как данные для игральных костей хранятся? Также делай и со световыми эффектами.

 

Пока нету каких то определенных требований, делай, как считаешь нужным и как тебе удобнее. Потом же можно будет переделать.

 

Кстати, почему C++ а не C?


  • 0

#3 Вырвиглаз

Вырвиглаз

    Убийца травы

  • Постоялец
  • 15 928 сообщений
  • Откуда:Эстония, Таллин

Отправлено 06 марта 2015 - 22:00

Переменная типа int. Каждый бит - свой диод. Массив переменных - эффекты. Массив эффектов - мультиплекакция. А там на что памяти и фантазии хватит.


  • 0
Кто живет и грешит в Эстонии, тот опять родится в Эстонии.

#4 BiHiTRiLL

BiHiTRiLL
  • Пользователь
  • 396 сообщений

Отправлено 06 марта 2015 - 23:42

[spoiler='Скетч']
int Lc = 11;
int Lv = 13;
int Lg = 10;
int Lt = 9;
int Lb = 12;
int Rc = 6;
int Rv = 4;
int Rg = 7;
int Rt = 8;
int Rb = 5;

int buttonPin = 2;
int buttonPin2 = 3;
int buttonState;
long ranL;
long ranR;
int time = 2000;

void ledoff ()
{
  digitalWrite (Lc, LOW);
  digitalWrite (Lt, LOW);
  digitalWrite (Lb, LOW);
  digitalWrite (Lv, LOW);
  digitalWrite (Lg, LOW);
  
  digitalWrite (Rc, LOW);
  digitalWrite (Rt, LOW);
  digitalWrite (Rb, LOW);
  digitalWrite (Rv, LOW);
  digitalWrite (Rg, LOW);
}

void setup ()
{
  pinMode (Lc, OUTPUT);
  pinMode (Lv, OUTPUT);
  pinMode (Lg, OUTPUT);
  pinMode (Lt, OUTPUT);
  pinMode (Lb, OUTPUT);
  
  pinMode (Rc, OUTPUT);
  pinMode (Rv, OUTPUT);
  pinMode (Rg, OUTPUT);
  pinMode (Rt, OUTPUT);
  pinMode (Rb, OUTPUT);
  
  pinMode (buttonPin, INPUT);
  pinMode (buttonPin2, INPUT);
  Serial.begin(9600);
  randomSeed(analogRead(0));
}

void loop()
{
//  if (digitalRead(buttonPin2 == HIGH)){
//  digitalWrite (Rc, HIGH);  
//  }
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH){
     for(int i=1; i<=8; i++)
  {
    ledoff();
  
    ranL = random(1, 10);
    ranR = random(1, 10);
    
    if (ranL == 1){
      digitalWrite (Lc, HIGH);
      //delay (time);
    }
    if (ranL == 2){
      digitalWrite (Lt, HIGH);
      //delay (time);
    }
    if (ranL == 3){
      digitalWrite (Lb, HIGH);
      //delay (time);
    }
    if (ranL == 4){
      digitalWrite (Lc, HIGH);
      digitalWrite (Lt, HIGH);
      //delay (time);
    } 
        if (ranL == 5){
      digitalWrite (Lc, HIGH);
      digitalWrite (Lb, HIGH);
      //delay (time);
    }
    if (ranL == 6){
      digitalWrite (Lt, HIGH);
      digitalWrite (Lb, HIGH);
      //delay (time);
    }
    if (ranL == 7){
      digitalWrite (Lc, HIGH);
      digitalWrite (Lt, HIGH);
      digitalWrite (Lb, HIGH);
      //delay (time);
   }
   if (ranL == 8){
      digitalWrite (Lt, HIGH);
      digitalWrite (Lb, HIGH);
      digitalWrite (Lv, HIGH);
      //delay (time);
   }
   if (ranL == 9){
      digitalWrite (Lt, HIGH);
      digitalWrite (Lb, HIGH);
      digitalWrite (Lg, HIGH);
      //delay (time);
   }
   
   // Right side
       if (ranR == 1){
      digitalWrite (Rc, HIGH);
      //delay (time);
    }
    if (ranR == 2){
      digitalWrite (Rt, HIGH);
      //delay (time);
    }
    if (ranR == 3){
      digitalWrite (Rb, HIGH);
      //delay (time);
    }
    if (ranR == 4){
      digitalWrite (Rc, HIGH);
      digitalWrite (Rt, HIGH);
      //delay (time);
    } 
        if (ranR == 5){
      digitalWrite (Rc, HIGH);
      digitalWrite (Rb, HIGH);
      //delay (time);
    }
    if (ranR == 6){
      digitalWrite (Rt, HIGH);
      digitalWrite (Rb, HIGH);
      //delay (time);
    }
    if (ranR == 7){
      digitalWrite (Rc, HIGH);
      digitalWrite (Rt, HIGH);
      digitalWrite (Rb, HIGH);
     // delay (time);
   }
   if (ranR == 8){
      digitalWrite (Rt, HIGH);
      digitalWrite (Rb, HIGH);
      digitalWrite (Rv, HIGH);
      //delay (time);
   }
   if (ranR == 9){
      digitalWrite (Rt, HIGH);
      digitalWrite (Rb, HIGH);
      digitalWrite (Rg, HIGH);
      //delay (time);
   }
   
   //delay (time);
   delay(20+i*i*2);
  
  
     }
  }
} 
[/spoiler]

 

Выше мой код для самих игральных костей. Понятно, что если намутить десяток подобных конструкций то будут эффекты какие надо, но имхо так будет очень криво и писать неудобно. Нужна процедура вывода состояний на пины и место где все это хранится.
 
%D1%81%D0%B2%D0%B5%D1%82%D0%BE%D0%B4%D0%
 
Так все это выглядит на печатной плате. Буквами разных цветов обозначены разные группы светодиодов. Как правильно сделать так чтобы, например, крутить огни по часовой стрелке (Lc горит постоянно, Lg, Lb, Lv, Lt зажигаются по очереди с интервалом 200мс ).  
 
подскажите если не весь код, то основные его конструкции и логику работы.
 

.Кстати, почему C++ а не C?

 

Что предлагает стандартная среда Arduino на том и делаю. Думаю, на моем уровне разница не будет заметна.


Сообщение изменено: BiHiTRiLL (07 марта 2015 - 00:00 )

  • 0

¡ʁɐнεɐd ɐно - ɐɓʚɐdu


#5 Дык

Дык
  • Постоялец
  • 10 897 сообщений
  • Откуда:/dev/null

Отправлено 07 марта 2015 - 12:15

Эм, циклический сдвиг? 

 

https://books.google...arduino&f=false


  • 0

Вначале делаю, потом думаю :)


#6 BiHiTRiLL

BiHiTRiLL
  • Пользователь
  • 396 сообщений

Отправлено 07 марта 2015 - 14:51

Эм, циклический сдвиг? 

 

https://books.google...arduino&f=false

 

 

Вроде на 50-й странице кусок кода похож на то что мне нужно.  Буду разбираться сейчас.


  • 0

¡ʁɐнεɐd ɐно - ɐɓʚɐdu