generate serial output for trend
[Arduino-Nano-VA-meter] / main.c
diff --git a/main.c b/main.c
index 17a4c16..b79f191 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-#define F_CPU 11059200ul
+#define F_CPU 16000000L
 
 #include <avr/io.h>
 #include <util/delay.h>
 
 #include <avr/io.h>
 #include <util/delay.h>
@@ -6,6 +6,9 @@
 #define USART_BAUDRATE 9600
 #define UBRR_VALUE (((F_CPU/(USART_BAUDRATE*16UL)))-1)
 
 #define USART_BAUDRATE 9600
 #define UBRR_VALUE (((F_CPU/(USART_BAUDRATE*16UL)))-1)
 
+// this will output only changes on serial
+#define SERIAL_CHANGES 0
+
 void serial_init(){
        // initialize USART (must call this before using it)
        UBRR0=UBRR_VALUE; // set baud rate
 void serial_init(){
        // initialize USART (must call this before using it)
        UBRR0=UBRR_VALUE; // set baud rate
@@ -27,7 +30,7 @@ void serial_string(const char* s){
 
 void serial_break(){
        serial_send(10); // new line 
 
 void serial_break(){
        serial_send(10); // new line 
-       serial_send(13); // carriage return
+//     serial_send(13); // carriage return
 }
 void serial_comma(){
        serial_send(','); // comma
 }
 void serial_comma(){
        serial_send(','); // comma
@@ -83,8 +86,11 @@ volatile uint8_t regC;
 volatile uint8_t regD;
 
 // these values will hold the current/voltage value
 volatile uint8_t regD;
 
 // these values will hold the current/voltage value
-volatile char current[4];
-volatile char voltage[4];
+volatile char current[4] = "XXXX";
+volatile char voltage[4] = "XXXX";
+
+volatile int display_sum = 0;
+volatile int last_display_sum = 0;
 
 
 void read_capture(){
 
 
 void read_capture(){
@@ -101,14 +107,14 @@ char saved_letter(){
     
     // start by creating a "letter" variable which defines pin states
     uint8_t letter=0;    
     
     // start by creating a "letter" variable which defines pin states
     uint8_t letter=0;    
-    if(regD&(1<<PD0)){letter|=(1<<7);} // letter 1 (voltage MSB)
-    if(regD&(1<<PD2)){letter|=(1<<6);} // letter 2
-    if(regD&(1<<PD3)){letter|=(1<<5);} // letter 3
-    if(regD&(1<<PD4)){letter|=(1<<4);} // letter 4
-    if(regD&(1<<PD5)){letter|=(1<<3);} // letter 5 (current MSB)
-    if(regD&(1<<PD6)){letter|=(1<<2);} // letter 6
-    if(regD&(1<<PD7)){letter|=(1<<1);} // letter 7
-    if(regB&(1<<PB0)){letter|=(1<<0);} // letter 8
+    if(regC&(1<<PC0)){letter|=(1<<7);} // letter 1 (voltage MSB)
+    if(regC&(1<<PC3)){letter|=(1<<6);} // letter 2
+    if(regC&(1<<PC4)){letter|=(1<<5);} // letter 3
+    if(regD&(1<<PD2)){letter|=(1<<4);} // letter 4
+    if(regB&(1<<PB3)){letter|=(1<<3);} // letter 5 (current MSB)
+    if(regD&(1<<PD4)){letter|=(1<<2);} // letter 6
+    if(regD&(1<<PD3)){letter|=(1<<1);} // letter 7
+    if(regD&(1<<PD5)){letter|=(1<<0);} // letter 8
 
     // try to match expected pin states
     if (letter==0b10000000) {return '1';}
 
     // try to match expected pin states
     if (letter==0b10000000) {return '1';}
@@ -128,14 +134,14 @@ char saved_number(){
     // returned value will be in ASCII
     // returns 0 if no letter is selected, or if it's confusing
     int segments=0;
     // returned value will be in ASCII
     // returns 0 if no letter is selected, or if it's confusing
     int segments=0;
-    if(regC&(1<<PC5)){segments|=(1<<7);} // A (MSB)
-    if(regC&(1<<PC4)){segments|=(1<<6);} // B
-    if(regC&(1<<PC3)){segments|=(1<<5);} // C
-    if(regC&(1<<PC2)){segments|=(1<<4);} // D
-    if(regC&(1<<PC1)){segments|=(1<<3);} // E
-    if(regC&(1<<PC0)){segments|=(1<<2);} // F
-    if(regB&(1<<PB2)){segments|=(1<<1);} // G (LSB)
-    //if(regB&(1<<PB1)){}//H
+    if(regC&(1<<PC1)){segments|=(1<<7);} // A (MSB)
+    if(regC&(1<<PC5)){segments|=(1<<6);} // B
+    if(regD&(1<<PD7)){segments|=(1<<5);} // C
+    if(regB&(1<<PB1)){segments|=(1<<4);} // D
+    if(regB&(1<<PB2)){segments|=(1<<3);} // E
+    if(regC&(1<<PC2)){segments|=(1<<2);} // F
+    if(regD&(1<<PD6)){segments|=(1<<1);} // G (LSB)
+    //if(regB&(1<<PB0)){}//H
     
     if(segments==0b00001000) {return '9';}
     if(segments==0b00000000) {return '8';}
     
     if(segments==0b00001000) {return '9';}
     if(segments==0b00000000) {return '8';}
@@ -185,12 +191,24 @@ void capture_full(){
             if (capture_letter('1'+i)) {break;}
         }
     }
             if (capture_letter('1'+i)) {break;}
         }
     }
-    
+
+#if SERIAL_CHANGES
+    // don't send same values over serial
+    for(i=0;i<4;i++) {
+           display_sum = voltage[i] + current[i];
+    }
+    if ( display_sum == last_display_sum ) {
+           return;
+    } else {
+           last_display_sum = display_sum;
+    }
+#endif
+
     for(i=0;i<4;i++) {
         serial_send(voltage[i]);
         if (i==1){serial_send('.');}
     }
     for(i=0;i<4;i++) {
         serial_send(voltage[i]);
         if (i==1){serial_send('.');}
     }
-    serial_send(',');
+    serial_send(' ');
     for(i=0;i<4;i++) {
         serial_send(current[i]);
         if (i==2){serial_send('.');}
     for(i=0;i<4;i++) {
         serial_send(current[i]);
         if (i==2){serial_send('.');}