Skip to content

Instantly share code, notes, and snippets.

@hidenba
Created July 10, 2016 15:49
Show Gist options
  • Save hidenba/8eaf4b8be28822914995a6d51726f5d1 to your computer and use it in GitHub Desktop.
Save hidenba/8eaf4b8be28822914995a6d51726f5d1 to your computer and use it in GitHub Desktop.
const int pin_a = 10;
const int pin_b = 12;
const int pin_c = 9;
const int pin_d = 4;
const int pin_e = 5;
const int pin_f = 8;
const int pin_g = 11;
const int pin_dp = 13;
const int dig1 = 2;
const int dig2 = 3;
const int dig3 = 6;
const int dig4 = 7;
const int all_pins[] = {pin_a, pin_b, pin_c, pin_d, pin_e, pin_f, pin_g, pin_dp, dig1, dig2, dig3, dig4};
const int all_pin_count = (sizeof(all_pins)/sizeof(int));
const int led_pins[] = {pin_a, pin_b, pin_c, pin_d, pin_e, pin_f, pin_g, pin_dp};
const int led_pin_count = (sizeof(led_pins)/sizeof(led_pins[0]));
const int slider_pin = 0;
const int ultrasonic_pin = 0;
long val;
int dig4_index;
int dig3_index;
int dig2_index;
int dig1_index;
typedef void (*FUNCPTR)();
FUNCPTR write_ptr[] = {&write_0, &write_1, &write_2, &write_3, &write_4, &write_5,
&write_6, &write_7, &write_8, &write_9, &write_dp};
void setup() {
for(int i = 0; i < all_pin_count; i++){
pinMode(all_pins[i], OUTPUT);
}
dig_off();
}
void loop() {
int bar_val = analogRead(slider_pin);
if(bar_val == 0) {
val = ultrasonic_read();
dig4_index = (val%10); val/=10;
dig3_index = (val%10); val/=10;
dig2_index = (val%10); val/=10;
dig1_index = (val%10); val/=10;
}
use_dig1();
write_ptr[dig1_index]();
use_dig2();
write_ptr[dig2_index]();
use_dig3();
write_ptr[dig3_index]();
use_dig4();
write_ptr[dig4_index]();
}
long ultrasonic_read() {
pinMode(ultrasonic_pin, OUTPUT);
digitalWrite(ultrasonic_pin, LOW);
delayMicroseconds(2);
digitalWrite(ultrasonic_pin, HIGH);
delayMicroseconds(5);
digitalWrite(ultrasonic_pin,LOW);
pinMode(ultrasonic_pin,INPUT);
long duration;
duration = pulseIn(ultrasonic_pin,HIGH);
long RangeInCentimeters;
RangeInCentimeters = duration/29/2;
return RangeInCentimeters;
}
void write_0() {
const int pins[] = {pin_a, pin_b, pin_c, pin_d, pin_e, pin_f};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_1() {
const int pins[] = {pin_b, pin_c};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_2() {
const int pins[] = {pin_a, pin_b, pin_d, pin_e, pin_g};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_3() {
const int pins[] = {pin_a, pin_b, pin_c, pin_d, pin_g};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_4() {
const int pins[] = {pin_b, pin_c, pin_f, pin_g};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_5() {
const int pins[] = {pin_a, pin_c, pin_d, pin_f, pin_g};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_6() {
const int pins[] = {pin_a, pin_c, pin_d, pin_e, pin_f, pin_g};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_7() {
const int pins[] = {pin_a, pin_b, pin_c, pin_f};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_8() {
const int pins[] = {pin_a, pin_b, pin_c, pin_d, pin_e, pin_f, pin_g};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_9() {
const int pins[] = {pin_a, pin_b, pin_c, pin_d, pin_f, pin_g};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void write_dp() {
const int pins[] = {pin_dp};
write_7seg(led_pins, led_pin_count, LOW);
write_7seg(pins, (sizeof(pins)/sizeof(pins[0])), HIGH);
delay(1);
}
void use_dig1() {
dig_off();
digitalWrite(dig1, LOW);
}
void use_dig2() {
dig_off();
digitalWrite(dig2, LOW);
}
void use_dig3() {
dig_off();
digitalWrite(dig3, LOW);
}
void use_dig4() {
dig_off();
digitalWrite(dig4, LOW);
}
void dig_off() {
digitalWrite(dig1, HIGH);
digitalWrite(dig2, HIGH);
digitalWrite(dig3, HIGH);
digitalWrite(dig4, HIGH);
}
void write_7seg(const int pattern[], int index, int value) {
for(int i = 0; i < index; i++) {
digitalWrite(pattern[i], value);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment