Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 280 → Rev 281

/PIC Stuff/PICX_12F1840_Clock/NEOPIXEL.c
1,17 → 1,17
#include <xc.h>
#include "defines.h"
#include "NEOPIXEL.h"
 
static NEOPIXEL_DATA* neopixel_data_ptr;
extern NEOPIXEL_DATA neopixel_data;
 
void NeoPixel_Init(NEOPIXEL_DATA *data) {
neopixel_data_ptr = data;
void NeoPixel_Init(void) {
 
// Clear buffer
for (char i = 0; i < NEOPIXEL_LENGTH * 3; i++) {
neopixel_data_ptr->values[i] = 0x0;
for (uint8_t i = 0; i < NEOPIXEL_LENGTH * 3; i++) {
neopixel_data.values[i] = 0x0;
}
 
neopixel_data.offset = 0;
 
// Output pin initially blocked
NEOPIXEL_TRIS = 1;
 
34,23 → 34,42
NEOPIXEL_TRIS = 0;
}
 
void NeoPixel_Set(char index, char R, char G, char B) {
if (index >= NEOPIXEL_LENGTH) return;
void NeoPixel_Offet(uint8_t value) {
neopixel_data.offset = value;
}
 
neopixel_data_ptr->values[(index * 3) + 0] = G;
neopixel_data_ptr->values[(index * 3) + 1] = R;
neopixel_data_ptr->values[(index * 3) + 2] = B;
void NeoPixel_Clear(void) {
// Clear buffer
for (uint8_t i = 0; i < NEOPIXEL_LENGTH * 3; i++) {
neopixel_data.values[i] = 0x0;
}
}
 
void NeoPixel_Set(uint8_t index, uint8_t R, uint8_t G, uint8_t B) {
uint8_t i = ((index + neopixel_data.offset) % NEOPIXEL_LENGTH);
neopixel_data.values[(i * 3) + 0] = G;
neopixel_data.values[(i * 3) + 1] = R;
neopixel_data.values[(i * 3) + 2] = B;
}
 
void NeoPixel_Or(uint8_t index, uint8_t R, uint8_t G, uint8_t B) {
uint8_t i = ((index + neopixel_data.offset) % NEOPIXEL_LENGTH);
 
neopixel_data.values[(i * 3) + 0] |= G;
neopixel_data.values[(i * 3) + 1] |= R;
neopixel_data.values[(i * 3) + 2] |= B;
}
 
void NeoPixel_Write_All(void) {
for (char i = 0; i < NEOPIXEL_LENGTH * 3; i++) {
NeoPixel_Write_One(neopixel_data_ptr->values[i]);
for (uint8_t i = 0; i < NEOPIXEL_LENGTH * 3; i++) {
NeoPixel_Write_One(neopixel_data.values[i]);
}
// Delay for 50us to latch data
__delay_us(50);
}
 
void NeoPixel_Write_One(char value) {
void NeoPixel_Write_One(uint8_t value) {
// Enable timer and wait for it to overflow
T2CONbits.TMR2ON = 1;
while (!PIR1bits.TMR2IF);