172 lines
3.9 KiB
C++
172 lines
3.9 KiB
C++
#define ONES_BIN_DGT_1 2
|
|
#define ONES_BIN_DGT_2 3
|
|
#define ONES_BIN_DGT_3 4
|
|
#define ONES_BIN_DGT_4 5
|
|
|
|
#define TENS_BIN_DGT_1 8
|
|
#define TENS_BIN_DGT_2 9
|
|
#define TENS_BIN_DGT_3 10
|
|
#define TENS_BIN_DGT_4 11
|
|
|
|
#define ANALOG_PIN 0
|
|
//? giving pin numbers a name
|
|
|
|
#define DPY_1 1
|
|
#define DPY_2 2
|
|
#define DPY_3 3
|
|
#define DPY_4 4
|
|
#define DPY_5 5
|
|
#define DPY_6 6
|
|
#define DPY_7 7
|
|
#define DPY_8 8
|
|
#define DPY_9 9
|
|
//? number displayed on lcd
|
|
|
|
#define DPY_SPEED 100
|
|
//? controls how long to wait when loop() finishes
|
|
//? basically display frame rate
|
|
|
|
#define BAUD_RATE 9600
|
|
#define SCALE_FACTOR 10.23
|
|
|
|
double analog_data;
|
|
//? initialization of the analog variable
|
|
//? keeps track of the voltage from the potentiometer
|
|
|
|
void setup();
|
|
void loop();
|
|
void to_display(long number, int pin_1, int pin_2, int pin_3, int pin_4);
|
|
void split_digit(int num, int *tens, int *ones);
|
|
//? function initialization
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(BAUD_RATE);
|
|
|
|
pinMode(ONES_BIN_DGT_1, OUTPUT);
|
|
pinMode(ONES_BIN_DGT_2, OUTPUT);
|
|
pinMode(ONES_BIN_DGT_3, OUTPUT);
|
|
pinMode(ONES_BIN_DGT_4, OUTPUT);
|
|
|
|
pinMode(TENS_BIN_DGT_1, OUTPUT);
|
|
pinMode(TENS_BIN_DGT_2, OUTPUT);
|
|
pinMode(TENS_BIN_DGT_3, OUTPUT);
|
|
pinMode(TENS_BIN_DGT_4, OUTPUT);
|
|
|
|
pinMode(ANALOG_PIN, INPUT);
|
|
};
|
|
//? tells arduino we will be outputing voltage through digital pins 2,3,4,5,8,9,10,11
|
|
//? and receive data from analog pin 0
|
|
|
|
void loop()
|
|
{
|
|
analog_data = analogRead(ANALOG_PIN); //? potentiometer range: [0,1023]
|
|
//? reads analog voltage from potentiometer
|
|
|
|
int scaled_data = (double) analog_data / SCALE_FACTOR;
|
|
//? scales the analog voltage values from [0,1023] to [0,100]
|
|
|
|
if (scaled_data == 100)
|
|
{
|
|
scaled_data = 99;
|
|
}
|
|
//? set max value to be 99
|
|
//? since display can not show integers with more than 2 digits
|
|
|
|
int tens_digit, ones_digit;
|
|
split_digit(scaled_data, &tens_digit, &ones_digit);
|
|
Serial.print(tens_digit);
|
|
Serial.println(ones_digit); //! always an even number ??
|
|
|
|
to_display(ones_digit, ONES_BIN_DGT_1, ONES_BIN_DGT_2, ONES_BIN_DGT_3, ONES_BIN_DGT_4);
|
|
to_display(tens_digit, TENS_BIN_DGT_1, TENS_BIN_DGT_2, TENS_BIN_DGT_3, TENS_BIN_DGT_4);
|
|
//? display the digits in their respective order
|
|
|
|
delay(DPY_SPEED);
|
|
};
|
|
//? main event loop which runs indefinitely
|
|
|
|
void split_digit(int num, int *tens, int *ones)
|
|
{
|
|
*ones = num % 10;
|
|
*tens = (num / 10) % 10;
|
|
};
|
|
//? takes a number and splits its digits into separate variables
|
|
|
|
void to_display(int num, int pin_1, int pin_2, int pin_3, int pin_4)
|
|
{
|
|
switch (num)
|
|
{
|
|
case DPY_1:
|
|
digitalWrite(pin_1, HIGH);
|
|
digitalWrite(pin_2, LOW);
|
|
digitalWrite(pin_3, LOW);
|
|
digitalWrite(pin_4, LOW);
|
|
break;
|
|
|
|
case DPY_2:
|
|
digitalWrite(pin_1, LOW);
|
|
digitalWrite(pin_2, HIGH);
|
|
digitalWrite(pin_3, LOW);
|
|
digitalWrite(pin_4, LOW);
|
|
break;
|
|
|
|
case DPY_3:
|
|
digitalWrite(pin_1, HIGH);
|
|
digitalWrite(pin_2, HIGH);
|
|
digitalWrite(pin_3, LOW);
|
|
digitalWrite(pin_4, LOW);
|
|
break;
|
|
|
|
case DPY_4:
|
|
digitalWrite(pin_1, LOW);
|
|
digitalWrite(pin_2, LOW);
|
|
digitalWrite(pin_3, HIGH);
|
|
digitalWrite(pin_4, LOW);
|
|
break;
|
|
|
|
case DPY_5:
|
|
digitalWrite(pin_1, HIGH);
|
|
digitalWrite(pin_2, LOW);
|
|
digitalWrite(pin_3, HIGH);
|
|
digitalWrite(pin_4, LOW);
|
|
break;
|
|
|
|
case DPY_6:
|
|
digitalWrite(pin_1, LOW);
|
|
digitalWrite(pin_2, HIGH);
|
|
digitalWrite(pin_3, HIGH);
|
|
digitalWrite(pin_4, LOW);
|
|
break;
|
|
|
|
case DPY_7:
|
|
digitalWrite(pin_1, HIGH);
|
|
digitalWrite(pin_2, HIGH);
|
|
digitalWrite(pin_3, HIGH);
|
|
digitalWrite(pin_4, LOW);
|
|
break;
|
|
|
|
case DPY_8:
|
|
digitalWrite(pin_1, LOW);
|
|
digitalWrite(pin_2, LOW);
|
|
digitalWrite(pin_3, LOW);
|
|
digitalWrite(pin_4, HIGH);
|
|
break;
|
|
|
|
case DPY_9:
|
|
digitalWrite(pin_1, HIGH);
|
|
digitalWrite(pin_2, LOW);
|
|
digitalWrite(pin_3, LOW);
|
|
digitalWrite(pin_4, HIGH);
|
|
break;
|
|
|
|
default:
|
|
digitalWrite(pin_1, LOW);
|
|
digitalWrite(pin_2, LOW);
|
|
digitalWrite(pin_3, LOW);
|
|
digitalWrite(pin_4, LOW);
|
|
break;
|
|
}
|
|
};
|
|
//? takes decimal number then `converts it` to a binary value which the display can represent as a decimal value.
|
|
//? i feel like this can be done more elegantly with binary manipulation.
|