Pages: 1 2 3 [4]   Go Down
Author Topic: This code works but there must be a better/more elegant way  (Read 2785 times)
0 Members and 1 Guest are viewing this topic.
Des Moines, WA - USA
Offline Offline
God Member
*****
Karma: 25
Posts: 779
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry for the lack of verbose description but hopefully this will be somewhat self explanatory.

Roughly your code aped back at you in the form of arrays of structs as I interpreted the last code you posted above.

Code:
// logically this describes to the compiler what a block of memory we've named
// as 'record_t' will look like.
//
// From it the compiler will then know such a item in memory will have field
// names as given, in the order given and of the sizes as specified by the data
// 'types' specified before the field name.
//
// collectively a symbol when defined of type 'record_t' occupies 6 bytes

struct record_t
{
    byte    Channel_Number;         // this will occupy 1 byte space
    int     Channel_Frequency;      // this will occupy 2 bytes space
    boolean Output_Pin1;            // this will occupy 1 byte space
    boolean Output_Pin2;            // this will occupy 1 byte space
    boolean Output_Pin3;            // this will occupy 1 byte space
};


// here we actually declare an arrays of our user defined type 'record_t' we've
// specified the layout of above
//
// this array of type 'record_t' will reserve space in memory for the number of
// 'record_t' as specified by the provided initializer values
//
// in this case if I've added them correctly we will have reservered space for 8
// sequential 6 byte blocks of memory in the form of an 'record_t' as specified
// above

// the initial array values can be set during declaration only as follows

record_t records[] =
{
      { 1, 5705, 0, 0, 0 }  // 0
    , { 2, 5685, 1, 0, 0 }  // 1
    , { 3, 5665, 0, 1, 0 }  // 2
    , { 4, 5645, 1, 1, 0 }  // 3
    , { 5, 5885, 0, 0, 1 }  // 4
    , { 6, 5905, 1, 0, 1 }  // 5
    , { 7, 5925, 0, 1, 1 }  // 6
    , { 8, 5945, 1, 1, 1 }  // 7
};

void setup()
{
    // copy the array members into the fields of the structure 'record_t' in the
    // order in which they appear listed n the array
    //
    //  'Channel_Number', 'Channel_Frequency', Output_Pin1, Output_Pin2, Output_Pin3
    //
    // the 'magic' that lets the compiler do this is the cast operator
    // '(record_t)' which tell the compiler the data is in the form of a
    // 'record_t'
    record[8] = (record_t){ 0, 1, true, false, false };
}

void loop()
{}
« Last Edit: April 21, 2013, 08:02:19 pm by lloyddean » Logged

Pages: 1 2 3 [4]   Go Up
Jump to: