/*
* File: spider2main.c
* Author: hmikelson
*
* Created on March 24, 2015, 4:30 PM
*/
#if defined(__XC)
#include <xc.h> /* XC8 General Include File */
#elif defined(HI_TECH_C)
#include <htc.h> /* HiTech General Include File */
#endif
#include <stdint.h> /* For uint8_t definition */
#include <stdbool.h> /* For true/false definition */
#include <stdlib.h> /*rand()*/
#pragma config MCLRE=OFF,CP=OFF,WDTE=OFF,FOSC=INTOSCIO
#define _XTAL_FREQ 4000000
uint8_t sGPIO;
void init()
{
//Configure GPIO Port
ANSEL = 0b00000000; //Configure all GPIO pins as digital
TRISIO = 0b11001000; //Set GP3 as input and the rest as outputs
OPTION_REGbits.nGPPU = 0;
WPU = 0b00000100; //Enable weak pullups on GP2
//Configuer AD Convertor
ADCON0 = 0x00; //AD disabled
ADRESH = 0x00; //Init the AD Register
//Configure Comparator
CMCON0 = 0xFF; // Comparator is turned off
CMCON1 = 0x00; // Comparator is turned off
//Interrupt configuration
INTCON = 0x00; //Disable all interrupts
}
void vdelay(int n)
{
int i;
for (i=0;i<=n;i++)
{
__delay_us(1);
}
}
void fade_eyes(int n) // PWM sweep high f to low f
{
int i;
{
for (i=0;i<n;i++)
{
GPIO = 0b11000101;
vdelay(i);
GPIO = 0b11000000;
vdelay(n-i);
}
for (i=0;i<n;i++)
{
GPIO = 0b11000101;
vdelay(n-i);
GPIO = 0b11000000;
vdelay(i);
}
}
}
void scan_eyes(int n) // PWM sweep high f to low f
{
int i,j,k;
int i1,i2,i3,pw1,pw2;
uint8_t sGPIO;
i1=1; i2=-1; pw1=0; pw2=n;
sGPIO = GPIO;
for (k=0;k<6;k++)
{
for (j=0;j<n;j++)
{
for (i=0;i<n;i++)
{
if (i>pw1)
{
sGPIO = sGPIO & 0b11111110;
}
else
{
sGPIO = sGPIO | 0b00000001;
}
if (i>pw2)
{
sGPIO = sGPIO & 0b11111011;
}
else
{
sGPIO = sGPIO | 0b00000100;
}
GPIO = sGPIO;
}
pw1 = pw1 + i1;
pw2 = pw2 + i2;
}
i3 = i1; i1 = i2, i2 = i3;
}
}
void dark_eyes(void) // PWM sweep high f to low f
{
GPIO = 0b11000000;
__delay_ms(1000);
}
void main()
{
uint8_t r,r2;
init();
while(1)
{
r=rand()%8;
r2 = rand()%8+1;
//r=3;
switch (r)
{
case 1:
fade_eyes(100*r2);
break;
case 2:
fade_eyes(20*r2);
break;
case 3:
scan_eyes(20*r2);
break;
default:
dark_eyes();
}
}
}
Friday, March 27, 2015
Wednesday, March 18, 2015
Spherical Lissajous Curves using POVRay
Some examples of spherical Lissajous curves created with POVRay.
##############################################################################
# This program created by Hans Mikelson February 1998
#
# This program generates a POV file so that 3D graphs can be
# rendered using the POV ray tracing package. The surface is mapped
# as a sphere for each data point sampled. This was configured for
# use on a Win95 computer. Some changes may need to be made for use on
# other systems. This program assumes that POVRay has been installed
# and that there is a path to it.
##############################################################################
# Define files for the template (header/footer), the data and the POV file.
$povfile="plotter.pov";
$scale =.25;
$radius = $scale;
# open the POV file.
open (POV, ">$povfile");
# Print the header
print POV "#version 3.0\n";
print POV "global_settings { assumed_gamma 2.2 }\n\n";
print POV "#include \"colors.inc\"\n";
print POV "#include \"shapes.inc\"\n";
print POV "#include \"textures.inc\"\n";
print POV "#include \"glass.inc\"\n";
print POV "#include \"stones.inc\"\n\n";
print POV "#include \"metals.inc\"\n\n";
print POV "camera {\n";
print POV "location <-2,-9,-2>\n";
print POV " look_at <-2,0,-2>}\n\n";
print POV "// Light sources \n";
print POV "light_source {<-30, 21, 40> color White}\n";
print POV "light_source {< 0, -8, -4> color White}\n";
print POV "light_source {< 2, 30, 3> color White}\n";
print POV "background { color rgb <1, 1, 1> }\n\n";
@ul = (.3,.3,.6);
@vl = (.2,.2,.9);
for ($j=0; $j<1; $j++)
{
for ($k=0; $k<1; $k++)
{
$u = $ul[$j];
$v = $vl[$k];
$rad = 2;
# Print the data.
for ($i=0; $i<800; $i++)
{
$t = $i * .1;
# Cosines
$cosu = cos($u*$t);
$cosv = cos($v*$t);
# Sines
$sinu = sin($u*$t);
$sinv = sin($v*$t);
# Compute X and Y
$xval = $rad*$sinu*$cosv;
$yval = $rad*$sinu*$sinv;
$zval = $rad*$cosu;
$colr=1/(1+$xval*$xval);
$colg=1/sqrt(1+abs($yval));
$colb=1/(1+$zval*$zval*$zval*$zval);
$xval += $j*5; $yval += $k*5;
print POV "sphere { <$xval, $zval, $yval>, $radius\n";
print POV " texture { pigment {color rgb <$colr, $colg, $colb>}}\n";
print POV " finish {caustics 1.0 phong 1 phong_size 300 reflection 0.15}\n";
print POV "}\n\n";
if ($i>0)
{
print POV "cylinder { <$xval, $zval, $yval>, <$xold, $zold, $yold> $radius\n";
print POV " texture { pigment {color rgb <$colr, $colg, $colb>}}\n";
print POV " finish {caustics 1.0 phong 1 phong_size 300 reflection 0.15}\n";
print POV "}\n\n";
}
$xold = $xval;
$yold = $yval;
$zold = $zval;
}
}}
close(POV);
# End of script
Electron Orbitals using POVRay Graphics
This image was created using POVRay and the wave function for electron orbitals. 1s, 2s, 3s on the left, p orbitals on the right, 2p on top and 3p on the bottom.
Subscribe to:
Posts (Atom)