51 lines
13 KiB
C++
51 lines
13 KiB
C++
#include <Wire.h>
|
|
#include <Adafruit_MCP4725.h>
|
|
|
|
Adafruit_MCP4725 dacPosition;
|
|
Adafruit_MCP4725 dacLoad;
|
|
|
|
// INPUT PARAMETERS
|
|
long dt_ms = 30;
|
|
const int num_points = 673;
|
|
const double surface_position[num_points] = {
|
|
0, 0.066215, 0.171112, 0.316819, 0.498586, 0.715024, 0.97621, 1.2883, 1.63867, 2.02093, 2.43243, 2.87705, 3.36461, 3.8875, 4.44299, 5.03967, 5.67946, 6.35611, 7.05754, 7.7809, 8.53069, 9.32235, 10.1506, 11.013, 11.9097, 12.842, 13.8065, 14.7986, 15.8226, 16.8842, 17.9785, 19.1005, 20.2442, 21.4129, 22.6127, 23.8375, 25.0839, 26.3506, 27.6347, 28.936, 30.2719, 31.6607, 33.0885, 34.5314, 35.9861, 37.4602, 38.9614, 40.4966, 42.0607, 43.6394, 45.2335, 46.8483, 48.4878, 50.152, 51.8308, 53.5259, 55.2375, 56.9713, 58.7226, 60.4832, 62.2413, 64.007, 65.7803, 67.5656, 69.3593, 71.1599, 72.9585, 74.7583, 76.556, 78.3522, 80.1504, 81.9521, 83.7547, 85.5546, 87.3472, 89.1313, 90.9046, 92.6711, 94.4368, 96.2018, 97.9579, 99.6993, 101.428, 103.143, 104.844, 106.527, 108.191, 109.842, 111.478, 113.09, 114.669, 116.219, 117.74, 119.238, 120.709, 122.148, 123.547, 124.909, 126.234, 127.523, 128.772, 129.979, 131.149, 132.282, 133.374, 134.416, 135.41, 136.359, 137.266, 138.126, 138.939, 139.7, 140.403, 141.05, 141.639, 142.175, 142.646, 143.058, 143.405, 143.683, 143.878, 143.996, 144, 143.95, 143.839, 143.662, 143.407, 143.091, 142.687, 142.183, 141.6, 140.93, 140.172, 139.341, 138.434, 137.43, 136.346, 135.19, 133.945, 132.611, 131.196, 129.659, 128.044, 126.37, 124.599, 122.758, 120.876, 119.005, 117.1, 115.16, 113.195, 111.124, 108.956, 106.734, 104.501, 102.236, 99.8892, 97.4932, 95.0781, 92.6506, 90.2226, 87.773, 85.3137, 82.8008, 80.2456, 77.6691, 75.059, 72.4444, 69.889, 67.3891, 64.9092, 62.449, 60.006, 57.606, 55.2767, 53.0145, 50.7868, 48.581, 46.4189, 44.3031, 42.2375, 40.2273, 38.2721, 36.3855, 34.5648, 32.8088, 31.0978, 29.4095, 27.7617, 26.1538, 24.6108, 23.1211, 21.6577, 20.237, 18.8709, 17.57, 16.3306, 15.1428, 13.9942, 12.8928, 11.837, 10.8323, 9.88763, 8.99399, 8.1242, 7.2898, 6.51456, 5.80287, 5.14662, 4.5243, 3.93801, 3.40371, 2.91193, 2.4483, 2.01826, 1.63363, 1.29812, 1.00485, 0.741844, 0.515951, 0.329747, 0.179453, 0.073617, 0.018252, 0, 0.066215, 0.171112, 0.316819, 0.498586, 0.715024, 0.97621, 1.2883, 1.63867, 2.02093, 2.43243, 2.87705, 3.36461, 3.8875, 4.44299, 5.03967, 5.67946, 6.35611, 7.05754, 7.7809, 8.53069, 9.32235, 10.1506, 11.013, 11.9097, 12.842, 13.8065, 14.7986, 15.8226, 16.8842, 17.9785, 19.1005, 20.2442, 21.4129, 22.6127, 23.8375, 25.0839, 26.3506, 27.6347, 28.936, 30.2719, 31.6607, 33.0885, 34.5314, 35.9861, 37.4602, 38.9614, 40.4966, 42.0607, 43.6394, 45.2335, 46.8483, 48.4878, 50.152, 51.8308, 53.5259, 55.2375, 56.9713, 58.7226, 60.4832, 62.2413, 64.007, 65.7803, 67.5656, 69.3593, 71.1599, 72.9585, 74.7583, 76.556, 78.3522, 80.1504, 81.9521, 83.7547, 85.5546, 87.3472, 89.1313, 90.9046, 92.6711, 94.4368, 96.2018, 97.9579, 99.6993, 101.428, 103.143, 104.844, 106.527, 108.191, 109.842, 111.478, 113.09, 114.669, 116.219, 117.74, 119.238, 120.709, 122.148, 123.547, 124.909, 126.234, 127.523, 128.772, 129.979, 131.149, 132.282, 133.374, 134.416, 135.41, 136.359, 137.266, 138.126, 138.939, 139.7, 140.403, 141.05, 141.639, 142.175, 142.646, 143.058, 143.405, 143.683, 143.878, 143.996, 144, 143.95, 143.839, 143.662, 143.407, 143.091, 142.687, 142.183, 141.6, 140.93, 140.172, 139.341, 138.434, 137.43, 136.346, 135.19, 133.945, 132.611, 131.196, 129.659, 128.044, 126.37, 124.599, 122.758, 120.876, 119.005, 117.1, 115.16, 113.195, 111.124, 108.956, 106.734, 104.501, 102.236, 99.8892, 97.4932, 95.0781, 92.6506, 90.2226, 87.773, 85.3137, 82.8008, 80.2456, 77.6691, 75.059, 72.4444, 69.889, 67.3891, 64.9092, 62.449, 60.006, 57.606, 55.2767, 53.0145, 50.7868, 48.581, 46.4189, 44.3031, 42.2375, 40.2273, 38.2721, 36.3855, 34.5648, 32.8088, 31.0978, 29.4095, 27.7617, 26.1538, 24.6108, 23.1211, 21.6577, 20.237, 18.8709, 17.57, 16.3306, 15.1428, 13.9942, 12.8928, 11.837, 10.8323, 9.88763, 8.99399, 8.1242, 7.2898, 6.51456, 5.80287, 5.14662, 4.5243, 3.93801, 3.40371, 2.91193, 2.4483, 2.01826, 1.63363, 1.29812, 1.00485, 0.741844, 0.515951, 0.329747, 0.179453, 0.073617, 0.018252, 0, 0.066215, 0.171112, 0.316819, 0.498586, 0.715024, 0.97621, 1.2883, 1.63867, 2.02093, 2.43243, 2.87705, 3.36461, 3.8875, 4.44299, 5.03967, 5.67946, 6.35611, 7.05754, 7.7809, 8.53069, 9.32235, 10.1506, 11.013, 11.9097, 12.842, 13.8065, 14.7986, 15.8226, 16.8842, 17.9785, 19.1005, 20.2442, 21.4129, 22.6127, 23.8375, 25.0839, 26.3506, 27.6347, 28.936, 30.2719, 31.6607, 33.0885, 34.5314, 35.9861, 37.4602, 38.9614, 40.4966, 42.0607, 43.6394, 45.2335, 46.8483, 48.4878, 50.152, 51.8308, 53.5259, 55.2375, 56.9713, 58.7226, 60.4832, 62.2413, 64.007, 65.7803, 67.5656, 69.3593, 71.1599, 72.9585, 74.7583, 76.556, 78.3522, 80.1504, 81.9521, 83.7547, 85.5546, 87.3472, 89.1313, 90.9046, 92.6711, 94.4368, 96.2018, 97.9579, 99.6993, 101.428, 103.143, 104.844, 106.527, 108.191, 109.842, 111.478, 113.09, 114.669, 116.219, 117.74, 119.238, 120.709, 122.148, 123.547, 124.909, 126.234, 127.523, 128.772, 129.979, 131.149, 132.282, 133.374, 134.416, 135.41, 136.359, 137.266, 138.126, 138.939, 139.7, 140.403, 141.05, 141.639, 142.175, 142.646, 143.058, 143.405, 143.683, 143.878, 143.996, 144, 143.95, 143.839, 143.662, 143.407, 143.091, 142.687, 142.183, 141.6, 140.93, 140.172, 139.341, 138.434, 137.43, 136.346, 135.19, 133.945, 132.611, 131.196, 129.659, 128.044, 126.37, 124.599, 122.758, 120.876, 119.005, 117.1, 115.16, 113.195, 111.124, 108.956, 106.734, 104.501, 102.236, 99.8892, 97.4932, 95.0781, 92.6506, 90.2226, 87.773, 85.3137, 82.8008, 80.2456, 77.6691, 75.059, 72.4444, 69.889, 67.3891, 64.9092, 62.449, 60.006, 57.606, 55.2767, 53.0145, 50.7868, 48.581, 46.4189, 44.3031, 42.2375, 40.2273, 38.2721, 36.3855, 34.5648, 32.8088, 31.0978, 29.4095, 27.7617, 26.1538, 24.6108, 23.1211, 21.6577, 20.237, 18.8709, 17.57, 16.3306, 15.1428, 13.9942, 12.8928, 11.837, 10.8323, 9.88763, 8.99399, 8.1242, 7.2898, 6.51456, 5.80287, 5.14662, 4.5243, 3.93801, 3.40371, 2.91193, 2.4483, 2.01826, 1.63363, 1.29812, 1.00485, 0.741844, 0.515951, 0.329747, 0.179453, 0.073617, 0.018252, 0
|
|
};
|
|
const double surface_load[num_points] = {
|
|
8484.74, 8615.27, 8951.1, 9280.12, 9613.75, 10084.6, 10624.4, 10886, 10787.3, 10515.7, 10317, 10188.2, 10107.5, 10058.3, 10128.3, 10279.2, 10368, 10397.3, 10422.5, 10496.4, 10721.6, 11145.6, 11569.2, 12015.8, 12514.9, 12892, 12964.3, 12892.5, 12869.7, 12904.7, 12974.2, 13055.2, 13145.5, 13406.1, 13789.8, 13974.4, 14102, 14397.5, 14832.5, 15269.6, 15730.9, 16128.3, 16138.4, 15870.9, 15687, 15666, 15642.7, 15570.9, 15503.3, 15452.3, 15386.8, 15105.5, 14678, 14434.2, 14364.4, 14356.1, 14236.2, 14093.1, 13891.4, 13598.9, 13513.1, 13694.1, 13886.4, 13987.5, 14073.4, 14208.2, 14286.5, 14322, 14312, 14427.3, 14687.4, 14818.9, 14816.3, 14750.8, 14682.4, 14642.8, 14661.6, 14728.2, 14709.3, 14537.4, 14323.4, 14149.4, 13975.5, 13769.3, 13652.9, 13573.9, 13526.9, 13466.2, 13316.7, 13212.9, 13210.8, 13258, 13319.1, 13443.1, 13533.1, 13525.3, 13536, 13699.2, 14000.9, 14235.3, 14383.4, 14674.1, 14953.1, 14981, 14929.8, 14898.1, 14954.7, 14988.7, 14932.4, 14798, 14617.8, 14300.7, 13873.7, 13581.8, 13342, 13062.5, 12627.3, 12231.8, 11767.8, 11330.1, 10991, 10990.7, 11457.4, 13420, 14602.7, 15329.3, 15622.4, 15098.6, 14170.6, 13026.4, 12231.2, 11669.8, 11416.2, 11030.2, 10372.5, 9651.43, 9073.28, 8552.75, 7961.3, 7503.35, 7265.97, 7476.43, 8425.79, 8998.29, 9058.83, 8750.14, 7922.02, 6829.66, 5739.27, 4938.02, 4556.92, 4009.97, 3076.65, 2809.43, 3435.44, 4114.62, 4774.08, 5494.42, 6051.92, 6267.32, 6215.52, 6104.6, 6203.32, 6609.69, 7243.11, 7868.18, 8409.37, 8770.91, 9123, 9726.37, 10533.1, 10876.2, 10686.3, 10357, 9938.64, 9433.22, 8896.33, 8634.28, 8698.11, 8840.73, 8833.26, 8726.52, 8607.14, 8449.8, 8343.22, 8334.71, 8226.37, 7798.63, 7187.13, 6973.54, 7240.64, 7661.24, 8004.98, 8433.32, 9012.46, 9429.65, 9509.81, 9421.25, 9405.43, 9478.66, 9530.74, 9548.98, 9552.49, 9483.55, 9405.81, 9492.06, 9765.15, 9996.22, 9887.11, 9551.61, 9254.68, 8961.15, 8378.6, 7819.07, 7649.43, 7745.02, 7860, 7939.93, 8024.7, 8110.57, 8151.66, 8272.08, 8535.67, 8665.32, 8484.74, 8615.27, 8951.1, 9280.12, 9613.75, 10084.6, 10624.4, 10886, 10787.3, 10515.7, 10317, 10188.2, 10107.5, 10058.3, 10128.3, 10279.2, 10368, 10397.3, 10422.5, 10496.4, 10721.6, 11145.6, 11569.2, 12015.8, 12514.9, 12892, 12964.3, 12892.5, 12869.7, 12904.7, 12974.2, 13055.2, 13145.5, 13406.1, 13789.8, 13974.4, 14102, 14397.5, 14832.5, 15269.6, 15730.9, 16128.3, 16138.4, 15870.9, 15687, 15666, 15642.7, 15570.9, 15503.3, 15452.3, 15386.8, 15105.5, 14678, 14434.2, 14364.4, 14356.1, 14236.2, 14093.1, 13891.4, 13598.9, 13513.1, 13694.1, 13886.4, 13987.5, 14073.4, 14208.2, 14286.5, 14322, 14312, 14427.3, 14687.4, 14818.9, 14816.3, 14750.8, 14682.4, 14642.8, 14661.6, 14728.2, 14709.3, 14537.4, 14323.4, 14149.4, 13975.5, 13769.3, 13652.9, 13573.9, 13526.9, 13466.2, 13316.7, 13212.9, 13210.8, 13258, 13319.1, 13443.1, 13533.1, 13525.3, 13536, 13699.2, 14000.9, 14235.3, 14383.4, 14674.1, 14953.1, 14981, 14929.8, 14898.1, 14954.7, 14988.7, 14932.4, 14798, 14617.8, 14300.7, 13873.7, 13581.8, 13342, 13062.5, 12627.3, 12231.8, 11767.8, 11330.1, 10991, 10990.7, 11457.4, 13420, 14602.7, 15329.3, 15622.4, 15098.6, 14170.6, 13026.4, 12231.2, 11669.8, 11416.2, 11030.2, 10372.5, 9651.43, 9073.28, 8552.75, 7961.3, 7503.35, 7265.97, 7476.43, 8425.79, 8998.29, 9058.83, 8750.14, 7922.02, 6829.66, 5739.27, 4938.02, 4556.92, 4009.97, 3076.65, 2809.43, 3435.44, 4114.62, 4774.08, 5494.42, 6051.92, 6267.32, 6215.52, 6104.6, 6203.32, 6609.69, 7243.11, 7868.18, 8409.37, 8770.91, 9123, 9726.37, 10533.1, 10876.2, 10686.3, 10357, 9938.64, 9433.22, 8896.33, 8634.28, 8698.11, 8840.73, 8833.26, 8726.52, 8607.14, 8449.8, 8343.22, 8334.71, 8226.37, 7798.63, 7187.13, 6973.54, 7240.64, 7661.24, 8004.98, 8433.32, 9012.46, 9429.65, 9509.81, 9421.25, 9405.43, 9478.66, 9530.74, 9548.98, 9552.49, 9483.55, 9405.81, 9492.06, 9765.15, 9996.22, 9887.11, 9551.61, 9254.68, 8961.15, 8378.6, 7819.07, 7649.43, 7745.02, 7860, 7939.93, 8024.7, 8110.57, 8151.66, 8272.08, 8535.67, 8665.32, 8566.76, 8484.74, 8615.27, 8951.1, 9280.12, 9613.75, 10084.6, 10624.4, 10886, 10787.3, 10515.7, 10317, 10188.2, 10107.5, 10058.3, 10128.3, 10279.2, 10368, 10397.3, 10422.5, 10496.4, 10721.6, 11145.6, 11569.2, 12015.8, 12514.9, 12892, 12964.3, 12892.5, 12869.7, 12904.7, 12974.2, 13055.2, 13145.5, 13406.1, 13789.8, 13974.4, 14102, 14397.5, 14832.5, 15269.6, 15730.9, 16128.3, 16138.4, 15870.9, 15687, 15666, 15642.7, 15570.9, 15503.3, 15452.3, 15386.8, 15105.5, 14678, 14434.2, 14364.4, 14356.1, 14236.2, 14093.1, 13891.4, 13598.9, 13513.1, 13694.1, 13886.4, 13987.5, 14073.4, 14208.2, 14286.5, 14322, 14312, 14427.3, 14687.4, 14818.9, 14816.3, 14750.8, 14682.4, 14642.8, 14661.6, 14728.2, 14709.3, 14537.4, 14323.4, 14149.4, 13975.5, 13769.3, 13652.9, 13573.9, 13526.9, 13466.2, 13316.7, 13212.9, 13210.8, 13258, 13319.1, 13443.1, 13533.1, 13525.3, 13536, 13699.2, 14000.9, 14235.3, 14383.4, 14674.1, 14953.1, 14981, 14929.8, 14898.1, 14954.7, 14988.7, 14932.4, 14798, 14617.8, 14300.7, 13873.7, 13581.8, 13342, 13062.5, 12627.3, 12231.8, 11767.8, 11330.1, 10991, 10990.7, 11457.4, 13420, 14602.7, 15329.3, 15622.4, 15098.6, 14170.6, 13026.4, 12231.2, 11669.8, 11416.2, 11030.2, 10372.5, 9651.43, 9073.28, 8552.75, 7961.3, 7503.35, 7265.97, 7476.43, 8425.79, 8998.29, 9058.83, 8750.14, 7922.02, 6829.66, 5739.27, 4938.02, 4556.92, 4009.97, 3076.65, 2809.43, 3435.44, 4114.62, 4774.08, 5494.42, 6051.92, 6267.32, 6215.52, 6104.6, 6203.32, 6609.69, 7243.11, 7868.18, 8409.37, 8770.91, 9123, 9726.37, 10533.1, 10876.2, 10686.3, 10357, 9938.64, 9433.22, 8896.33, 8634.28, 8698.11, 8840.73, 8833.26, 8726.52, 8607.14, 8449.8, 8343.22, 8334.71, 8226.37, 7798.63, 7187.13, 6973.54, 7240.64, 7661.24, 8004.98, 8433.32, 9012.46, 9429.65, 9509.81, 9421.25, 9405.43, 9478.66, 9530.74, 9548.98, 9552.49, 9483.55, 9405.81, 9492.06, 9765.15, 9996.22, 9887.11, 9551.61, 9254.68, 8961.15, 8378.6, 7819.07, 7649.43, 7745.02, 7860, 7939.93, 8024.7, 8110.57, 8151.66, 8272.08, 8535.67, 8665.32
|
|
};
|
|
|
|
void setup() {
|
|
// put your setup code here, to run once:
|
|
|
|
Serial.begin(9600);
|
|
Serial.println("Hello!");
|
|
|
|
// For Adafruit MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC)
|
|
// For MCP4725A0 the address is 0x60 or 0x61
|
|
// For MCP4725A2 the address is 0x64 or 0x65
|
|
dacPosition.begin(0x62);
|
|
dacLoad.begin(0x63);
|
|
|
|
}
|
|
|
|
uint16_t p;
|
|
uint16_t l;
|
|
|
|
uint16_t scale(double raw_inp, double raw_min, double raw_max, double scaled_min, double scaled_max){
|
|
double scaled_float = ((scaled_max - scaled_min)/(raw_max - raw_min)) * raw_inp + (scaled_max - ((scaled_max - scaled_min)/(raw_max - raw_min)) * raw_max);
|
|
return (uint16_t) scaled_float;
|
|
};
|
|
|
|
void loop() {
|
|
// put your main code here, to run repeatedly:
|
|
for(int i = 0; i < num_points; i++){
|
|
p = scale(surface_position[i], 0.0, 145.0, 0, 4096);
|
|
l = scale(surface_load[i], 0.0, 50000.0, 0, 4096);
|
|
dacPosition.setVoltage(p, false);
|
|
dacLoad.setVoltage(l, false);
|
|
Serial.println("p: " + String(p) + ", l: " + String(l));
|
|
delay(dt_ms);
|
|
}
|
|
|
|
}
|