Hey
when the 7 seg show number 10 is blinking
someone can help me ?
thanks
here is the code
#define trigPin1 A1
#define echoPin1 A0
#define trigPin2 A2
#define echoPin2 A3
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Keypad.h>
#include "RTClib.h"
#include <SparkFunMLX90614.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
LiquidCrystal_I2C lcd1(0x26, 16, 2);
IRTherm therm; // Create an IRTherm object to interact with throughout
const byte ROWS = 4; // four rows
const byte COLS = 3; // three columns
DateTime now;
RTC_Millis rtc;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {25, 24, 23, 22};
byte colPins[COLS] = {28, 27, 26};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char key;
int val;
int value;
int i = 1;
bool isnum = false;
char week [7] [4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
int pinA = 2;
int pinB = 3;
int pinC = 4;
int pinD = 5;
int pinE = 6;
int pinF = 7;
int pinG = 8;
int DIG1 = 9;
int DIG2 = 10;
int DIG3 = 11;
int DIG4 = 12;
int pinDP = 13;
int state = 0;
int count = 1;
int set_distance = 30;
int ones = 0;
int tens = 0;
int timer = 4;
void readkey () { //הגדרת פוקנציה לכל מקש
i = 16;
key = keypad.getKey();
if (key != NO_KEY && key != '#' && key != '*') {
//תחילת הקשות
lcd.setCursor(i, 3);
lcd.print(key);
val = (key - '0');
//get more strokes until #
do {
key = keypad.getKey();
isnum = (key >= '0' && key <= '9');
if (isnum) {
i++;
lcd.setCursor(i, 3);
lcd.print(key);
val = val * 10;
val += (key - '0');
}
}
while (key != '#');
//End of key stroke sequence
if (val <= 100) { // חישוב ערך
lcd.clear();
lcd.setCursor(5, 2);
lcd.print(" people can");
lcd.setCursor(5, 3);
lcd.print("enter inside");
lcd.setCursor(0, 2);
lcd.print(val / 15);
lcd.setCursor(0, 2);
lcd.noCursor();
delay(3000);
//אפשר לשים פה את הקוד של RTC
}
else if (val > 100) {
lcd.clear();
lcd.setCursor(5, 2);
lcd.print(" people can");
lcd.setCursor(5, 3);
lcd.print(" enter inside");
lcd.setCursor(0, 2);
lcd.print(val / 10);
lcd.setCursor(0, 2);
lcd.noCursor();
delay(2000);
}
}
else
{
//Do Nothing
return;
}
}
void choose_digit(char num) {
switch (num) {
default:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, HIGH);
break;
case 1:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, HIGH);
break;
case 2:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, HIGH);
break;
case 3:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, HIGH);
break;
case 4:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, HIGH);
break;
case 5:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, HIGH);
break;
case 6:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, HIGH);
break;
case 7:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, HIGH);
break;
case 8:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, HIGH);
break;
case 9:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, HIGH);
break;
}
}
void pick_digit(int digit) {
digitalWrite(DIG1, LOW);
digitalWrite(DIG2, LOW);
digitalWrite(DIG3, LOW);
digitalWrite(DIG4, LOW); switch (digit) {
case 1: digitalWrite(DIG1, HIGH); break; case 2: digitalWrite(DIG2, HIGH); break; case 3: digitalWrite(DIG3, HIGH); break; default: digitalWrite(DIG4, HIGH); break;
}
}
void decimal_place() {
digitalWrite(pinDP, LOW);
}
void seven_segment(int number) {
unsigned char thousands = int (number / 1000);
unsigned char hundreds = int ((number / 100) % 10);
unsigned char tens = int ((number / 10) % 10);
unsigned char ones = int (number % 10); //1234
if (thousands > 0) {
choose_digit(thousands);
pick_digit(1);
}
if ((hundreds > 0) | (thousands > 0)) {
delay(timer); choose_digit(hundreds);
pick_digit(2);
}
if ((tens > 0) || (hundreds > 0) | (thousands > 0)) {
//decimal_place();
delay(timer); choose_digit(tens);
pick_digit(3);
}
// add decimal point
delay(timer); choose_digit(ones);
pick_digit(4);
}
void setup() {
lcd.begin();
lcd.setCursor(7, 0);
lcd.print("Hello");
lcd.setCursor(7, 2);
lcd.print("Wait... ");
delay(2000);
lcd.clear();
lcd.setCursor(0, 3);
lcd.print("The store area: ");
// lcd.setCursor(8, 2);
lcd1.begin();
rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
therm.begin(); //חיישן אתחול
therm.setUnit(TEMP_C); // יחידות המידה של החיישן
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
pinMode(pinE, OUTPUT);
pinMode(pinF, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(DIG1, OUTPUT);
pinMode(DIG2, OUTPUT);
pinMode(DIG3, OUTPUT);
pinMode(DIG4, OUTPUT);
}
void loop() {
readkey(); //קריאה לפונקציה
//שעון
now = rtc.now();
lcd.setCursor(0, 0);
lcd.print(week[now.dayOfTheWeek()]);
lcd.print(" ");
lcd.print(now.year(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.day(), DEC);
lcd.setCursor(0, 1);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute() , DEC);
lcd.print(':');
if (now.second()<10){
lcd.print("0");
}
lcd.print(now.second(), DEC);
delay(300);
if (therm.read()) //מקבל 1 אם יש קריאה ו -0 אם אין
{
lcd1.setCursor(0, 3); //מיקום הטקסט
lcd1.print("temp: " + String(therm.object() + 3.5, 2)); // הצגת הערך המדידה
lcd1.print(" ");
lcd1.print("C");
lcd1.setCursor(0, 2);
lcd1.print("Ambient: " + String(therm.ambient(), 2));
lcd1.print(" ");
lcd1.print("C");
}
long duration, distance;
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(100);
digitalWrite(trigPin1, LOW);
duration = pulseIn(echoPin1, HIGH);
distance = (duration /32);
if (state == 0 && (distance < set_distance) )
{
state = 1;
Serial.println(count);
count++;
delay(1000);
}
if (distance > set_distance) {
state = 0;
} /// אם הרכיב מקבל 0 הוא מחכה עד שיתקבל 1
long duration2, distance2;
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(100);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = (duration2 /32);
if (state == 0 && (distance2 < set_distance) )
{
state = 1;
Serial.println(count);
count--;
delay(1000);
}
if (distance2 > set_distance) {
state = 0;
} /// אם הרכיב מקבל 0 הוא מחכה עד שיתקבל 1
seven_segment(count);
}