Thông báo

Collapse
No announcement yet.

Hiệu ứng LED Cube 8x8x8 (LED 3D)

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #46
    Nguyên văn bởi sieunhan14 Xem bài viết
    Bạn có thể đưa cho mình tham khảo đoạn code get_time() của bạn được không?
    Một thắc mắc nữa là hàm add(x,y,z) của bạn sẽ đưa giá trị các biến x, y, z đi đâu? Mình vẫn không hiểu lắm chỗ đó. mong bạn giúp! Nếu được thì mong bạn post đoạn code này lên giúp mình nhé.
    Hàm get_time() bạn có thể dùng timer sau đó tăng biến đếm theo thời gian. Hàm add(x, y, z) sẽ bật điểm sáng đó và nhét nó vào bộ đệm hiển thị, và cứ sau một khoảng thời gian thì xuất cái bộ đệm đó ra màn hình và clear bộ đệm đó.
    Một hàm get_time() thì quá đơn giản, mình nghĩ bạn cần suy nghĩ thêm để tự đưa ra code. Còn hàm add(x, y, z) có thể được viết như sau (viết theo ngôn ngữ C chung chung, không cụ thể MCU nào):
    Code:
    char buffer[64]; // Một bộ đệm gồm 64 byte * 8 bit / byte = 512 bit tương ứng 512 điểm sáng
    
    // Hàm thêm điểm sáng
    void add(char x, char y, char z) {
    buffer[z*8 + y] |= (1 << x); // Set vị trí bit x của byte thứ y + z*8 return;
    } // Hàm xóa bộ đệm, hàm này được gọi bởi ngắt timer cuối mỗi khung hình, timer set khoảng 40ms để hiển thị đc 25 khung hình/giây void newframe() {
    int i; for (i = 0; i < 64; i++) buffer[i] = 0; // Xóa bộ đệm // Có thể nhét bộ tăng biến thời gian ở đây để phục vụ cho hàm get time effect(); // Gọi hiệu ứng được chọn để tạo ra bộ đệm mới, chính là các hiệu ứng được trình bày ở trên, mỗi khung hình kêu một hiệu ứng thoy return;
    }
    Computer Science major - Vietnamese-German University
    Sponsored by

    Comment


    • #47
      Mình cảm ơn bạn nhiều !
      Bạn cho mình hỏi thêm ở chỗ Audio Spectrum, hàm if (t_show > 1.0 / f_show) có tác dụng gì? Và biểu thức thay vào F(fft_total[i]) sẽ tính toán thế nào? bạn có thể cho ví dụ hoặc phép toán được không?

      Comment


      • #48
        Nguyên văn bởi sieunhan14 Xem bài viết
        Mình cảm ơn bạn nhiều !
        Bạn cho mình hỏi thêm ở chỗ Audio Spectrum, hàm if (t_show > 1.0 / f_show) có tác dụng gì? Và biểu thức thay vào F(fft_total[i]) sẽ tính toán thế nào? bạn có thể cho ví dụ hoặc phép toán được không?
        Cụ thể là bây giờ đọc lại cũng không hiểu, về vụ FFT sẽ post sau...
        Computer Science major - Vietnamese-German University
        Sponsored by

        Comment


        • #49
          bai hay co anh nao biet them ve ma tran led ko

          Comment


          • #50
            ko co bacnao lam ve ma tran led 16x32a

            Comment


            • #51
              minh dang lam led 8x32 giao tiep voiban phim may tinh ai biet thi chi giup minh nhe gmai; cuongdtcn@gmail.com

              Comment


              • #52
                banco hieu ve led cu be8x8x8 ko vayma keu de

                Comment


                • #53
                  Nguyên văn bởi hienmen Xem bài viết
                  bai hay co anh nao biet them ve ma tran led ko
                  Nguyên văn bởi hienmen Xem bài viết
                  ko co bacnao lam ve ma tran led 16x32a
                  Nguyên văn bởi hienmen Xem bài viết
                  minh dang lam led 8x32 giao tiep voiban phim may tinh ai biet thi chi giup minh nhe gmai; cuongdtcn@gmail.com
                  Nguyên văn bởi hienmen Xem bài viết
                  banco hieu ve led cu be8x8x8 ko vayma keu de
                  1. Đề nghị ko spam như thế này (30 phút tới 4 post)
                  2. Ở ngoài tiêu đề ghi là LED Cube 8x8x8 rõ ràng, nếu ko đúng chủ đề của bạn thì đừng có bình luận
                  3. Trên đây là diễn đàn, ko có chuyện gửi tận nơi
                  4. Đương nhiên là tôi hiểu, ko thôi sao tôi viết đc cái bài này vs cái video kia
                  Computer Science major - Vietnamese-German University
                  Sponsored by

                  Comment


                  • #54
                    bạn minh_cly ơi, bạn có thể giúp mình code phần spectrum analyzer không ?

                    Comment


                    • #55
                      Mới lục lại ra được cái code FFT viết bằng C#:
                      Code:
                          public class FFT
                          {
                              public static Complex[] FFT_new(Complex[] incom)
                              {
                                  int N = incom.Length;
                                  Complex[] outcom = new Complex[N];
                                  int L = maxL(N);
                                  int M = N / L;
                                  Complex[] F = new Complex[N];
                                  for (int l = 0; l < L; l++)
                                  {
                                      Complex[] com1 = new Complex[M];
                                      for (int m = 0; m < M; m++) com1[m] = incom[l + m * L];
                                      if (maxL(M) == 1) com1 = DFT(com1);
                                      else com1 = FFT_new(com1);
                                      for (int q = 0; q < M; q++) F[l + q * L] = comp_mul(com1[q], exp_comp(-2 * Math.PI * l * q / N));
                                  }
                                  for (int q = 0; q < M; q++)
                                  {
                                      Complex[] com1 = new Complex[L];
                                      for (int l = 0; l < L; l++) com1[l] = F[l + q * L];
                                      if (maxL(L) == 1) com1 = DFT(com1);
                                      else com1 = FFT_new(com1);
                                      for (int p = 0; p < L; p++) F[p + q * L] = com1[p];
                                  }
                                  for (int p = 0; p < L; p++)
                                      for (int q = 0; q < M; q++)
                                          outcom[M * p + q] = F[p + q * L];
                                  return outcom;
                              }
                              public static Complex[] DFT(Complex[] incom)
                              {
                                  int N = incom.Length;
                                  Complex[] outcom = new Complex[N];
                                  for (int k = 0; k < N; k++)
                                  {
                                      Complex[] arrcomp = new Complex[N];
                                      for (int n = 0; n < N; n++)
                                      {
                                          arrcomp[n] = comp_mul(incom[n], exp_comp(-2 * Math.PI * k * n / N));
                                      }
                                      outcom[k] = comp_add(arrcomp);
                                  }
                                  return outcom;
                              }
                              public static Complex comp_add(Complex[] incom)
                              {
                                  Complex sum; sum.r = 0; sum.i = 0;
                                  for (int i = 0; i < incom.Length; i++)
                                  {
                                      sum.r += incom[i].r;
                                      sum.i += incom[i].i;
                                  }
                                  return sum;
                              }
                              public static Complex comp_mul(Complex incom1, Complex incom2)
                              {
                                  Complex pro;
                                  pro.r = incom1.r * incom2.r - incom1.i * incom2.i;
                                  pro.i = incom1.r * incom2.i + incom1.i * incom2.r;
                                  return pro;
                              }
                              public static Complex exp_comp(double ang)
                              {
                                  Complex com;
                                  com.r = Math.Cos(ang);
                                  com.i = Math.Sin(ang);
                                  return com;
                              }
                              public static int maxL(int number)
                              {
                                  int max = 1;
                                  for (int i = 2; (i * i) <= number; i++)
                                  {
                                      if ((number % i) == 0) max = i;
                                  }
                                  return max;
                              }
                          }
                          public struct Complex
                          {
                              public double r;
                              public double i;
                          }
                      Còn từ FFT sang spectrum analyzer thì có trình bày ở trên òy đó.
                      Computer Science major - Vietnamese-German University
                      Sponsored by

                      Comment


                      • #56
                        Mình không hiểu ở chỗ hàm F(fft_total[i]) này sẽ tính toán thế nào ? bạn có thể hướng dẫn được không ? thanks bạn !

                        Comment


                        • #57
                          Nguyên văn bởi sieunhan14 Xem bài viết
                          Mình không hiểu ở chỗ hàm F(fft_total[i]) này sẽ tính toán thế nào ? bạn có thể hướng dẫn được không ? thanks bạn !
                          Sau khi bạn tính fft để ra được 8 dải tần số và lưu vào mảng fft_total. Thì bạn sẽ dùng hàm F để biến đổi kết quả đó theo ý mình mong muốn. Ví dụ bạn muốn xuất dữ liệu theo dạng tuyến tính thì bạn có F(fft_total[i]) là a*fft_total[i] + b với a, b là hằng số nào đó. Còn nếu bạn muốn hiển thị kết quả theo hàm log thì bạn thay F(fft_total[i]) thành a*log(fft_total[i]) + b.
                          Computer Science major - Vietnamese-German University
                          Sponsored by

                          Comment


                          • #58
                            Nguyên văn bởi minh_cly Xem bài viết
                            Sau khi bạn tính fft để ra được 8 dải tần số và lưu vào mảng fft_total. Thì bạn sẽ dùng hàm F để biến đổi kết quả đó theo ý mình mong muốn. Ví dụ bạn muốn xuất dữ liệu theo dạng tuyến tính thì bạn có F(fft_total[i]) là a*fft_total[i] + b với a, b là hằng số nào đó. Còn nếu bạn muốn hiển thị kết quả theo hàm log thì bạn thay F(fft_total[i]) thành a*log(fft_total[i]) + b.
                            Cảm ơn bạn nhiều nhé !

                            Comment


                            • #59
                              Bài viết của minh_cly rất hay ! Mình cũng đag làm 1 cube 4x4x4 : 4 layers with 16leds common anode /1layer and 16 collums with 4leds common cathode/ 1collum, 4 layer mình điều khiển bơi 4 pin của uln2803 qua port c, 16 collums thì nối với port b, d. Vs phần cứng như vậy, bạn có thể vd cho mình hiệu ứng đầu tiên trong tutorial với ngôn ngữ c được k !!
                              Thật sự là mình không hình dung được code để áp dụng các hiệu ứng của bạn ! Mong nhận được sự hỗ trợ
                              Thân.

                              Comment


                              • #60
                                rat hay!cam on anh minh cly nhieu nhieu!

                                Comment

                                Về tác giả

                                Collapse

                                minh_cly Tìm hiểu thêm về minh_cly

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X