Using FRDM Board to output data and a clock for communications example.

Dependencies:   mbed

Revision:
3:027d30718bbc
Parent:
2:11f32d8cfa11
Child:
4:39a777388acd
--- a/main.cpp	Sun Mar 15 03:02:48 2015 +0000
+++ b/main.cpp	Tue Mar 17 03:02:38 2015 +0000
@@ -5,14 +5,16 @@
 #include "stdio.h"
 
 #define MAX 100 //set the size of the character data storage array
+#define PREAMBLE 0x7E //preamble of 01111110
 
 DigitalOut myled(LED1); // red led on board
 DigitalOut clock_pin(D8), serial_out(D7); //send clock pulse and tx
 Timer t; //timer for controlling the clock and data skew
 int msecs, sksecs; //clock time needed for data transfer and skew time
 int skew_flag; //skew flag for while loop
-char data[100] = "Hi!"; //data output
-int i = 0, j = 128; //increment variables
+unsigned char pre = PREAMBLE;
+unsigned char data[100] = "Hi!"; //data output
+int done = 0, i = 0, j = 128; //increment variables
 
 int main() {
     
@@ -27,8 +29,44 @@
     msecs = 2000;
     sksecs = 1800;
     
+    //output preamble
+    while(!done)
+    {
+        //start timer for clock
+        t.start();
+        //wait until the timer has reached the set time.
+        while(t.read_ms() < msecs)
+        {
+            //extract data just before clock goes high
+            if(!clock_pin && skew_flag && t.read_ms() > sksecs)
+            {
+                //extract data bit
+                serial_out = (pre / j) % 2;
+                skew_flag = 0;
+                j /= 2; //decrement j to get to next bit location
+            }
+        }
+        //stop and reset the timer
+        t.stop();
+        t.reset();
+        //switch clock signal
+        clock_pin = !clock_pin;
+        //reset skew flag
+        skew_flag = 1;
+        //last preamble bit sent - reset/increment variables
+        if(j==0)
+        {
+            
+            done = 1;
+            j = 128;   
+        }
+    }    
+    
+    //reset done
+    done = 0;
+
     //output a clock pulse and data.
-    while(i < 3)
+    while(!done)
     {
         //start timer for clock
         t.start();
@@ -57,7 +95,14 @@
             j=128;
             i++;
         }
+        //finished sending data
+        if(i>2)
+        {
+            done = 1;    
+        }
     }
+    //turn off red led to show sending has finished
+    myled = 1;
 }
 
 //crc = x^4+x+1
\ No newline at end of file