#include <Adafruit_NeoPixel.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 2
const char rows = 4; // set display to four rows
const char cols = 4; // set display to three columns
const char keys[rows][cols] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char rowPins[rows] = {9, 8, 7, 6};
char colPins[cols] = {5, 4, 3,2};
LiquidCrystal_I2C lcd_1(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#define PIN A1
#define NUMPIXELS 1 // number of neopixels in strip
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
byte inches = 0;
const byte Boutonpin = A0;
int cm = 0;
String msg;
char input;
volatile byte state = LOW;
long readUltrasonicDistance(byte triggerPin, byte echoPin)
{
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
return pulseIn(echoPin, HIGH);
}
void setup()
{
pinMode(Boutonpin, INPUT);
pixels.begin();
Serial.begin(9600);
lcd_1.begin(16, 2);
lcd_1.setCursor(0, 0);
lcd_1.print("parametrer radar");
lcd_1.setCursor(0,1);
lcd_1.print("de recul A/B");
pinMode(2, INPUT_PULLUP);
for(char r = 0; r < rows; r++)
{
pinMode(rowPins[r], OUTPUT);
}
for(char c = 0; c < cols; c++)
{
pinMode(colPins[c], INPUT);
digitalWrite(colPins[c], HIGH);
}
}
long getKeypadIntegerMulti()
{
int value = 0;
int keyvalue;
int isnum;
Serial.println("entrer chiffre ");
Serial.print("votre valeur: ");
do
{
keyvalue = getKey();
isnum = (keyvalue >= '0' && keyvalue <= '9');
if (isnum)
{
Serial.print(keyvalue - '0');
value = value * 10 + keyvalue - '0';
}
}
while (isnum || !keyvalue);
Serial.println(" ");
Serial.print("Retourne fonction: ");
Serial.println(value);
return value;
}
long getKeypadIntegerMulti2()
{
int value = 0;
int keyvalue;
int isnum;
Serial.println("entrer chiffre: ");
Serial.print("votre valeur : ");
do
{
keyvalue = getKey();
isnum = (keyvalue >= '0' && keyvalue <= '9');
if (isnum)
{
Serial.print(keyvalue - '0');
value = value * 10 + keyvalue - '0';
}
}
while (isnum || !keyvalue);
Serial.println(" ");
Serial.print("Retourne fonction: ");
Serial.println(value);
return value;
}
void loop()
{
char caractere = Serial.read();
char key = getKey();
if (key =='A')
{
lcd_1.clear();0
lcd_1.print("ok");
attachInterrupt(digitalPinToInterrupt(2),changement,FALLING);
while (caractere = 'S')
{
ReponseNon();
}
}
if (key == 'B')
{
delay(2500);
lcd_1.clear();
lcd_1.print("choisir valeur");
lcd_1.setCursor(0,1);
lcd_1.print("minimale: ");
int val= getKeypadIntegerMulti();
lcd_1.setCursor(11, 1);
lcd_1.print(val);
Serial.println("Valeur est");
delay(2000);
if ((val <30) or (val>60))
{
lcd_1.clear();
lcd_1.print("Valeur interdite");
lcd_1.setCursor(0,1);
lcd_1.print("reesayez");
delay(2000);
lcd_1.clear();
lcd_1.print("Valeur minimum");
lcd_1.setCursor(0,1);
lcd_1.print("requise = 30");
delay(1000);
restart();
}
if ((val>= 30) && (val<60))
{
lcd_1.clear();
lcd_1.print("choisir valeur");
lcd_1.setCursor(0,1);
lcd_1.print("maximale >80:");
delay(2000);
int val2= getKeypadIntegerMulti2();
lcd_1.setCursor(13, 1);
lcd_1.print(val2);
Serial.println("Valeur est");
Serial.println(val2);
if (val2 >80)
{
lcd_1.clear();
lcd_1.print("min: ");
lcd_1.print(val);
lcd_1.print(" max: ");
lcd_1.print(val2);
Serial.println("proccesus en cours ");
Serial.print("valeur minimale choisis : ");
Serial.println(val);
Serial.print("valeur maximale choisis : ");
Serial.println(val2);
delay(5000);
}
else
{
lcd_1.clear();
lcd_1.print("Valeur Interdite");
lcd_1.setCursor(0,1);
lcd_1.print("reessayez");
delay(5000);
restart();
}
while (val2>80)
{
ReponseOui();
if (cm<=val)
{
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
}
if ( (cm>val) && (cm<val2) )
{
pixels.setPixelColor(0, pixels.Color(255, 165, 0));
}
if(cm>=val2)
{
pixels.clear();
}
pixels.show();
} //ferme le while
}
}
}
char getKey()
{
char k = 0;
for(int r = 0; r < rows; r++)
{
digitalWrite(rowPins[r], LOW);
for(char c = 0; c < cols; c++)
{
if(digitalRead(colPins[c]) == LOW)
{
delay(20); //20ms debounce time
while(digitalRead(colPins[c])== LOW);
k = keys[r][c];
}
}
digitalWrite(rowPins[r], HIGH);
}
return k;
}
void ReponseNon()
{
// convert to inches by dividing by 2.54
inches = (cm / 2.54);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.println("cm");
delay(100); // Wait for 100 millisecond(s)
if (cm<=40)
{
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
}
if ( (cm>40) && (cm<100) )
{
pixels.setPixelColor(0, pixels.Color(255, 165, 0));
}
if(cm>100)
{
pixels.clear();
}
pixels.show();
}
void ReponseOui()
{
if (digitalRead(Boutonpin)==1){
cm = 0.01723 * readUltrasonicDistance(13, 12);
}
else{
cm = 0.01723 * readUltrasonicDistance(11, 10);
}
// convert to inches by dividing by 2.54
inches = (cm / 2.54);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.println("cm");
delay(100); // Wait for 100 millisecond(s)
}
void restart()
{
char caractere = Serial.read();
char key = getKey();
lcd_1.clear();
lcd_1.print("parametrer radar");
lcd_1.setCursor(0,1);
lcd_1.print("de recul A/B");
if (key == 'B')
{
delay(2500);
lcd_1.clear();
lcd_1.print("choisir valeur");
lcd_1.setCursor(0,1);
lcd_1.print("minimale: ");
int val= getKeypadIntegerMulti();
lcd_1.setCursor(11, 1);
lcd_1.print(val);
Serial.println("Valeur est");
Serial.println(val);
delay(2000);
if ((val <30) or (val>60))
{
lcd_1.clear();
lcd_1.print("Valeur interdite");
lcd_1.setCursor(0,1);
lcd_1.print("reesayez");
delay(2000);
lcd_1.clear();
lcd_1.print("Valeur minimum");
lcd_1.setCursor(0,1);
lcd_1.print("requise = 30");
delay(1000);
restart();
}
if ((val>= 30) && (val<60))
{
lcd_1.clear();
lcd_1.print("choisir valeur");
lcd_1.setCursor(0,1);
lcd_1.print("maximale >80:");
delay(2000);
int val2= getKeypadIntegerMulti2();
lcd_1.setCursor(13, 1);
lcd_1.print(val2);
Serial.println("Valeur est");
Serial.println(val2);
if (val2 >80)
{
lcd_1.clear();
lcd_1.print("min: ");
lcd_1.print(val);
lcd_1.print(" max: ");
lcd_1.print(val2);
Serial.println("proccesus en cours ");
Serial.print("valeur minimale choisis : ");
Serial.println(val);
Serial.print("valeur maximale choisis : ");
Serial.println(val2);
delay(5000);
}
else
{
lcd_1.clear();
lcd_1.print("Valeur Interdite");
lcd_1.setCursor(0,1);
lcd_1.print("reessayez");
delay(5000);
restart();
}
while (val2>80)
{
ReponseOui();
if (cm<=val)
{
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
}
if ( (cm>val) && (cm<val2) )
{
pixels.setPixelColor(0, pixels.Color(255, 165, 0));
}
if(cm>=val2)
{
pixels.clear();
}
pixels.show();
} //ferme le while
}
}
}
void changement()
{
digitalWrite(7,HIGH);
digitalWrite(6,LOW);
if(digitalRead(2) == 1)
{
cm = 0.01723 * readUltrasonicDistance(13, 12);
}
if (digitalRead(2) == 0)
{
cm = 0.01723 * readUltrasonicDistance(11, 10);
}
digitalWrite(7,LOW);
digitalWrite(6,LOW);
}