DangerShieldFrom SPCoast
// Danger Board v1.0 Demo Script
// By: Zach Hoeken (hoeken@gmail.com)
// As modified by John.Plocher (@gmail)
// More info: make.nycresistor.com/ds-1.0
//our setup stuff
#include "_init.h"
void setup()
{
ds_init();
//light sensor is decent for random stuff.
randomSeed(analogRead(LIGHT_SENSOR_PIN));
}
int slider1_value = 0;
int slider2_value = 0;
int slider3_value = 0;
int old_slider1_value = 0;
int old_slider2_value = 0;
int old_slider3_value = 0;
int slider_map = 0;
byte seg_value = 0;
int light_value = 0;
int knock_value = 0;
int raw_temp = 0;
int celsius = 0;
int fahrenheit = 0;
boolean button1_state = false;
boolean button2_state = false;
boolean button3_state = false;
int wait = 0;
byte char_data[] = {
B00111111, //0
B00000110, //1
B01011011, //2
B01001111, //3
B01100110, //4
B01101101, //5
B01111100, //6
B00000111, //7
B01111111, //8
B01100111, //9
B01110111, //A
B01111100, //b
B01011000, //c
B01011110, //d
B01111001, //E
B01110001, //F
};
// B00000001, // top -
// B00000010, // top right |
// B00000100, // bottom right |
// B00001000, // bottom -
// B00010000, // bottom left |
// B00100000, // top left |
// B01000000, // middle -
// B10000000, // dot
int mapSlider2digit(int value) {
slider_map = map(value, 0, 1023, 0, 15);
slider_map = constrain(slider_map, 0, 15);
slider_map = 15 - slider_map;
}
byte gamma_correct(byte pwm, double gamma)
{
return (byte)(240.0 * pow(pwm/255.0, gamma)) + 15;
}
int doSlider(int sv, int oldsv, int pin) {
if (abs(sv - oldsv) > 10) {
int segment = char_data[mapSlider2digit(sv)];
digitalWrite(pin, 0); delay(10);
analogWrite(pin, gamma_correct(map(sv,0,1023,10,255), 3.0));
return segment;
}
return 0;
}
void loop()
{
//read our digital values
button1_state = digitalRead(BUTTON1_PIN);
button2_state = digitalRead(BUTTON2_PIN);
button3_state = digitalRead(BUTTON3_PIN);
//read all our analog values
slider1_value = analogRead(SLIDER1_PIN);
slider2_value = analogRead(SLIDER2_PIN);
slider3_value = analogRead(SLIDER3_PIN);
light_value = analogRead(LIGHT_SENSOR_PIN);
knock_value = analogRead(KNOCK_SENSOR_PIN);
raw_temp = analogRead(TEMP_SENSOR_PIN);
// randomly set the blue led on with slider2 brightness slider1% of the time
if (random(0, 101) <= map(slider1_value,0,1023,0,100) || button1_state)
analogWrite(LED2_PIN, gamma_correct(map(slider2_value,0,1023,10,255), 3.0));
else digitalWrite(LED2_PIN, 0);
// and the white LED governed by slider3
if (random(0, 101) <= map(slider3_value,0,1023,0,100) || button3_state)
analogWrite(LED1_PIN, gamma_correct(map(slider2_value,0,1023,10,255), 3.0));
else digitalWrite(LED1_PIN, 0);
if (seg_value = doSlider(slider1_value,old_slider1_value, SLIDER1_LED_PIN)) {
old_slider1_value = slider1_value;
wait = -10;
} else if (seg_value = doSlider(slider2_value,old_slider2_value, SLIDER2_LED_PIN)) {
old_slider2_value = slider2_value;
wait = -10;
} else if (seg_value = doSlider(slider3_value,old_slider3_value, SLIDER3_LED_PIN)) {
seg_value = char_data[mapSlider2digit(slider3_value)];
digitalWrite(SLIDER3_LED_PIN, 0); delay(10);
analogWrite(SLIDER3_LED_PIN, gamma_correct(map(slider3_value,0,1023,10,255), 3.0));
old_slider3_value = slider3_value;
wait = -10;
} else if (wait > 30) {
wait = -1;
} else if (wait > 21) {
seg_value = B10000000;
} else if (wait > 11) { //show the temp in F on the 7-segment
seg_value = char_data[fahrenheit % 10];
seg_value |= B10000000;
} else if (wait > 10) {
seg_value = B10000000;
} else if (wait > 0) {
seg_value = char_data[fahrenheit / 10];
seg_value |= B10000000;
} else if (wait == 0) {
//convert temp to real temps
celsius = (5.0 * raw_temp * 100.0) / 1024.0;
fahrenheit = (celsius * 1.8) + 32;
}
if (button2_state) {
digitalWrite(BUZZER_PIN, HIGH);
delayMicroseconds(1915);
digitalWrite(BUZZER_PIN, LOW);
}
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, seg_value);
digitalWrite(LATCH_PIN, HIGH);
delay(75);
wait++;
}
Categories: Arduino | Electronics | Software | Shield |


