2012-09-16 26 views
5

Tôi đang làm việc trên một số animatronics để cài đặt nghệ thuật sẽ sử dụng một số động cơ bước và một số đèn LED công suất cao. Trong quá khứ, khi tôi đã làm điều này, tôi đã sử dụng một máy tính kết nối để xử lý logic và thời gian. Đối với dự án này, tôi muốn thử làm cho nó độc lập (ví dụ, chỉ cần hội đồng quản trị Arduino). Đối với phần cứng Arduino, tôi có một số Arduino Mega và có thể mở rộng nó bằng SD cardshield để có thêm bộ nhớ, nếu cần thiết.Gợi ý cấu trúc lập trình và lưu trữ chuỗi hoạt ảnh

Tôi thực sự hoan nghênh mọi ý tưởng hoặc đề xuất về cách tiếp cận (và không yêu cầu mã).

Đối với dữ liệu, về cơ bản tôi sẽ lưu trữ tín hiệu cho mỗi bước và mỗi đèn LED. Và tất nhiên tôi sẽ cần một loại đồng hồ hoặc dấu thời gian để theo dõi mọi thứ.

Một gợi ý bước sẽ là một cái gì đó như:

  • thời gian gợi ý bắt đầu
  • bước ID
  • hướng bước
  • tốc độ bước
  • số bước

Một LED cue sẽ là một cái gì đó như:

  • thời gian gợi ý bắt đầu
  • LED ID
  • Bắt đầu độ sáng
  • sáng End
  • thời gian

Vì vậy, những gì tôi đang tự hỏi về:

  • ý tưởng về một dữ liệu đủ định dạng để lưu trữ rất nhiều của cues
  • mọi đề xuất cho đồng hồ hoặc dấu thời gian. (Một truy cập đơn giản là sự lựa chọn hiển nhiên.)

Vì chỉ có bao nhiêu tín hiệu/dữ liệu, vì tôi mới bắt đầu, tôi sẽ làm việc trong bất kỳ giới hạn nào.

+0

Định dạng MIDI thường là (ab) sử dụng cho các loại dữ liệu này không phải là âm nhạc. (ánh sáng sân khấu, vv) Có lẽ bạn cũng có thể sử dụng nó cho rô-bốt rô-bốt của mình. MIDI có kích thước lưu trữ rất nhỏ gọn và dễ phân tích cú pháp. – wildplasser

+0

@wildplasser - thú vị, cảm ơn. Tôi đã nhìn thấy MIDI ab/được sử dụng cho điều này quá nhưng điều đó hoàn toàn đã không xảy ra với tôi. –

+0

Nó có chức năng cốt lõi tích hợp sẵn: thời gian, cueing/đồng bộ hóa, nhiều giọng nói/kênh. (Các vòng lặp/vòng lặp IIRC được thêm vào sau). – wildplasser

Trả lời

0

Vì vậy, hiện tại tôi đã quyết định cuộn định dạng dữ liệu đơn giản của riêng mình để giữ cho dự án luôn chuyển động. Tôi cũng quan tâm đến việc lưu trữ dữ liệu cue theo cách không ăn RAM.

Vì tôi đang sử dụng Mega Ardunio với bộ nhớ Flash 128 KB, tôi muốn sử dụng nó trước khi sử dụng thẻ SD. Với việc truy cập PROGMEM tuyệt vời Flash Library rất dễ dàng và tôi đã có thể phác họa thử nghiệm trong vài phút.

Để điều khiển động cơ Tôi đang sử dụng bảng điều khiển động cơ chuyên dụng sử dụng dấu nối tiếp. Mỗi bảng điều khiển hai động cơ. Để kiểm tra kích thước dữ liệu tối đa tôi cần gửi là bốn giá trị: tốc độ, độ dốc, mục tiêu x, mục tiêu y để thực hiện di chuyển để xác định định dạng dữ liệu của tôi cho động cơ. Điều này sẽ thay đổi khi tôi thêm một dấu thời gian và các giá trị ID của bảng.

Với Flash Flash, bạn có thể xác định FLASH_TABLE, lưu trữ nó trong PROGMEM và sau đó truy cập nó bằng cách sử dụng truy cập khung mảng đơn giản. Thử nghiệm với một vài nghìn mục cho thấy không có vấn đề gì.

Vì vậy, nó trở thành một nhiệm vụ đơn giản là kéo dữ liệu ra và gửi nó đến các bo mạch độc lập hoặc sử dụng nó trong nội bộ.

// ví dụ đơn giản:

#include <Flash.h> 

FLASH_TABLE(int, command_table, 4 /* width of table */, 
    {111, 222, 333, 444}, 
    {1001, 900,, -4567}, 
    {1002, 1000,, -4567}, 
    {1003, 1100,, -4567}, 
    {666, 777, 888, 999} 
    ); 

void setup() { 
    Serial.begin(9600); 
    Serial.print("Mem: "); Serial.println(availableMemory()); 

    // Determine the size of the array 
    Serial.print("Rows: "); Serial.println(command_table.rows()); 
    Serial.print("Cols: "); Serial.println(command_table.cols()); 
    Serial.print("RAM: "); Serial.println(sizeof(command_table)); 

    Serial.print(command_table[8][0]); 
    Serial.print("s"); 
    Serial.print(command_table[8][1]); 
    Serial.print("r"); 
    Serial.print(command_table[8][2]); 
    Serial.print("x"); 
    Serial.print(command_table[8][3]); 
    Serial.print("y"); 
    Serial.println("gi"); 
} 

void loop() { 


} 

int availableMemory() 
{ 
    int size = 1024; 
    byte *buf; 
    while ((buf = (byte *) malloc(--size)) == NULL); 
    free(buf); 
    return size; 
} 
Các vấn đề liên quan