Autohotkey w służbie nauki

Jak pisałem, przeprowadzełem ze znajomymi Eksperyment z zakresu psychologii poznawczej.

Do eksperymentu postanowiłem wykorzystać komputer. A co!

Zasada działania

Powerpoint wyświetla twarz przeglądajacemu. Za pomocą klawiszy 1-5 przeglądający identyfikuje ją jako wyświetlającą jedną z 5 emocji. Gdy naciśnie klawisz, slajd się zmienia i przeglądający przechodzi dalej.

Pragniemy zapisać do pliku czas oraz wybrana opcję.

Jak to zrobić najłatwiej?

Postanowiłem wykorzystać program Autohotkey: http://www.autohotkey.com/
Autohotkey jest programem do budowania makr w windows.

Jak go skonfigurowałem?

  • Przycisk Insert uruchamia procedurę. Jego naciśnięcie zapisuje do pliku informację o nowej osobie badanej
  • Gdy procedura jest uruchomiona, działanie przycisków 1-5 zostaje zmienione. Każdy z nich zamiast przesłać cyfrę, robi rzeczy następujące:
    • Zapisuje do pliku wybraną cyfrę i czas.
    • Przesyła spację do powerpointa przerzucając slajd
  • Pomocnik badacza naciskając insert kończy badanie

Kod Autohotkey:

osoba:=0
dziala:=0
numer:=0

$Space::
{
	if(dziala)
	{
		numer:=numer+1
		FileAppend,`n%A_TickCount%, C:TypingLog.txt

	}

	Send {Space}

return
}

$1::
{
	if(dziala)
	{
		numer:=numer+1
		FileAppend,`nCZERWONY %A_TickCount%, C:TypingLog.txt

		Send {Space}
	}
	else
	{
		Send {1}
	}

return
}

$2::
{
	if(dziala)
	{
		numer:=numer+1
		FileAppend,`nZIELONY %A_TickCount%, C:TypingLog.txt

		Send {Space}
	}
	else
	{
		Send {2}
	}

return
}

$3::
{
	if(dziala)
	{
		numer:=numer+1
		FileAppend,`nNIEBIESKI %A_TickCount%, C:TypingLog.txt

		Send {Space}
	}
	else
	{
		Send {3}
	}

return
}

$4::
{
	if(dziala)
	{
		numer:=numer+1
		FileAppend,`nZOLTY %A_TickCount%, C:TypingLog.txt

		Send {Space}
	}
	else
	{
		Send {4}
	}

return
}

$5::
{
	if(dziala)
	{
		numer:=numer+1
		FileAppend,`nCZARNY %A_TickCount%, C:TypingLog.txt

		Send {Space}
	}
	else
	{
		Send {5}
	}

return
}

vk13sc045::
{
	if(dziala)
	{
		dziala:=0
		SoundPlay, C:WindowsMediatada.wav
		Send {Space}
	}
	else
	{
		dziala:=1
		FileAppend,`nNOWA_OSOBA %A_TickCount%, C:TypingLog.txt
		SoundPlay, C:WindowsMediachord.wav
		Send {Space}

	}
	return
}

Interpretacja danych

A napiszemy sobie w PHP skrypcik do interpretacji danych:

<?php

function wczytaj($plik)
{
  $tablica=file($plik);
  $osoby=array();
  $osoba_teraz=-1;
  $czas=0;
  
  for($i=0;$i5)
      {
        $dane=explode(" ",$teraz);
        $osoby[$osoba_teraz][]=array($dane[0],($dane[1]-$czas));
        $czas=$dane[1];       
      }    
  }
  
  return $osoby;
}

$dane_emocje=wczytaj("dane_emocje.txt");
$dane_kolory=wczytaj("dane_kolory.txt");
$odp_emocje=wczytaj("emocje_odp.txt");
$odp_kolory=wczytaj("kolory_odp.txt");

$emocje_tran=array();
$emocje_tran['CZERWONY']='USMIECHNIETY';
$emocje_tran['ZIELONY']='SMUTNY';
$emocje_tran['NIEBIESKI']='ZLY';
$emocje_tran['ZOLTY']='PRZERAZONY';
$emocje_tran['CZARNY']='ZAZENOWANY';

$emocje=array();
$emocje_ile=0;

$kolory=array();
$kolory_ile=0;


//Przeliczamy emocje. Powinno byc proste.
for($i=0;$i<count($dane_emocje);$i++)
{
   $emocje_ile++;
   for($j=0;$j<count($dane_emocje[$i]);$j++)
    {
       $dane_emocje[$i][$j][2]=0;
       if($dane_emocje[$i][$j][0]==$odp_emocje[0][$j][0])
       {
            $dane_emocje[$i][$j][2]=1;
       }
       
       if(!isset($emocje[$j]))
       {
          $emocje[$j]=array($dane_emocje[$i][$j][1],$dane_emocje[$i][$j][2],$emocje_tran[$odp_emocje[0][$j][0]]);
       }
       else
       {
          $emocje[$j][0]+=$dane_emocje[$i][$j][1];
          $emocje[$j][1]+=$dane_emocje[$i][$j][2];
       }
       
      //sort
       $emocje_czas_sort=array();
       $emocje_odp_sort=array();
       
       $emocje_czas_sort[$odp_emocje[$odp][$j][0]]+=$dane_emocje[$i][$j][1];
       $emocje_odp_sort[$odp_emocje[$odp][$j][0]]+=$dane_emocje[$i][$j][2];
    }
}

//print_r($emocje);

for($i=0;$i<count($dane_kolory);$i++)
{
   $kolory_ile++;
   for($j=0;$j5)
       {
          //wedle emocje1
          $slajd=$j;
          $odp=0;
       }
       else
       {
          $odp=1;
          //wedle emocje2
          if($j>19)
          {
            $slajd=$j-20;
          }
          else
          {
            $slajd=$j+20;
          }
       }
       
       
       $dane_kolory[$i][$j][2]=0;
       if($dane_kolory[$i][$j][0]==$odp_kolory[$odp][$j][0])
       {
            $dane_kolory[$i][$j][2]=1;
       }
       
       if(!isset($kolory[$slajd]))
       {
          $kolory[$slajd]=array($dane_kolory[$i][$j][1],$dane_kolory[$i][$j][2],$odp_kolory[$odp][$j][0]);
       }
       else
       {
          $kolory[$slajd][0]+=$dane_kolory[$i][$j][1];
          $kolory[$slajd][1]+=$dane_kolory[$i][$j][2];
       }
       
       //sort
       $kolory_czas_sort=array();
       $kolory_odp_sort=array();
       
       $kolory_czas_sort[$odp_kolory[$odp][$j][0]]+=$dane_kolory[$i][$j][1];
       $kolory_odp_sort[$odp_kolory[$odp][$j][0]]+=$dane_kolory[$i][$j][2];
       
    }
}

asort($kolory_czas_sort);
asort($kolory_odp_sort);
asort($emocje_czas_sort);
asort($emocje_odp_sort);


print("



KOLORY CZAS SORT
"); while(list($keys,$values) = each($kolory_czas_sort)) { echo(""); } print("
".$keys."".$values."
"); print("



KOLORY ODP SORT
"); while(list($keys,$values) = each($kolory_odp_sort)) { echo(""); } print("
".$keys."".$values."
"); print("



EMOCJE CZAS SORT
"); while(list($keys,$values) = each($emocje_czas_sort)) { echo(""); } print("
".$keys."".$values."
"); print("



KOLORY CZAS SORT
"); while(list($keys,$values) = each($emocje_odp_sort)) { echo(""); } print("
".$keys."".$values."
"); /* for($i=0;$i<count($emocje_czas_sort);$i++) { print("".($emocje[$i][0])."".$emocje[$i][1]."".$emocje[$i][2].""); } print("



".$kolory_ile."
"); for($i=0;$i<count($kolory);$i++) { print(""); } */ print("
".($kolory[$i][0])."".$kolory[$i][1]."".$kolory[$i][2]."
"); ?>

1 Comment

Leave a Reply