int dacX = 0x60;
int dacY = 0x61;
int main(int argc, char **argv)
{
char buf[1];
if (!bcm2835_init())return 1;
bcm2835_i2c_begin(); //Start I2C operations.
bcm2835_i2c_setSlaveAddress(0x20); //I2C address
bcm2835_i2c_set_baudrate(10000); //1M baudrate
while(1)
{
buf[0] = 0xEF; //LED ON
bcm2835_i2c_write(buf,1);
bcm2835_delay(500);
buf[0] = 0xFF; //LED OFF
bcm2835_i2c_write(buf,1);
bcm2835_delay(500);
}
bcm2835_i2c_end();
bcm2835_close();
return 0;
}
mcp4725_setVoltageFast(int dac, u_int16_t volt) {
bcm2835_i2c_begin();
bcm2835_i2c_setSlaveAddress(dac);
bcm2835_i2c_write(volt>>8);
bcm2835_i2c_write(volt);
bcm2835_i2c_end();
}
#include "util.h"
#include "config.h"
#include "dac.h"
#include "pecado.h"
#include "text.h"
#include "line.h"
#include "shape.h"
void setup() {
Serial.begin(9600);
xyz.Setup();
//digitalWrite(A4, LOW);
//digitalWrite(A5, LOW);
}
void loop() {
//draw_spiral();
//draw_marchingborder();
draw_xyxor();
}
int16_t scale = 0;
int16_t scale_sin = 1;
int8_t scale_sin_d = -1;
int16_t textscale = 4 * 256;
int16_t d_textscale = 100;
uint8_t a;
uint16_t textangle = 0;
uint8_t centre_x, centre_y;
uint16_t centreangle = 0;
#define XYXOR_WORD "ZLOSHA"
#define XYXOR_LEN 3
void draw_marchingborder()
{
trazador.SetPace(0);
for (int i = -1, f = 0; i < 256; i += 8, f++) {
int16_t x = 128 + isin(i);
int16_t y = 128 + icos(i);
if (i == -1 || ((f + textangle / 4) % 2 == 0)) {
trazador.MoveTo(x, y);
}
else {
trazador.LineTo(x, y);
}
}
}
void draw_spiral()
{
for (int i = -1; i < 256; i += 8) {
int16_t x = isin(a);
int16_t y = icos(a);
x = 128 + (x * scale) / 128;
y = 128 + (y * scale) / 128;
if (i == -1) {
trazador.MoveTo(x, y);
}
else {
trazador.LineTo(x, y);
}
scale += 4;
a += 8;
}
}
char timetext[6];
char bigtext[17];
uint16_t time;
uint16_t frameno;
void updateText()
{
timetext[0] = '0' + (time >> 12);
timetext[1] = '0' + ((time >> 8) & 15);
timetext[2] = (frameno & 64) == 0 ? ':' : ' ';
timetext[3] = '0' + ((time >> 4) & 15);
timetext[4] = '0' + (time & 15);
timetext[5] = 0;
if ((frameno & 16) == 0) {
//for (int i = 0; i < 4; i++) {
int i = rand() % 4;
int rnd;
while ((rnd = rand() % 32) > 25);
bigtext[i] = 'A' + rnd;
//}
bigtext[4] = 0;
}
}
void draw_xyxor()
{
frameno++;
trazador.SetPace(0);
scale = 0;
//draw_marchingborder();
//draw_spiral();
int ox = 128 - textscale * TEXT_CHARWIDTH * XYXOR_LEN / 2 / 256;
int oy = 128 - textscale * TEXT_CHARHEIGHT / 2 / 256;
irotate(&ox, &oy, 128, 128, textangle / 5);
trazador.MoveTo(ox, oy);
//text.Str(XYXOR_WORD, textscale, textangle/5);
textangle--;
textscale += d_textscale;
if (textscale > 12 * 256 || textscale < 4 * 256) d_textscale = -d_textscale;
centre_x = 128 + isin(centreangle) / 4;
centre_y = 128 + icos(centreangle) / 4;
centreangle += 1;
if (++scale == 128) scale = 1;
Serial.println(millis());
star.SetTransform(centre_x, centre_y, textscale/2, textscale/2, textangle/5);
star.Trace();
Serial.println(millis());
#if 0
sinus.SetHalfPeriods(2);
scale_sin += scale_sin_d;
if (scale_sin == 32 || scale_sin == -32) scale_sin_d = -scale_sin_d;
sinus.SetTransform(128, 200, 100, scale_sin, 0);
sinus.Trace();
#endif
//sinus.SetTransform(128,200, 256, scale_sin, 0);
//scale_sin += scale_sin_d;
//if (scale_sin == 128 || scale_sin == -128) scale_sin_d = -scale_sin_d;
//draw_marchingborder();
#if 0
if ((textangle & 7) == 0) {
grid.SetTransform(128, 128, 180, 180, 0);
//grid.SetTransform(centre_x, centre_y, 180, 180, textangle);
grid.Trace();
}
#endif
if (frameno % 16 == 0) {
time = (time & 0xff00) + bcd_increment(time & 0xff);
if ((time & 0xff) == 0x60) {
time = bcd_increment(time >> 8) << 8;
}
updateText();
}
/*
trazador.MoveTo(60, 50);
text.Str(timetext, 1024, 0);
trazador.MoveTo(30, 100);
text.Str(bigtext, 2048, 0);
*/
}