Hi
I'm new with arduino.
I try to use few 7 segment led displays.
I have 6 groups of this displays.
First group is with 4 digits, second - 4 digits, 3 - 3 digits, 4 - 2 digits, 5 - 2 digits and 6 - 2 digits.
Now my connection is: all Latch are in pin 3, all clock in pin 2. Data is different for every group.
With this code:
#include <DallasTemperature.h>
#include <OneWire.h>
//temp object - sensors
#define ONE_WIRE_BUS 10 //temperature pin
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int splitTemp1, splitTemp2;
byte firstTempDigit, secondTempDigit,thirdTempDigit;
//pins controlling segments
const int clockPin = 2;
const int latchPin = 3;
const int dataHourPin = 4;
const int dataDatePin = 5;
const int dataTempPin = 6;
const int dataWaterTempPin = 7;
const int dataInTempPin = 8;
const int dataHumPin = 9;
byte IC1[] = {
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11110110
};
void setup() {
Serial.begin(115200);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataHourPin, OUTPUT);
pinMode(dataDatePin, OUTPUT);
pinMode(dataTempPin, OUTPUT);
pinMode(dataWaterTempPin, OUTPUT);
pinMode(dataInTempPin, OUTPUT);
pinMode(dataHumPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataHourPin, clockPin, LSBFIRST, B01111000);
shiftOut(dataHourPin, clockPin, LSBFIRST, B01111000);
shiftOut(dataHourPin, clockPin, LSBFIRST, B01111000);
shiftOut(dataHourPin, clockPin, LSBFIRST, B01111000);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataDatePin, clockPin, LSBFIRST, B01110000);
shiftOut(dataDatePin, clockPin, LSBFIRST, B01110000);
shiftOut(dataDatePin, clockPin, LSBFIRST, B01110000);
shiftOut(dataDatePin, clockPin, LSBFIRST, B01110000);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataTempPin, clockPin, LSBFIRST, B01101000);
shiftOut(dataTempPin, clockPin, LSBFIRST, B01101000);
shiftOut(dataTempPin, clockPin, LSBFIRST, B01101000);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataWaterTempPin, clockPin, LSBFIRST, B01100100);
shiftOut(dataWaterTempPin, clockPin, LSBFIRST, B01100100);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataInTempPin, clockPin, LSBFIRST, B01100010);
shiftOut(dataInTempPin, clockPin, LSBFIRST, B01100010);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataHumPin, clockPin, LSBFIRST, B01100001);
shiftOut(dataHumPin, clockPin, LSBFIRST, B01100001);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
}
everything is fine and light the exact segments that i want.
But when i add temperature in the code :
#include <DallasTemperature.h>
#include <OneWire.h>
//temp object - sensors
#define ONE_WIRE_BUS 10 //temperature pin
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int splitTemp1, splitTemp2;
byte firstTempDigit, secondTempDigit,thirdTempDigit;
//pins controlling segments
const int clockPin = 2;
const int latchPin = 3;
const int dataHourPin = 4;
const int dataDatePin = 5;
const int dataTempPin = 6;
const int dataWaterTempPin = 7;
const int dataInTempPin = 8;
const int dataHumPin = 9;
byte IC1[] = {
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11110110
};
void setup() {
Serial.begin(115200);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataHourPin, OUTPUT);
pinMode(dataDatePin, OUTPUT);
pinMode(dataTempPin, OUTPUT);
pinMode(dataWaterTempPin, OUTPUT);
pinMode(dataInTempPin, OUTPUT);
pinMode(dataHumPin, OUTPUT);
}
void loop() {
sensors.requestTemperatures();
int temp = sensors.getTempCByIndex(0);
if (temp < 0) { // if temperature is negative
temp = abs(temp);
splitTemp1 = temp / 10; //taking first digit of the number
splitTemp2 = temp % 10; //taking second digit of the number
//finding the correct number in IC1 table
firstTempDigit = IC1[splitTemp1];
secondTempDigit = IC1[splitTemp2];
thirdTempDigit = B00000010;
}
else if ( temp == 0) { // if temp is 0
secondTempDigit = B11111100;
firstTempDigit = B00000000;
thirdTempDigit = B00000000;
}
else { // if temp is positive
splitTemp1 = temp / 10;
splitTemp2 = temp % 10;
firstTempDigit = IC1[splitTemp1];
secondTempDigit = IC1[splitTemp2];
thirdTempDigit = B00000000;
}
digitalWrite(latchPin, LOW);
shiftOut(dataHourPin, clockPin, LSBFIRST, B01111000);
shiftOut(dataHourPin, clockPin, LSBFIRST, B01111000);
shiftOut(dataHourPin, clockPin, LSBFIRST, B01111000);
shiftOut(dataHourPin, clockPin, LSBFIRST, B01111000);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataDatePin, clockPin, LSBFIRST, B01110000);
shiftOut(dataDatePin, clockPin, LSBFIRST, B01110000);
shiftOut(dataDatePin, clockPin, LSBFIRST, B01110000);
shiftOut(dataDatePin, clockPin, LSBFIRST, B01110000);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataTempPin, clockPin, LSBFIRST, secondTempDigit);
shiftOut(dataTempPin, clockPin, LSBFIRST, firstTempDigit);
shiftOut(dataTempPin, clockPin, LSBFIRST, thirdTempDigit);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataWaterTempPin, clockPin, LSBFIRST, B01100100);
shiftOut(dataWaterTempPin, clockPin, LSBFIRST, B01100100);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataInTempPin, clockPin, LSBFIRST, B01100010);
shiftOut(dataInTempPin, clockPin, LSBFIRST, B01100010);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataHumPin, clockPin, LSBFIRST, B01100001);
shiftOut(dataHumPin, clockPin, LSBFIRST, B01100001);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
}
the displays group from 1 to 5 are blinking. Only last group is lighting ok.
Can anyone help me when i do wrong.
Thank you in advance.