Provides class structure for simple control of Nixie Tubes using custom PCB

Revision:
1:0470cc006ce7
Parent:
0:34f3e0f37c55
Child:
2:bb85bae1c1de
--- a/NixieTube.cpp	Mon Dec 05 21:35:57 2016 +0000
+++ b/NixieTube.cpp	Wed Dec 14 05:27:15 2016 +0000
@@ -13,10 +13,8 @@
 #define TUBE_4_CATH 0x100000
 #define TUBE_5_CATH 0x200000
 #define TUBE_6_CATH 0x400000
-#define START_THREAD 1
-Mutex nixie_mutex;
 
-NixieTube::NixieTube(PinName sdi, PinName scl, PinName rcl, PinName cen): _thread(&NixieTube::threadStarter, this, osPriorityNormal,1024),_sdi(sdi), _scl(scl), _rcl(rcl), _cen(cen){
+NixieTube::NixieTube(PinName sdi, PinName scl, PinName rcl, PinName cen): _sdi(sdi), _scl(scl), _rcl(rcl), _cen(cen){
         digit1 = 1;
         digit2 = 2;
         digit3 = 3;
@@ -24,27 +22,43 @@
         delay1 = 0.0005;
         delay2 = 0.0045;
         brightness = 0;
+        curr_tube = 1;
         _cen.write(1.0);
         _cen.period_us(10000);
-        _thread.signal_set(START_THREAD);  
-}
-
-void NixieTube::threadStarter(void const *p) {
-  NixieTube *instance = (NixieTube*)p;
-  instance->threadWorker();
+        std::printf("Starting Object\r\n");
+        tickSeq.attach(this, &NixieTube::nixie_shiftout, 0.001 );
+        std::printf("Sucess Ticker Started\r\n");
 }
 
-void NixieTube::threadWorker() {
-  _thread.signal_wait(START_THREAD);
-  while(1) {
-    nixie_thread(); 
-   }
-}        
-
 NixieTube::~NixieTube()
 {
 }
-
+ 
+void NixieTube::nixie_shiftout() {
+       
+       
+        switch (curr_tube) {
+            case 1:
+                send_nixie_shiftreg(nixie_id_convert(digit1), 0, TUBE_1_CATH);
+                break;
+            case 2:
+                send_nixie_shiftreg(nixie_id_convert(digit2), 0, TUBE_2_CATH);
+                break;
+            case 3:
+                send_nixie_shiftreg(nixie_id_convert(digit3), 0, TUBE_3_CATH);
+                break;
+            case 4:
+                send_nixie_shiftreg(nixie_id_convert(digit4), 0, TUBE_4_CATH);
+                break;
+            default:
+                curr_tube = 1;
+        }
+        curr_tube++;
+        if (curr_tube == 5) {
+            curr_tube = 1;
+        }
+}
+ 
 int NixieTube::nixie_id_convert(int digit) {
     if (digit == 0 || digit == -1) {
         return digit + 1;  
@@ -66,39 +80,13 @@
     for (int i=23; i >= 0; i--) {
         _sdi = buffer & (1 << i);
         _scl = 1;
-        _scl = 0; // Whats going on here?
+        _scl = 0;
     }
     _rcl = 1;
-    _rcl = 0; // Whats going on here?
+    _rcl = 0;
  
 }
-
-void NixieTube::nixie_thread() {
-    while (1) {
-        nixie_mutex.lock();
-        send_nixie_shiftreg(nixie_id_convert(digit1), 0, TUBE_1_CATH);
-        Thread::wait(1);
-        send_nixie_shiftreg(0, 0, 0);
-        Thread::wait(1);
-        send_nixie_shiftreg(nixie_id_convert(digit2), 0, TUBE_2_CATH);
-        Thread::wait(1);
-        send_nixie_shiftreg(0, 0, 0);
-        Thread::wait(1);
-        send_nixie_shiftreg(nixie_id_convert(digit3), 0, TUBE_3_CATH);
-        Thread::wait(1);
-        send_nixie_shiftreg(0, 0, 0);
-        Thread::wait(1);
-        send_nixie_shiftreg(nixie_id_convert(digit4), 0, TUBE_4_CATH);
-        Thread::wait(1);
-        send_nixie_shiftreg(0, 0, 0);
-        Thread::wait(1);
-        nixie_mutex.unlock();
-    }
-}
-void NixieTube::start_nixie(){
-    //thread = new Thread(nixie_thread, this);
-    }
-void NixieTube::update_nixie_tube(int ref,int val){
+void NixieTube::update_individual_nixie_tube(int ref,int val){
     switch(ref){
     case(1):
     digit1 = val;
@@ -110,7 +98,17 @@
     digit4 = val;
     } 
 }
+
+void NixieTube::update_all_nixie_tube(int val1,int val2,int val3,int val4){
+    digit1 = val1;
+    digit2 = val2;
+    digit3 = val3;
+    digit4 = val4;
+    } 
 void NixieTube::set_dim(float duty,int pulsewidth){
     _cen.write(duty);
     _cen.period_us(pulsewidth);
-}   
\ No newline at end of file
+}   
+void NixieTube::debug_digits(){
+    std::printf("Tube1: %d,Tube2: %d,Tube3: %d,Tube4: %d\r\n",digit1,digit2,digit3,digit4);
+    }