|
@@ -23,7 +23,7 @@ int pont_h_1 = 29;
|
|
|
int pont_h_2 = 27;
|
|
|
|
|
|
int fin_course_ouverture = 25;
|
|
|
-
|
|
|
+int fin_course_fermeture = 49;
|
|
|
|
|
|
|
|
|
int sens_ouverture = 2; //etat indeterminé
|
|
@@ -35,7 +35,6 @@ struct Date_t {
|
|
|
};
|
|
|
|
|
|
|
|
|
-
|
|
|
void setdate() {
|
|
|
Serial.println("Set Date format : 05/06/19 for example");
|
|
|
char buffer[] = {' ',' ',' ',' ',' ',' ',' ', ' '};
|
|
@@ -65,14 +64,10 @@ void read_time() {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
/*
|
|
|
* Variable globales pour interruptions
|
|
|
*/
|
|
|
-void ouvrir()
|
|
|
-{
|
|
|
+void ouvrir() {
|
|
|
sens_ouverture = 1;
|
|
|
}
|
|
|
|
|
@@ -86,29 +81,31 @@ void fermer() {
|
|
|
* val = 1, ouvrir la porte
|
|
|
*/
|
|
|
void ouvrirPorte(bool val) {
|
|
|
- //on ferme
|
|
|
- if (val == false) {
|
|
|
+ //on ouvre
|
|
|
+ if (val == true) {
|
|
|
// On set le pont en H +12V 0V
|
|
|
- digitalWrite(pont_h_1, LOW);
|
|
|
- digitalWrite(pont_h_2, HIGH);
|
|
|
+ digitalWrite(pont_h_1, HIGH);
|
|
|
+ digitalWrite(pont_h_2, LOW);
|
|
|
delay(100);
|
|
|
// On envoi la purée
|
|
|
digitalWrite(motor_power, LOW);
|
|
|
|
|
|
- // delai?
|
|
|
- delay(2050);
|
|
|
+ // On attend le pin qui va bien
|
|
|
+ while (digitalRead(fin_course_ouverture) != HIGH) {
|
|
|
+ delayMicroseconds(10);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- //on ouvre
|
|
|
- if (val == true) {
|
|
|
+ //on ferme
|
|
|
+ if (val == false) {
|
|
|
// On set le pont en H pour 0V -12V
|
|
|
- digitalWrite(pont_h_1, HIGH);
|
|
|
- digitalWrite(pont_h_2, LOW);
|
|
|
+ digitalWrite(pont_h_1, LOW);
|
|
|
+ digitalWrite(pont_h_2, HIGH);
|
|
|
delay(100);
|
|
|
// On envoi la purée
|
|
|
digitalWrite(motor_power, LOW);
|
|
|
// On attend le pin qui va bien
|
|
|
- while (digitalRead(fin_course_ouverture) != HIGH) {
|
|
|
+ while (digitalRead(fin_course_fermeture) != LOW) {
|
|
|
delayMicroseconds(10);
|
|
|
}
|
|
|
}
|
|
@@ -130,22 +127,20 @@ void clearSerial() {
|
|
|
}
|
|
|
|
|
|
void setRTC() {
|
|
|
- rtc.setDOW(TUESDAY); // Set Day-of-Week to SUNDAY
|
|
|
- rtc.setTime(0, 4, 45); // Set the time to 12:00:00 (24hr format)
|
|
|
- rtc.setDate(2, 7, 2019); // Set the date to January 1st, 2014
|
|
|
+ rtc.setDOW(MONDAY); // Set Day-of-Week to SUNDAY
|
|
|
+ rtc.setTime(20, 43, 0); // Set the time to 12:00:00 (24hr format)
|
|
|
+ rtc.setDate(13, 1, 2020); // Set the date to January 1st, 2014
|
|
|
}
|
|
|
|
|
|
|
|
|
void selftest_func(void) {
|
|
|
|
|
|
bool read;
|
|
|
-
|
|
|
-
|
|
|
Serial.println("Self-Test Menu");
|
|
|
Serial.println("--------------------");
|
|
|
Serial.println("1. Read Time");
|
|
|
- Serial.println("2. Switch all relays 2 times");
|
|
|
- Serial.println("3. Read fin_course_ouverture");
|
|
|
+ Serial.println("2. Switch all relays 2 times each");
|
|
|
+ Serial.println("3. Read fin_course_*");
|
|
|
Serial.println("4. Detect position and switch position");
|
|
|
Serial.println("5. Reset Arduino");
|
|
|
Serial.println("6. setRTC()");
|
|
@@ -156,113 +151,142 @@ void selftest_func(void) {
|
|
|
Serial.println("a. open/close forever");
|
|
|
Serial.println("--------------------");
|
|
|
Serial.println("Type the number and press enter");
|
|
|
-
|
|
|
+ delay(500);
|
|
|
Serial.flush(); //flush all previous received and transmitted data
|
|
|
while(!Serial.available()) ;
|
|
|
char ch;
|
|
|
ch = Serial.read();
|
|
|
- switch(ch)
|
|
|
- {
|
|
|
- case '1':
|
|
|
- Serial.println("Read Time");
|
|
|
- read_time();
|
|
|
- selftest_func();
|
|
|
-
|
|
|
- case '2':
|
|
|
- Serial.println("Switch pont_h_1...");
|
|
|
- digitalWrite(pont_h_1, LOW);
|
|
|
- delay(500);
|
|
|
- digitalWrite(pont_h_2, HIGH);
|
|
|
- delay(500);
|
|
|
+ switch(ch) {
|
|
|
+ case '1':
|
|
|
+ Serial.println("Read Time");
|
|
|
+ read_time();
|
|
|
+ selftest_func();
|
|
|
+ break;
|
|
|
+
|
|
|
+ case '2':
|
|
|
+ Serial.println("Switch pont_h_1...");
|
|
|
+ digitalWrite(pont_h_1, LOW);
|
|
|
+ delay(500);
|
|
|
+ digitalWrite(pont_h_2, HIGH);
|
|
|
+ delay(500);
|
|
|
+
|
|
|
+ Serial.println("Switch pont_h_2...");
|
|
|
+ digitalWrite(pont_h_1, LOW);
|
|
|
+ delay(500);
|
|
|
+ digitalWrite(pont_h_2, HIGH);
|
|
|
+ delay(500);
|
|
|
+
|
|
|
+ Serial.println("Switch motor_power...");
|
|
|
+ digitalWrite(motor_power, LOW);
|
|
|
+ delay(500);
|
|
|
+ digitalWrite(motor_power, HIGH);
|
|
|
+ delay(500);
|
|
|
|
|
|
- Serial.println("Switch pont_h_2...");
|
|
|
- digitalWrite(pont_h_1, LOW);
|
|
|
- delay(500);
|
|
|
- digitalWrite(pont_h_2, HIGH);
|
|
|
- delay(500);
|
|
|
+ selftest_func();
|
|
|
+ break;
|
|
|
+
|
|
|
+ case '3':
|
|
|
+ /*
|
|
|
+ * On lit les interrupteurs de fin de course
|
|
|
+ * enclenché = 1
|
|
|
+ * non enclenché = 0
|
|
|
+ */
|
|
|
+ read = digitalRead(fin_course_ouverture);
|
|
|
+ if (read == 1) {
|
|
|
+ Serial.println("=> fin_course_ouverture enclenché !\n");
|
|
|
+ Serial.println(read);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ Serial.println("=> fin_course_ouverture non enclenché.\n");
|
|
|
+ Serial.println(read);
|
|
|
+ }
|
|
|
+ delay(50);
|
|
|
+ read = digitalRead(fin_course_fermeture);
|
|
|
+ if (read == 0) {
|
|
|
+ Serial.println("=> fin_course_fermeture enclenché !\n");
|
|
|
+ Serial.println(read);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ Serial.println("=> fin_course_fermeture non enclenché.\n");
|
|
|
+ Serial.println(read);
|
|
|
+ }
|
|
|
+ selftest_func();
|
|
|
+ break;
|
|
|
|
|
|
- Serial.println("Switch motor_power...");
|
|
|
- digitalWrite(motor_power, LOW);
|
|
|
- delay(500);
|
|
|
- digitalWrite(motor_power, HIGH);
|
|
|
- delay(500);
|
|
|
+ case '4':
|
|
|
+ read = digitalRead(fin_course_ouverture);
|
|
|
+ if (read == HIGH) {
|
|
|
+ Serial.println("=> Porte ouverte, on ferme");
|
|
|
+ ouvrirPorte(0);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ Serial.println("=> Porte fermée, on ouvre");
|
|
|
+ ouvrirPorte(1);
|
|
|
+ }
|
|
|
+ selftest_func();
|
|
|
+ break;
|
|
|
|
|
|
- selftest_func();
|
|
|
+ case '5':
|
|
|
+ asm volatile (" jmp 0");
|
|
|
|
|
|
- case '3':
|
|
|
- read = digitalRead(fin_course_ouverture);
|
|
|
- if (read == 1) {
|
|
|
- Serial.println("=> fin_course_ouverture enclenché !\n");
|
|
|
- }
|
|
|
- else {
|
|
|
- Serial.println("=> fin_course_ouverture non enclenché.\n");
|
|
|
+ case '6':
|
|
|
+ setRTC();
|
|
|
+ //selftest_func();
|
|
|
+ break;
|
|
|
|
|
|
- }
|
|
|
- selftest_func();
|
|
|
-
|
|
|
- case '4':
|
|
|
- read = digitalRead(fin_course_ouverture);
|
|
|
- if (read == HIGH) {
|
|
|
- Serial.println("=> Porte ouverte, on ferme");
|
|
|
- ouvrirPorte(0);
|
|
|
- }
|
|
|
- else {
|
|
|
- Serial.println("=> Porte fermée, on ouvre");
|
|
|
+ case 'o':
|
|
|
+ Serial.println("=> On ouvre !");
|
|
|
ouvrirPorte(1);
|
|
|
- }
|
|
|
- selftest_func();
|
|
|
-
|
|
|
-
|
|
|
- case '5':
|
|
|
- asm volatile (" jmp 0");
|
|
|
-
|
|
|
- case '6':
|
|
|
- setRTC();
|
|
|
selftest_func();
|
|
|
+ break;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- case 'o':
|
|
|
- Serial.println("=> On ferme !");
|
|
|
- ouvrirPorte(1);
|
|
|
- selftest_func();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case 'c':
|
|
|
- Serial.println("=> On ferme !");
|
|
|
- ouvrirPorte(0);
|
|
|
- selftest_func();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case '+':
|
|
|
- // On set le pont en H pour 0V -12V
|
|
|
- digitalWrite(pont_h_1, HIGH);
|
|
|
- digitalWrite(pont_h_2, LOW);
|
|
|
- delay(100);
|
|
|
- // On envoi la purée
|
|
|
- digitalWrite(motor_power, LOW);
|
|
|
- delay(200);
|
|
|
- digitalWrite(motor_power, HIGH);
|
|
|
- digitalWrite(pont_h_1, HIGH);
|
|
|
- digitalWrite(pont_h_2, HIGH);
|
|
|
- selftest_func();
|
|
|
-
|
|
|
-
|
|
|
- case '-':
|
|
|
- // On set le pont en H +12V 0V
|
|
|
- digitalWrite(pont_h_1, LOW);
|
|
|
- digitalWrite(pont_h_2, HIGH);
|
|
|
- delay(100);
|
|
|
- // On envoi la purée
|
|
|
- digitalWrite(motor_power, LOW);
|
|
|
- delay(250);
|
|
|
- digitalWrite(motor_power, HIGH);
|
|
|
- digitalWrite(pont_h_1, HIGH);
|
|
|
- digitalWrite(pont_h_2, HIGH);
|
|
|
+ case 'c':
|
|
|
+ Serial.println("=> On ferme !");
|
|
|
+ ouvrirPorte(0);
|
|
|
+ selftest_func(); Serial.println("TROP HAUT !");
|
|
|
+ break;
|
|
|
+
|
|
|
+ case '+':
|
|
|
+ if (digitalRead(fin_course_ouverture) == LOW ) {
|
|
|
+ // On set le pont en H pour 0V -12V
|
|
|
+ digitalWrite(pont_h_1, HIGH);
|
|
|
+ digitalWrite(pont_h_2, LOW);
|
|
|
+ delay(100);
|
|
|
+ // On envoi la purée
|
|
|
+ digitalWrite(motor_power, LOW);
|
|
|
+ delay(100);
|
|
|
+ digitalWrite(motor_power, HIGH);
|
|
|
+ digitalWrite(pont_h_1, HIGH);
|
|
|
+ digitalWrite(pont_h_2, HIGH);
|
|
|
+
|
|
|
+ Serial.println("On monte !");
|
|
|
+ selftest_func();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ Serial.println("TROP HAUT !");
|
|
|
+ selftest_func();
|
|
|
+ break;
|
|
|
+
|
|
|
+ case '-':
|
|
|
+ // On check l'état des relais
|
|
|
+ if (digitalRead(fin_course_fermeture) == HIGH ) {
|
|
|
+ // On set le pont en H +12V 0V
|
|
|
+ digitalWrite(pont_h_1, LOW);
|
|
|
+ digitalWrite(pont_h_2, HIGH);
|
|
|
+ delay(100);
|
|
|
+ // On envoi la purée
|
|
|
+ digitalWrite(motor_power, LOW);
|
|
|
+ delay(100);
|
|
|
+ digitalWrite(motor_power, HIGH);
|
|
|
+ digitalWrite(pont_h_1, HIGH);
|
|
|
+ digitalWrite(pont_h_2, HIGH);
|
|
|
+ Serial.println("On baisse !");
|
|
|
+ selftest_func();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ Serial.println("TROP BAS !");
|
|
|
selftest_func();
|
|
|
+ break;
|
|
|
|
|
|
case 'a':
|
|
|
uint16_t i = 0;
|
|
@@ -274,6 +298,8 @@ void selftest_func(void) {
|
|
|
}
|
|
|
selftest_func();
|
|
|
|
|
|
+ default:
|
|
|
+ selftest_func();
|
|
|
|
|
|
}
|
|
|
}
|
|
@@ -301,10 +327,10 @@ void setup() {
|
|
|
for(int i=0; i<2; i++) {
|
|
|
digitalWrite(pont_h_1, LOW);
|
|
|
digitalWrite(pont_h_2, HIGH);
|
|
|
- delay(200);
|
|
|
+ delay(100);
|
|
|
digitalWrite(pont_h_1, HIGH);
|
|
|
digitalWrite(pont_h_2, LOW);
|
|
|
- delay(200);
|
|
|
+ delay(100);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -324,8 +350,9 @@ void setup() {
|
|
|
|
|
|
void loop() {
|
|
|
|
|
|
- bool read;
|
|
|
+ bool read, read2;
|
|
|
read = digitalRead(fin_course_ouverture);
|
|
|
+ read2 = digitalRead(fin_course_fermeture);
|
|
|
clearSerial();
|
|
|
Serial.println("-=-=-=-=-=-=- INITIALIZATION -=-=-=-=-=-=-=-");
|
|
|
Serial.println("Press 's' to enter self-test mode in 5 senconds");
|
|
@@ -433,7 +460,7 @@ void loop() {
|
|
|
rtc.setControl();
|
|
|
rtc.resetAlarm();
|
|
|
|
|
|
- if(read == HIGH) {
|
|
|
+ if((read == LOW && read2 == LOW) || (read == LOW && read2 == HIGH)) {
|
|
|
ouvrirPorte(0);
|
|
|
}
|
|
|
|
|
@@ -469,7 +496,8 @@ void loop() {
|
|
|
rtc.setControl();
|
|
|
rtc.resetAlarm();
|
|
|
|
|
|
- if(read == LOW) {
|
|
|
+ //Si porte ouverte ou indeterminée
|
|
|
+ if ((read == HIGH && read2 == HIGH) || (read == LOW && read2 == HIGH)) {
|
|
|
ouvrirPorte(1);
|
|
|
}
|
|
|
|
|
@@ -518,9 +546,8 @@ void loop() {
|
|
|
rtc.setControl();
|
|
|
rtc.resetAlarm();
|
|
|
|
|
|
- if(read == HIGH) {
|
|
|
+ if((read == HIGH && read2 == HIGH) || (read == LOW && read2 == HIGH)) {
|
|
|
ouvrirPorte(0);
|
|
|
- delay(100);
|
|
|
}
|
|
|
|
|
|
// Attachement d'une interruption sur front descendant de INT0
|