When I power on the seven segment, all the Leds should be ON for 2 seconds. Then my ordinary process should start. How can I make like that?
In the setup()
Load the display with ALL digit 8's.
Wait 2 seconds then load them with your live data.
Simple..
Tom.;
int DS_pin = 7; // Data pin of 74hc595 connected to the 11th pin of Arduino Uno(10 for TPIC6C596)
int STCP_pin = 6; // Latch pin of 74hc595 connected to the 12th pin of Arduino Uno(9 for TPIC6C596)
int SHCP_pin = 5 ; // Clock pin of 74hc595 connected to the 8th pin of Arduino Uno(8 for TPIC6C596)
int gpin = 4;
int samplse = 0; // the first sensor value
int samplse1 = 0; // the second sensor value
float sensorvalue4;// Variable to store the final values in 7 segment display
/* 7 segment common anode values ranging from 0 to 9 */
int dec_digits [11] = {
B00111111, //0
B00000110, //1
B01011011, //2
B01001111, //3
B01100110, //4
B01101101, //5
B01111101, //6
B00000111, //7
B01111111, //8
B01101111, //9
};
/* setup initializes serial and the pin settings */
void setup()
{
Serial.begin(9600); // 9600 Baud Rate
Serial.println(" Metal Width Detector\n ");
//set pins to output
pinMode(DS_pin, OUTPUT); // Setting Data Pin as an OUTPUT
pinMode(STCP_pin, OUTPUT); // Setting Latch Pin as an OUTPUT
pinMode(SHCP_pin, OUTPUT); // Setting Clock Pin as an OUTPUT
pinMode(gpin, OUTPUT); // Setting gPin as an OUTPUT
digitalWrite(SHCP_pin, LOW); // Write Pin as LOW
digitalWrite(DS_pin, LOW); // Write Pin as LOW
digitalWrite(STCP_pin, LOW); // Write Pin as LOW
digitalWrite(gpin, LOW); // Write Pin as LOW
}
/* loop checks the sensor state and will send serial after calibration */
void loop()
{
// read the first sensor
int samplse = analogRead(6);
// read the second sensor
int samplse1 = analogRead(7);
/* map(value, fromLow, fromHigh, toLow, toHigh)
map - maps a number from one range to another.
value - the number to map.
fromLow - the lower bound of the value’s current range.
fromHigh - the upper bound of the value’s current range.
toLow - the lower bound of the value’s target range.
toHigh - the upper bound of the value’s target range.
*/
float sensorvalue = (map(samplse, 0, 1023, -3500, 3500) / 100.0); // Map an analog value to 10 bits(0 to 1023) and the target range
float sensorvalue1 = (map(samplse1, 1023, 0, -3500, 3500) / 100.0); // Map an analog value to 10 bits(0 to 1023) and the target range
// apply the calibration to both the sensor reading
//float sensorvalue = (x1 - pow(val, x2)); // Calibration value of first sensor
//float sensorvalue1 = (x1 + pow(val1, x2));// Calibration value of second sensor
/* print the sensor values in the serial monitor, if necessary */
// float sensorvalue=sensorvalue01;
// float sensorvalue1=sensorvalue02;
Serial.print("sensorvalue:");
Serial.println(sensorvalue, 3);
Serial.print("sensorvalue1:");
Serial.println(sensorvalue1, 3);
/* Subtracting both the sensor values and display in the 7 segment using shift register */
sensorvalue4 = (sensorvalue - (sensorvalue1)) - 0.77;
if (sensorvalue4 < 0)
{
sensorvalue4 = sensorvalue4 * (-1);
Serial.println(sensorvalue4, 4);
}
else
{
sensorvalue4 = sensorvalue4 * (1);
Serial.println(sensorvalue4, 4);
}
// calling function
updateDisplay();
}
void updateDisplay()
{
/* To print the values in the serial monitor, if necessary */
Serial.print("sensorvalue4:");
Serial.println(sensorvalue4, 4);
char buf[10]; // A variable that contains char values
/*
dtostrf - This function converts the float values to the char.
dtostrf(floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
floatvar - float variable
StringLengthIncDecimalPoint - This is the length of the string that will be created
numVarsAfterDecimal - The number of digits after the decimal point to print
charbuf - the array to store the results
*/
dtostrf(sensorvalue4, 5, 3, buf);
// digitalWrite(STCP_pin, LOW);
// shiftOut(DS_pin, SHCP_pin, MSBFIRST, dec_digits[(buf[8] - 0x30)] + 0x80);
// digitalWrite(STCP_pin, HIGH);
delay(3000);
// Writing LOW on the STCP pin allows us to send data to the IC
digitalWrite(STCP_pin, LOW);
/* for loop execution */
for (int i = 0; i <= 4; i++)
{
if (buf[i] != '.')
{
if (buf[i + 1] == '.')
{
/* shiftOut(dataPin, clockPin, bitOrder, value)
shiftOut - Shifts out a byte of data one bit at a time.
dataPin - the pin on which to output each bit. Allowed data types: int.
clockPin - the pin to toggle once the dataPin has been set to the correct value. Allowed data types: int.
bitOrder - which order to shift out the bits; either MSBFIRST or LSBFIRST.
value - the data to shift out. Allowed data types: byte.
converting the resultant char value to a decimal value.
adding the decimal point wherever we want in the seven segment display
*/
shiftOut(DS_pin, SHCP_pin, MSBFIRST, dec_digits[(buf[i] - 0x30)] + 0x80);
}
else
{
shiftOut(DS_pin, SHCP_pin, MSBFIRST, dec_digits[(buf[i] - 0x30)]);
}
}
}
// Writing HIGH on the STCP pin, no longer needs to listen for information
digitalWrite(STCP_pin, HIGH);
// waits for a second
delay(500);
}
This my code, how will I do that?
ok.
Hi,
About what, you should be able to add code to display digit 8 across your display.
Tom...
Thanks for your help. You are rocking!!!
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.