Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 273 → Rev 274

/PIC Stuff/Cerebot_32MX7_LED_Cube/ANIMATIONS.c
233,22 → 233,16
 
void Animation_Cube_In_Cube(uint16_t delay_ms) {
uint8_t x;
for (x = 0; x < 5; x++) {
for (x = 0; x < 6; x++) {
Cube_Clear();
if (x == 0)
Cube_Set_Shell(0, RED);
else if (x == 1)
else if (x == 1 || x == 5)
Cube_Set_Shell(1, YELLOW);
else if (x == 2)
else if (x == 2 || x == 4)
Cube_Set_Shell(2, GREEN);
else if (x == 3)
Cube_Set_Shell(3, BLUE);
else {
Cube_Set_Shell(0, RED);
Cube_Set_Shell(1, YELLOW);
Cube_Set_Shell(2, GREEN);
Cube_Set_Shell(3, BLUE);
}
Delay_MS(delay_ms);
}
}
257,48 → 251,72
uint8_t x,i,j,k;
for (x = 0; x < 7; x++) {
Cube_Clear();
for (i = 0; i < CUBE_LAYER_COUNT; i++) {
if ((x == 0 || x == 6)&&(i == 0 || i == 7)) {
Cube_Set_Layer(i,r,g,b);
} else if ((x == 1 || x == 5)&&(i == 1 || i == 6)) {
for (j = 1; j < CUBE_ROW_COUNT-1; j++)
for (k = 1; k < CUBE_COLUMN_COUNT-1; k++)
Cube_Set_Pixel(i,j,k,r,g,b);
} else if ((x == 2 || x == 4)&&(i == 2 || i == 5)) {
for (j = 2; j < CUBE_ROW_COUNT-2; j++)
for (k = 2; k < CUBE_COLUMN_COUNT-2; k++)
Cube_Set_Pixel(i,j,k,r,g,b);
} else if ((x == 3)&&(i == 3 || i == 4)) {
for (j = 3; j < CUBE_ROW_COUNT-3; j++)
for (k = 3; k < CUBE_COLUMN_COUNT-3; k++)
Cube_Set_Pixel(i,j,k,r,g,b);
}
switch (x % 7) {
case 0:
Cube_Set_Shell(3, r, g, b);
break;
case 1:
Cube_Set_Shell(2, r, g, b);
break;
case 2:
Cube_Set_Shell(1, r, g, b);
break;
case 3:
Cube_Set_Shell(0, r, g, b);
break;
case 4:
Cube_Set_Shell(1, r, g, b);
break;
case 5:
Cube_Set_Shell(2, r, g, b);
break;
case 6:
Cube_Set_Shell(3, r, g, b);
break;
}
 
if ((x == 0 || x == 6)&&(i > 0 && i < 8)) {
for (j = 0; j < 8; j++) {
Cube_Set_Pixel(i,j,0,r,g,b);
Cube_Set_Pixel(i,j,7,r,g,b);
Cube_Set_Pixel(i,0,j,r,g,b);
Cube_Set_Pixel(i,7,j,r,g,b);
}
}
if ((x == 1 || x == 5)&&(i > 1 && i < 7)) {
for (j = 1; j < 7; j++) {
Cube_Set_Pixel(i,j,1,r,g,b);
Cube_Set_Pixel(i,j,6,r,g,b);
Cube_Set_Pixel(i,1,j,r,g,b);
Cube_Set_Pixel(i,6,j,r,g,b);
}
}
if ((x == 2 || x == 4)&&(i > 2 && i < 6)) {
for (j = 2; j < 6; j++) {
Cube_Set_Pixel(i,j,2,r,g,b);
Cube_Set_Pixel(i,j,5,r,g,b);
Cube_Set_Pixel(i,2,j,r,g,b);
Cube_Set_Pixel(i,5,j,r,g,b);
}
}
}
// for (i = 0; i < CUBE_LAYER_COUNT; i++) {
// if ((x == 0 || x == 6)&&(i == 0 || i == 7)) {
// Cube_Set_Layer(i,r,g,b);
// } else if ((x == 1 || x == 5)&&(i == 1 || i == 6)) {
// for (j = 1; j < CUBE_ROW_COUNT-1; j++)
// for (k = 1; k < CUBE_COLUMN_COUNT-1; k++)
// Cube_Set_Pixel(i,j,k,r,g,b);
// } else if ((x == 2 || x == 4)&&(i == 2 || i == 5)) {
// for (j = 2; j < CUBE_ROW_COUNT-2; j++)
// for (k = 2; k < CUBE_COLUMN_COUNT-2; k++)
// Cube_Set_Pixel(i,j,k,r,g,b);
// } else if ((x == 3)&&(i == 3 || i == 4)) {
// for (j = 3; j < CUBE_ROW_COUNT-3; j++)
// for (k = 3; k < CUBE_COLUMN_COUNT-3; k++)
// Cube_Set_Pixel(i,j,k,r,g,b);
// }
//
// if ((x == 0 || x == 6)&&(i > 0 && i < 8)) {
// for (j = 0; j < 8; j++) {
// Cube_Set_Pixel(i,j,0,r,g,b);
// Cube_Set_Pixel(i,j,7,r,g,b);
// Cube_Set_Pixel(i,0,j,r,g,b);
// Cube_Set_Pixel(i,7,j,r,g,b);
// }
// }
// if ((x == 1 || x == 5)&&(i > 1 && i < 7)) {
// for (j = 1; j < 7; j++) {
// Cube_Set_Pixel(i,j,1,r,g,b);
// Cube_Set_Pixel(i,j,6,r,g,b);
// Cube_Set_Pixel(i,1,j,r,g,b);
// Cube_Set_Pixel(i,6,j,r,g,b);
// }
// }
// if ((x == 2 || x == 4)&&(i > 2 && i < 6)) {
// for (j = 2; j < 6; j++) {
// Cube_Set_Pixel(i,j,2,r,g,b);
// Cube_Set_Pixel(i,j,5,r,g,b);
// Cube_Set_Pixel(i,2,j,r,g,b);
// Cube_Set_Pixel(i,5,j,r,g,b);
// }
// }
// }
Delay_MS(delay_ms);
}
}
306,60 → 324,90
void Animation_Double_Rotation(uint16_t delay_ms) {
Cube_Clear();
uint8_t x,y,z;
for (z = 0; z < 3; z++) {
switch (z % 3) {
case 0:
for (y = 0; y < CUBE_LAYER_COUNT; y++) {
Cube_Set_Pixel(y,0,0,RED);
Cube_Set_Pixel(y,1,1,RED);
Cube_Set_Pixel(y,2,2,RED);
Cube_Set_Pixel(y,3,3,RED);
Cube_Set_Pixel(y,4,4,RED);
Cube_Set_Pixel(y,5,5,RED);
Cube_Set_Pixel(y,6,6,RED);
Cube_Set_Pixel(y,7,7,RED);
}
break;
case 1:
for (y = 0; y < CUBE_LAYER_COUNT; y++) {
Cube_Set_Pixel(y,0,0,GREEN);
Cube_Set_Pixel(y,1,1,GREEN);
Cube_Set_Pixel(y,2,2,GREEN);
Cube_Set_Pixel(y,3,3,GREEN);
Cube_Set_Pixel(y,4,4,GREEN);
Cube_Set_Pixel(y,5,5,GREEN);
Cube_Set_Pixel(y,6,6,GREEN);
Cube_Set_Pixel(y,7,7,GREEN);
}
break;
case 2:
for (y = 0; y < CUBE_LAYER_COUNT; y++) {
Cube_Set_Pixel(y,0,0,BLUE);
Cube_Set_Pixel(y,1,1,BLUE);
Cube_Set_Pixel(y,2,2,BLUE);
Cube_Set_Pixel(y,3,3,BLUE);
Cube_Set_Pixel(y,4,4,BLUE);
Cube_Set_Pixel(y,5,5,BLUE);
Cube_Set_Pixel(y,6,6,BLUE);
Cube_Set_Pixel(y,7,7,BLUE);
}
break;
}
 
for (x = 0; x < 28; x++) {
Delay_MS(delay_ms);
Cube_Rotate(0);
}
for (y = 0; y < CUBE_LAYER_COUNT; y++) {
Cube_Set_Pixel(y,0,0,RED);
Cube_Set_Pixel(y,1,1,ORANGE);
Cube_Set_Pixel(y,2,2,YELLOW);
Cube_Set_Pixel(y,3,3,GREEN);
Cube_Set_Pixel(y,4,4,TEAL);
Cube_Set_Pixel(y,5,5,BLUE);
Cube_Set_Pixel(y,6,6,PURPLE);
Cube_Set_Pixel(y,7,7,WHITE);
}
for (x = 0; x < 28; x++) {
Delay_MS(delay_ms);
Cube_Rotate(0);
}
}
 
// for (z = 0; z < 3; z++) {
// switch (z % 3) {
// case 0:
// for (y = 0; y < CUBE_LAYER_COUNT; y++) {
// Cube_Set_Pixel(y,0,0,RED);
// Cube_Set_Pixel(y,1,1,RED);
// Cube_Set_Pixel(y,2,2,RED);
// Cube_Set_Pixel(y,3,3,RED);
// Cube_Set_Pixel(y,4,4,RED);
// Cube_Set_Pixel(y,5,5,RED);
// Cube_Set_Pixel(y,6,6,RED);
// Cube_Set_Pixel(y,7,7,RED);
// }
// break;
// case 1:
// for (y = 0; y < CUBE_LAYER_COUNT; y++) {
// Cube_Set_Pixel(y,0,0,GREEN);
// Cube_Set_Pixel(y,1,1,GREEN);
// Cube_Set_Pixel(y,2,2,GREEN);
// Cube_Set_Pixel(y,3,3,GREEN);
// Cube_Set_Pixel(y,4,4,GREEN);
// Cube_Set_Pixel(y,5,5,GREEN);
// Cube_Set_Pixel(y,6,6,GREEN);
// Cube_Set_Pixel(y,7,7,GREEN);
// }
// break;
// case 2:
// for (y = 0; y < CUBE_LAYER_COUNT; y++) {
// Cube_Set_Pixel(y,0,0,BLUE);
// Cube_Set_Pixel(y,1,1,BLUE);
// Cube_Set_Pixel(y,2,2,BLUE);
// Cube_Set_Pixel(y,3,3,BLUE);
// Cube_Set_Pixel(y,4,4,BLUE);
// Cube_Set_Pixel(y,5,5,BLUE);
// Cube_Set_Pixel(y,6,6,BLUE);
// Cube_Set_Pixel(y,7,7,BLUE);
// }
// break;
// }
//
// for (x = 0; x < 28; x++) {
// Delay_MS(delay_ms);
// Cube_Rotate(0);
// }
// }
//}
 
void Animation_Wave1(uint16_t delay_ms) {
uint8_t i, j;
uint8_t data[8];
static uint8_t data[8];
uint32_t r;
for (i = 0; i < 16; i++) {
for (j = 0; j < 8; j++)
data[j] = rand() % 9;
for (j = 0; j < 8; j++) {
r = rand();
if (r % 3 == 0) {
// Increase
data[j] = (data[j] == CUBE_LAYER_COUNT - 1) ? data[j] : data[j] + 1;
} else if (r % 3 == 1) {
// Decrease
data[j] = (data[j] == 0) ? data[j] : data[j] - 1;
} else {
// No change
data[j] = data[j];
}
}
Cube_Shift_Waterfall(data);
Delay_MS(delay_ms);
}
367,11 → 415,23
 
void Animation_Wave2(uint16_t delay_ms) {
uint8_t i, j;
uint8_t data[8];
static uint8_t data[8];
uint32_t r;
 
for (i = 0; i < 16; i++) {
for (j = 0; j < 8; j++)
data[j] = rand() % 9;
for (j = 0; j < 8; j++) {
r = rand();
if (r % 3 == 0) {
// Increase
data[j] = (data[j] == CUBE_LAYER_COUNT - 1) ? data[j] : data[j] + 1;
} else if (r % 3 == 1) {
// Decrease
data[j] = (data[j] == 0) ? data[j] : data[j] - 1;
} else {
// No change
data[j] = data[j];
}
}
Cube_Shift_Waterfall2(data);
Delay_MS(delay_ms);
}
/PIC Stuff/Cerebot_32MX7_LED_Cube/ANIMATIONS.h
10,6 → 10,7
void Animation_Pseudo_Random_Colors(uint16_t delay_ms);
void Animation_Random_Colors(uint16_t delay_ms);
void Animation_Cube_In_Cube(uint16_t delay_ms);
void Animation_Cube_In_Out(uint16_t delay_ms, uint16_t r, uint16_t g, uint16_t b);
void Animation_Double_Rotation(uint16_t delay_ms);
void Animation_Wave1(uint16_t delay_ms);
void Animation_Wave2(uint16_t delay_ms);
/PIC Stuff/Cerebot_32MX7_LED_Cube/CONTROLLERS.c
4,24 → 4,58
 
static CONTROLLER_DATA *ctrl_data_p;
 
void Controller_Init(CONTROLLER_DATA *data,
void (*btn_change_callback)(uint8_t, uint8_t)) {
void Controller_Init(CONTROLLER_DATA *data) {
ctrl_data_p = data;
 
ctrl_data_p->btn_change_callback = btn_change_callback;
ctrl_data_p->ctrl_1_connected = 0;
ctrl_data_p->ctrl_1_buttons_prev = CONTROLLER_BTN_DEFAULT;
ctrl_data_p->ctrl_1_leds = CONTROLLER_LED_DEFAULT;
ctrl_data_p->ctrl_1_active = 0;
// Variable initialization
int i;
for (i = 0; i < CONTROLLER_MAX_COUNT; i++) {
ctrl_data_p->connected_controllers[i] = 0x0;
ctrl_data_p->led_status[i][0] = 0x0;
ctrl_data_p->led_status[i][1] = 0x0;
ctrl_data_p->btn_prev[i] = 0x0;
ctrl_data_p->btn_last[i] = 0x0;
}
 
ctrl_data_p->ctrl_2_connected = 0;
ctrl_data_p->ctrl_2_buttons_prev = CONTROLLER_BTN_DEFAULT;
ctrl_data_p->ctrl_2_leds = CONTROLLER_LED_DEFAULT;
ctrl_data_p->ctrl_2_active = 0;
ctrl_data_p->connected_count = 0x0;
 
// Poll to see which controllers are connected
Controller_Poll_Connected();
}
 
void Controller_Poll_Connected(void) {
uint8_t buffer[2] = {CONTROLLER_CMD_RESET};
uint8_t result, length, i;
uint8_t address = CONTROLLER_PREFIX_ADDRESS + CONTROLLER_START_ADDRESS;
 
// Attempt to contact each controller to see if its connected
for (i = 0; i < CONTROLLER_MAX_COUNT; i++) {
// I2C1_Master_Send(address + i, buffer, 1);
// do {
// result = I2C1_Get_Status();
// } while (!result);
// if (result == I2C1_SEND_OK) {
// // If a controller is connected, save its address
// ctrl_data_p->connected_controllers[ctrl_data_p->connected_count]
// = address + i;
// ctrl_data_p->connected_count++;
// }
I2C1_Master_Restart(address + i, CONTROLLER_CMD_READ, 1);
do {
result = I2C1_Get_Status();
} while (!result);
if (result == I2C1_RECV_OK) {
length = I2C1_Read_Buffer(buffer);
// If a controller is connected, save its address
ctrl_data_p->connected_controllers[ctrl_data_p->connected_count]
= address + i;
ctrl_data_p->connected_count++;
}
}
}
 
void Controller_Update(void) {
/*
uint8_t buffer[2];
uint8_t result, length;
uint8_t ctrl_1_btn = 0, ctrl_2_btn = 0;
126,20 → 160,21
(*ctrl_data_p->btn_change_callback)(ctrl_1_btn, ctrl_2_btn);
}
}
*/
}
 
void Controller_Set_Leds(uint8_t ctrl_1, uint8_t ctrl_2) {
ctrl_data_p->ctrl_1_leds = ctrl_1;
ctrl_data_p->ctrl_2_leds = ctrl_2;
void Controller_Set_Leds(uint8_t controller, uint16_t value) {
// ctrl_data_p->ctrl_1_leds = ctrl_1;
// ctrl_data_p->ctrl_2_leds = ctrl_2;
}
 
uint8_t Controller_Query(void) {
// Returns the active status of attached controllers
if (ctrl_data_p->ctrl_1_active && ctrl_data_p->ctrl_2_active)
return 0x3;
else if (ctrl_data_p->ctrl_1_active)
return 0x1;
else if (ctrl_data_p->ctrl_2_active)
return 0x2;
return 0;
uint8_t Controller_Query(uint8_t controller) {
// // Returns the active status of attached controllers
// if (ctrl_data_p->ctrl_1_active && ctrl_data_p->ctrl_2_active)
// return 0x3;
// else if (ctrl_data_p->ctrl_1_active)
// return 0x1;
// else if (ctrl_data_p->ctrl_2_active)
// return 0x2;
// return 0;
}
/PIC Stuff/Cerebot_32MX7_LED_Cube/CONTROLLERS.h
1,35 → 1,33
#ifndef CONTROLLERS_H
#define CONTROLLERS_H
 
#define CONTROLLER_READ 0xA
#define CONTROLLER_WRITE 0xB
#define CONTROLLER_CMD_READ 0xA
#define CONTROLLER_CMD_WRITE 0xB
#define CONTROLLER_CMD_RESET 0xC
 
#define CONTROLLER_BTN_DEFAULT 0xC0
#define CONTROLLER_LED_DEFAULT 0x00
 
#define CONTROLLER_1_ADDRESS 0x24
#define CONTROLLER_2_ADDRESS 0x25
#define CONTROLLER_PREFIX_ADDRESS 0xA0
#define CONTROLLER_START_ADDRESS 0x01
#define CONTROLLER_END_ADDRESS 0x08
 
#define CONTROLLER_MAX_COUNT 8
 
typedef struct {
void (*btn_change_callback)(uint8_t ctrl_1, uint8_t ctrl_2);
uint8_t connected_controllers[CONTROLLER_MAX_COUNT];
uint8_t led_status[CONTROLLER_MAX_COUNT][2];
uint8_t btn_prev[CONTROLLER_MAX_COUNT];
uint8_t btn_last[CONTROLLER_MAX_COUNT];
 
uint8_t ctrl_1_connected;
uint8_t ctrl_1_buttons_prev;
uint8_t ctrl_1_leds;
uint8_t ctrl_1_active;
uint8_t ctrl_2_connected;
uint8_t ctrl_2_buttons_prev;
uint8_t ctrl_2_leds;
uint8_t ctrl_2_active;
uint8_t connected_count;
} CONTROLLER_DATA;
 
void Controller_Init(CONTROLLER_DATA *data,
void (*btn_change_callback)(uint8_t, uint8_t));
void Controller_Init(CONTROLLER_DATA *data);
void Controller_Poll_Connected(void);
void Controller_Update(void);
void Controller_Set_Leds(uint8_t ctrl_1, uint8_t ctrl_2);
void Controller_Btn_Change(void (*callback)(uint8_t, uint8_t));
uint8_t Controller_Query(void);
void Controller_Set_Leds(uint8_t controller, uint16_t value);
uint8_t Controller_Query(uint8_t controller);
 
#endif /* CONTROLLERS_H */
 
/PIC Stuff/Cerebot_32MX7_LED_Cube/defines.h
8,8 → 8,8
#include <stdint.h>
 
// Uncomment ONE of the following:
//#define CEREBOT_32MX7
#define CEREBOT_MX7CK
#define CEREBOT_32MX7
// #define CEREBOT_MX7CK
 
#define CPU_CLOCK_HZ 80000000UL
#define PERIPHERAL_CLOCK_HZ 80000000UL
/PIC Stuff/Cerebot_32MX7_LED_Cube/main.c
190,7 → 190,7
 
// Initialize controllers
CONTROLLER_DATA ctrl_data;
Controller_Init(&ctrl_data, NULL);
Controller_Init(&ctrl_data);
 
// Initialize the Ethernet module
if (op_state == BOARD_MODE_ETHERNET) {
214,7 → 214,7
Idle_Animation_Sequence();
break;
case BOARD_MODE_SNAKE:;
Controller_Init(&ctrl_data, &Snake_Update_Direction);
Controller_Init(&ctrl_data);
TIMER4_Init(NULL, &Controller_Update, NULL, 0);
TIMER4_Start();
Snake_Init(&snake_data);
221,7 → 221,7
Snake_Main();
break;
case BOARD_MODE_TRON:
Controller_Init(&ctrl_data, &Tron_Update_Direction);
Controller_Init(&ctrl_data);
TIMER4_Init(NULL, &Controller_Update, NULL, 0);
TIMER4_Start();
Tron_Init(&tron_data);
293,6 → 293,8
Animation_Cube_In_Cube(300);
Animation_Double_Rotation(30);
Animation_Double_Rotation(30);
Animation_Double_Rotation(30);
Animation_Double_Rotation(30);
Animation_Pseudo_Random_Colors(300);
Animation_Pseudo_Random_Colors(300);
Animation_Pseudo_Random_Colors(300);
/PIC Stuff/Cerebot_32MX7_LED_Cube/nbproject/Makefile-genesis.properties
1,5 → 1,5
#
#Mon Feb 24 14:18:24 EST 2014
#Thu Mar 13 23:02:03 EDT 2014
default.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=83f4565fa27ad9b8015f63d69ef74f66
default.languagetoolchain.dir=C\:\\Program Files (x86)\\Microchip\\xc32\\v1.31\\bin
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=1f98a0eed69cb2a45c12981fa9470927
/PIC Stuff/Cerebot_32MX7_LED_Cube/nbproject/configurations.xml
130,6 → 130,13
<property key="exclude-floating-point-library" value="false"/>
<property key="exclude-standard-libraries" value="false"/>
<property key="extra-lib-directories" value=""/>
<property key="fill-flash-options-addr" value=""/>
<property key="fill-flash-options-const" value=""/>
<property key="fill-flash-options-how" value="0"/>
<property key="fill-flash-options-inc-const" value="1"/>
<property key="fill-flash-options-increment" value=""/>
<property key="fill-flash-options-seq" value=""/>
<property key="fill-flash-options-what" value="0"/>
<property key="generate-16-bit-code" value="false"/>
<property key="generate-cross-reference-file" value="false"/>
<property key="generate-micro-compressed-code" value="false"/>
185,7 → 192,6
<property key="ToolFirmwareFilePath"
value="Press to browse for a specific firmware version"/>
<property key="ToolFirmwareOption.UseLatestFirmware" value="true"/>
<property key="firmware.download.all" value="false"/>
<property key="memories.bootflash" value="false"/>
<property key="memories.configurationmemory" value="false"/>
<property key="memories.eeprom" value="false"/>
/PIC Stuff/Cerebot_32MX7_LED_Cube/nbproject/private/configurations.xml
4,7 → 4,7
<defaultConf>0</defaultConf>
<confs>
<conf name="default" type="2">
<platformToolSN>:=MPLABComm-USB-Microchip:=&lt;vid>04D8:=&lt;pid>8108:=&lt;rev>0002:=&lt;man>Digilent:=&lt;prod>CerebotMX7CK:=&lt;sn>D459520:=&lt;drv>x:=&lt;xpt>h:=end</platformToolSN>
<platformToolSN>:=MPLABComm-USB-Microchip:=&lt;vid>04D8:=&lt;pid>8108:=&lt;rev>0002:=&lt;man>Digilent:=&lt;prod>Cerebot 32MX7:=&lt;sn>D370400:=&lt;drv>x:=&lt;xpt>h:=end</platformToolSN>
<languageToolchainDir>C:\Program Files (x86)\Microchip\xc32\v1.31\bin</languageToolchainDir>
<mdbdebugger version="1">
<placeholder1>place holder 1</placeholder1>