KL25Z program that calculates the difference in days, hours, minutes, between two dates. Needs a terminal on the PC side to communicate with the program. Terminal must have local echo on. Terminal Data input needs some improvement.

Dependencies:   mbed

Revision:
3:add864dd8eab
Parent:
2:1d24f233ac26
Child:
4:b0884b059d7e
--- a/main.cpp	Wed May 13 14:17:28 2015 +0000
+++ b/main.cpp	Fri May 22 08:58:12 2015 +0000
@@ -3,9 +3,12 @@
  LESEM ENAUTICA 2014 Luis Sousa aluno 11001
  */
 
-#include <stdio.h>
+//#include <stdio.h>
 
+#include "mbed.h"
+Serial pc(USBTX, USBRX);
 
+int readkbd(void);
 int bissexto(int ano);
 int dias_do_mes(int ano,int mes);
 int dias_do_ano(int ano);
@@ -29,6 +32,7 @@
     int continuar=1;
 
     do {
+        printf("\r\n");
         printf("%c[2J",27);  //clrscr();
 
         printf(" ----------------------------------------------------\r\n");
@@ -40,36 +44,40 @@
         printf("\n\nIntroducao da Data 1\r\n");
         do {
             printf("\r\nIntroduza o ano da  Data 1: (%d-%d): ",limite_ano_min,limite_ano_max);
-            scanf("%d",&ano_dt1);
+            //scanf("%d",&ano_dt1);
+            ano_dt1=readkbd();
             if (!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max)))
                 printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max);
         } while(!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max)));
 
         do {
             printf("\r\nIntroduza o mes da Data 1: (%d-%d): ",1,12);
-            scanf("%d",&mes_dt1);
+            //scanf("%d",&mes_dt1);
+            mes_dt1=readkbd();
             if (!((mes_dt1>=1)&&(mes_dt1<=12)))
                 printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12);
-
         } while(!((mes_dt1>=1)&&(mes_dt1<=12)));
 
         do {
             printf("\r\nIntroduza o dia da Data 1: (%d-%d): ",1,dias_do_mes(ano_dt1,mes_dt1));
-            scanf("%d",&dia_dt1);
+            //scanf("%d",&dia_dt1);
+            dia_dt1=readkbd();
             if (!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1))))
                 printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt1,mes_dt1));
         } while(!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1))));
 
         do {
             printf("\r\nIntroduza a hora da Data 1: (%d-%d): ",0,23);
-            scanf("%d",&hora_dt1);
+            //scanf("%d",&hora_dt1);
+            hora_dt1=readkbd();
             if (!((hora_dt1>=0) && (hora_dt1 <= 23)))
                 printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23);
         } while(!((hora_dt1>=0) && (hora_dt1 <= 23)));
 
         do {
             printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59);
-            scanf("%d",&min_dt1);
+            //scanf("%d",&min_dt1);
+            min_dt1=readkbd();
             if (!((min_dt1>=0) && (min_dt1 <= 59)))
                 printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59);
         } while(!((min_dt1>=0) && (min_dt1 <= 59)));
@@ -78,36 +86,40 @@
         printf("\r\n\nIntroducao da Data 2");
         do {
             printf("\r\nIntroduza o ano da Data 2: (%d-%d): ",limite_ano_min,limite_ano_max);
-            scanf("%d",&ano_dt2);
+            //scanf("%d",&ano_dt2);
+            ano_dt2=readkbd();
             if (!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max)))
                 printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max);
-
         } while(!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max)));
 
         do {
             printf("\r\nIntroduza o mes da Data 2: (%d-%d): ",1,12);
-            scanf("%d",&mes_dt2);
+            //scanf("%d",&mes_dt2);
+            mes_dt2=readkbd();
             if (!((mes_dt2>=1)&&(mes_dt2<=12)))
                 printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12);
         } while(!((mes_dt2>=1)&&(mes_dt2<=12)));
 
         do {
             printf("\r\nIntroduza o dia da Data 2: (%d-%d): ",1,dias_do_mes(ano_dt2,mes_dt2));
-            scanf("%d",&dia_dt2);
+            //scanf("%d",&dia_dt2);
+            dia_dt2=readkbd();
             if (!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2))))
                 printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt2,mes_dt2));
         } while(!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2))));
 
         do {
             printf("\r\nIntroduza a hora da Data 2: (%d-%d): ",0,23);
-            scanf("%d",&hora_dt2);
+            //scanf("%d",&hora_dt2);
+            hora_dt2=readkbd();
             if (!((hora_dt2>=0) && (hora_dt2 <= 23)))
                 printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23);
         } while(!((hora_dt2>=0) && (hora_dt2 <= 23)));
 
         do {
             printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59);
-            scanf("%d",&min_dt2);
+            //scanf("%d",&min_dt2);
+            min_dt2=readkbd();
             if (!((min_dt2>=0) && (min_dt2 <= 59)))
                 printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59);
         } while(!((min_dt2>=0) && (min_dt2 <= 59)));
@@ -259,4 +271,23 @@
                + dias_desde_principio_ano(ano2,mes2,dia2);
 }
 
+int readkbd(void)
+{
+    int value=0;
+    int ch=0;
+    int sair=0;
 
+    while (!sair) { //enquanto nao for enter, le
+        char ch = pc.getc();
+        if(ch >= '0' && ch <= '9') { // 0 .. 9?
+            value = (value * 10) + (ch - '0'); // sim, acumula
+            pc.putc(ch);
+        } else {
+            if (ch==13) sair=1;
+            //else if (ch==8) printf("\b");
+            else printf(">C%i<",ch);
+        }
+    }
+    printf("\r\nValor introduzido: %i",value);
+    return value;
+}
\ No newline at end of file