Browse Source

ajout 2nd fin_de_course, calsol 2020

pierre 5 years ago
parent
commit
ffb7de6c7c
2 changed files with 153 additions and 149 deletions
  1. 0 23
      lib/calsol.h
  2. 153 126
      src/main.cpp

+ 0 - 23
lib/calsol.h

@@ -5,29 +5,6 @@
  * http://ptaff.ca/soleil/?l1pays=France&l1etat=Haute-Vienne&l1ville=Limoges&l2pays=&l2etat=&l1cityname=Limoges%2C+Haute-Vienne%2C+France&l1ltd=45&l1ltm=50&l1lts=07&l1ltx=N&l1lgd=1&l1lgm=15&l1lgs=45&l1lgx=E&l1tz=0.0&l1dst=&l2cityname=&l2ltd=&l2ltm=&l2lts=&l2ltx=N&l2lgd=&l2lgm=&l2lgs=&l2lgx=E&l2tz=0&l2dst=&year=19&month=02&day=15&lang=fr_CA&go=Voir+le+graphe%21
  * */
 const uint8_t DateSol_t[][9] ={
-  {20, 1, 1, 7, 36, 16, 20, 8, 44},
-  {20, 1, 2, 7, 36, 16, 21, 8, 45},
-  {20, 1, 3, 7, 36, 16, 22, 8, 46},
-  {20, 1, 4, 7, 36, 16, 23, 8, 47},
-  {20, 1, 5, 7, 36, 16, 24, 8, 48},
-  {20, 1, 6, 7, 36, 16, 25, 8, 49},
-  {20, 1, 7, 7, 36, 16, 26, 8, 51},
-  {20, 1, 8, 7, 35, 16, 27, 8, 52},
-  {20, 1, 9, 7, 35, 16, 29, 8, 54},
-  {20, 1, 10, 7, 35, 16, 30, 8, 55},
-  {20, 1, 11, 7, 34, 16, 31, 8, 57},
-  {20, 1, 12, 7, 34, 16, 32, 8, 58},
-  {20, 1, 13, 7, 33, 16, 33, 9, 0},
-  {20, 1, 14, 7, 33, 16, 35, 9, 2},
-  {20, 1, 15, 7, 32, 16, 36, 9, 3},
-  {20, 1, 16, 7, 32, 16, 37, 9, 5},
-  {20, 1, 17, 7, 31, 16, 38, 9, 7},
-  {20, 1, 18, 7, 31, 16, 40, 9, 9},
-  {20, 1, 19, 7, 30, 16, 41, 9, 11},
-  {20, 1, 20, 7, 29, 16, 43, 9, 13},
-  {20, 1, 21, 7, 28, 16, 44, 9, 16},
-  {20, 1, 22, 7, 27, 16, 45, 9, 18},
-  {20, 1, 23, 7, 27, 16, 47, 9, 20},
   {20, 1, 24, 7, 26, 16, 48, 9, 22},
   {20, 1, 25, 7, 25, 16, 49, 9, 25},
   {20, 1, 26, 7, 24, 16, 51, 9, 27},

+ 153 - 126
src/main.cpp

@@ -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