/* Nixie tubed Angle Gauge J. 2022 https://hackaday.io/project/184322-nixie-tubed-angle-gauge */ #include #include //Include the Wire library #include //Include the MMA_7455 library #include int avgs = 150; movingAvg Xx(avgs); movingAvg Yy(avgs); movingAvg Zz(avgs); MMA_7455 mySensor = MMA_7455(); //Make an instance of MMA_7455 char xVal, yVal, zVal; //Variables for the values from the sensor float Xa,Ya,Za; int orixz,oriyz; int k, xValmin, yValmin, zValmin, xValmax, yValmax, zValmax, AN1 = 9, BN1 = 10, CN1 = 11, DN1 = 12, AN2 = 5, BN2 = 6, CN2 = 7 , DN2 = 8, AN3 = 13, BN3 = 2, CN3 = 3, DN3 = 4; char NixieBinary[12]; bool DeziBin [10][4] = { //DeziBin[ZahlDezi][zahlBin] //D,C,B,A {LOW,LOW,LOW,LOW}, //0 {LOW,LOW,LOW,HIGH}, //1 {LOW,LOW,HIGH,LOW}, //2 {LOW,LOW,HIGH,HIGH}, //3 {LOW,HIGH,LOW,LOW}, //4 {LOW,HIGH,LOW,HIGH}, //5 {LOW,HIGH,HIGH,LOW}, //6 {LOW,HIGH,HIGH,HIGH}, //7 {HIGH,LOW,LOW,LOW}, //8 {HIGH,LOW,LOW,HIGH} //9 }; void setup() { pinMode(AN1, OUTPUT); pinMode(BN1, OUTPUT); pinMode(CN1, OUTPUT); pinMode(DN1, OUTPUT); pinMode(AN2, OUTPUT); pinMode(BN2, OUTPUT); pinMode(CN2, OUTPUT); pinMode(DN2, OUTPUT); pinMode(AN3, OUTPUT); pinMode(BN3, OUTPUT); pinMode(CN3, OUTPUT); pinMode(DN3, OUTPUT); Xx.begin(); // Begin averages Yy.begin(); Zz.begin(); Serial.begin(115200); Wire.begin(); Wire.setClock(400000); // Set the sensitivity you want to use // 2 = 2g, 4 = 4g, 8 = 8g mySensor.initSensitivity(8); // Calibrate the Offset, that values corespond in // flat position to: xVal = -30, yVal = -20, zVal = +20 // !!!Activate this after having the first values read out!!! xVal = mySensor.readAxis('x'); //Read out the 'x' Axis yVal = mySensor.readAxis('y'); //Read out the 'y' Axis zVal = mySensor.readAxis('z'); //Read out the 'z' Axis mySensor.calibrateOffset(-xVal, -yVal, -zVal); // get offset // mySensor.calibrateOffset(0, 0, 0); xVal = mySensor.readAxis('x'); //Read out the 'x' Axis yVal = mySensor.readAxis('y'); //Read out the 'y' Axis zVal = mySensor.readAxis('z'); //Read out the 'z' Axis xValmin = mySensor.readAxis('z'); //Read out the 'z' Axis // initial min/max value to get min/max later xValmax = mySensor.readAxis('z'); //Read out the 'z' Axis yValmin = mySensor.readAxis('x'); //Read out the 'x' Axis yValmax = mySensor.readAxis('x'); //Read out the 'x' Axis zValmin = mySensor.readAxis('y'); //Read out the 'y' Axis zValmax = mySensor.readAxis('y'); //Read out the 'y' Axis tubeCare(); } void loop() { xVal = -(mySensor.readAxis('x'));//-(abs(xValmin-xValmax)/2); //Read out the 'x' Axis yVal = -(mySensor.readAxis('y'));//-(abs(yValmin-yValmax)/2); //Read out the 'y' Axis zVal = -(mySensor.readAxis('z')+64);//-(abs(zValmin-zValmax)/2); //Read out the 'z' Axis Xx.reading(xVal); Yy.reading(yVal); Zz.reading(zVal); /* Serial.print(xVal, DEC);Serial.print(", "); // Serial.print("yVal: "); Serial.print(yVal, DEC);Serial.print(", "); //Serial.print("zVal: "); Serial.print(zVal, DEC);Serial.print(", "); Serial.println(); Xa=xVal;//*0.03125; // 2g / 8bit *bit reading 2g = *0.0078125; Ya=yVal;//*0.03125; // 8g = *0.03125; Za=zVal;//*0.03125; */ /* //Serial.print("xVal: "); Serial.print(Xa,3);Serial.print(", "); // Serial.print("yVal: "); Serial.print(Ya,3);Serial.print(", "); //Serial.print("zVal: "); Serial.print(Za,3);Serial.print(", "); Serial.println(); */ delay(5); tubeAngle(); } void tubeAngle() //----------------tubeCare() { trig(); /* itoa(oriyz,NixieBinary,2); // gives binary, but its not what i need here char* NixieBinarystring = NixieBinary - 1; Serial.println("NixieBinarystring: "); Serial.print(NixieBinarystring[1]);Serial.print(NixieBinarystring[2]);Serial.print(NixieBinarystring[3]);Serial.println(NixieBinarystring[4]); Serial.print(NixieBinarystring[5]);Serial.print(NixieBinarystring[6]);Serial.print(NixieBinarystring[7]);Serial.println(NixieBinarystring[8]); Serial.print(NixieBinarystring[9]);Serial.print(NixieBinarystring[10]);Serial.print(NixieBinarystring[11]);Serial.println(NixieBinarystring[12]); Serial.println(); digitalWrite(DN3, NixieBinarystring[12]); digitalWrite(CN3, NixieBinarystring[11]); digitalWrite(BN3, NixieBinarystring[10]); digitalWrite(AN3, NixieBinarystring[9]); digitalWrite(DN2, NixieBinarystring[8]); digitalWrite(CN2, NixieBinarystring[7]); digitalWrite(BN2, NixieBinarystring[6]); digitalWrite(AN2, NixieBinarystring[5]); */ k=oriyz/100; Serial.print("k: ");Serial.println(k); Serial.print("Binary DN3-AN3: "); Serial.print(DeziBin [k][0]);Serial.print(" ");Serial.print(DeziBin [k][1]);Serial.print(" "); Serial.print(DeziBin [k][2]);Serial.print(" ");Serial.print(DeziBin [k][3]);Serial.println(); digitalWrite(DN3, DeziBin [k][0]); // looking into DeziBin array for numbers digitalWrite(CN3, DeziBin [k][1]); digitalWrite(BN3, DeziBin [k][2]); digitalWrite(AN3, DeziBin [k][3]); if(oriyz<100)k=(oriyz/10)-(100*(oriyz/100)); else k=((oriyz)-(100*k))/10; Serial.print("k: ");Serial.println(k); Serial.print("Binary DN2-AN2: "); Serial.print(DeziBin [k][0]);Serial.print(" ");Serial.print(DeziBin [k][1]);Serial.print(" "); Serial.print(DeziBin [k][2]);Serial.print(" ");Serial.print(DeziBin [k][3]);Serial.println(); digitalWrite(DN2, DeziBin [k][0]); digitalWrite(CN2, DeziBin [k][1]); digitalWrite(BN2, DeziBin [k][2]); digitalWrite(AN2, DeziBin [k][3]); k=oriyz-(10*(oriyz/10)); Serial.print("k: ");Serial.println(k); Serial.print("Binary DN1-AN1: "); Serial.print(DeziBin [k][0]);Serial.print(" ");Serial.print(DeziBin [k][1]);Serial.print(" "); Serial.print(DeziBin [k][2]);Serial.print(" ");Serial.print(DeziBin [k][3]);Serial.println(); digitalWrite(DN1, DeziBin [k][0]); digitalWrite(CN1, DeziBin [k][1]); digitalWrite(BN1, DeziBin [k][2]); digitalWrite(AN1, DeziBin [k][3]); Serial.println(); } void trig() { if(xValxValmax)xValmax = xVal; if(yValyValmax)yValmax = yVal; if(zValzValmax)zValmax = zVal; /* Serial.println(); Serial.print("xVal_min_max: "); Serial.print(xValmin);Serial.print(", "); Serial.print(xValmax);Serial.println(); Serial.print("yVal_min_max: "); Serial.print(yValmin);Serial.print(", "); Serial.print(yValmax);Serial.println(); Serial.print("zVal_min_max: "); Serial.print(zValmin);Serial.print(", "); Serial.print(zValmax);Serial.println(); Serial.println(); Serial.print("xVal_min-max: "); Serial.print(abs(xValmin-xValmax));Serial.println(); Serial.print("yVal_min-max: "); Serial.print(abs(yValmin-yValmax));Serial.println(); Serial.print("zVal_min-max: "); Serial.print(abs(zValmin-zValmax));Serial.println(); Serial.println(); */ oriyz = abs(atan2(Yy.getAvg(),-Zz.getAvg())*180/PI); // oriyz = abs(atan2(yVal,-zVal)*180/PI); /* Serial.print("Winkel_bin Z Y: "); Serial.print(oriyz,BIN);Serial.println(); Serial.print("Winkel_dec Z Y: "); Serial.print(oriyz,DEC);Serial.println(); */ } void tubeCare() //----------------tubeCare() { k=0; while (k<11) { digitalWrite(DN1, DeziBin[k][0]); digitalWrite(CN1, DeziBin[k][1]); digitalWrite(BN1, DeziBin[k][2]); digitalWrite(AN1, DeziBin[k][3]); digitalWrite(DN2, DeziBin[k][0]); digitalWrite(CN2, DeziBin[k][1]); digitalWrite(BN2, DeziBin[k][2]); digitalWrite(AN2, DeziBin[k][3]); digitalWrite(DN3, DeziBin[k][0]); digitalWrite(CN3, DeziBin[k][1]); digitalWrite(BN3, DeziBin[k][2]); digitalWrite(AN3, DeziBin[k][3]); delay(100); k++; } }