using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Collections; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using ActuBoardAPI; namespace VTExperiment1 { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private ActuBoardInterface _abi; double[] calibratedIntensities; int reversal_ctr = 0; int distance = 5; int reversal_flag = 0; int step = 1; Tuple[] tuples = { Tuple.Create(4, 5), // 1 unit distance Tuple.Create(3, 5), // 2 units Tuple.Create(3, 6), Tuple.Create(2, 6), Tuple.Create(2, 7), Tuple.Create(1, 7), Tuple.Create(1, 8), Tuple.Create(0, 8), Tuple.Create(0, 9) }; Tuple[] tuples6 = { Tuple.Create(2, 3), // 1 unit distance Tuple.Create(2, 4), // 2 units Tuple.Create(1, 4), Tuple.Create(1, 5), Tuple.Create(0, 5) }; public MainWindow() { InitializeComponent(); //Console.WriteLine(_abi.SetChannel(45, 125)); Calibration calibration = new Calibration(); calibration.ShowDialog(); calibration.BringIntoView(); calibratedIntensities = calibration.GetCalibrationData(); foreach (double d in calibratedIntensities) Console.Write(" " + d); _abi = new ActuBoardInterface(); _abi.SetComPort(6); _abi.Connect(); _abi.EnableOutput(true); } private void DISTINCT_Click(object sender, RoutedEventArgs e) { Logger.logger.LogWrite("1 Point" + distance); if (reversal_flag == 1) { reversal_ctr += 1; reversal_flag = 0; Logger.logger.LogWrite("REVERSAL " + reversal_ctr); } if (distance - step > 0) { distance = distance - step; } //Vibrate(); } private void NONDISTINCT_Click(object sender, RoutedEventArgs e) { Logger.logger.LogWrite("Several Points" + distance); if (reversal_flag == 0) { reversal_ctr += 1; reversal_flag = 1; Logger.logger.LogWrite("REVERSAL " + reversal_ctr); } if (distance + step < 6) { distance = distance + step; } //Vibrate(); } private void VIBRATE_Click(object sender, RoutedEventArgs e) { Vibrate(); } private void Vibrate() { if(Logger.logger.BodyLocation == "Wrist") { int m1 = tuples6[distance].Item1; int m2 = tuples6[distance].Item2; _abi.SetChannel(m1 + 40, (int)((calibratedIntensities[m1] / 50) * 165)); _abi.SetChannel(m2 + 40, (int)((calibratedIntensities[m2] / 50) * 165)); System.Threading.Thread.Sleep(1000); _abi.SetChannel(m1 + 40, 0); _abi.SetChannel(m2 + 40, 0); } else { int m1 = tuples[distance].Item1; int m2 = tuples[distance].Item2; _abi.SetChannel(m1 + 40, (int)((calibratedIntensities[m1] / 50) * 165)); _abi.SetChannel(m2 + 40, (int)((calibratedIntensities[m2] / 50) * 165)); System.Threading.Thread.Sleep(1000); _abi.SetChannel(m1 + 40, 0); _abi.SetChannel(m2 + 40, 0); } if (reversal_ctr == 6) { Close(); } } } public class DataPoint { int dist; bool distinct; public DataPoint(int distance, bool distinct) { dist = distance; this.distinct = distinct; } } }