Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

[solved] (EEG) Sending trigger after trigger

edited September 2014 in OpenSesame

I was wondering if there would be a way to set up an experiment in which an EEG trigger could be sent whenever a certain key is pressed. I understand that opensesame would not log all of the keypresses (if in 1 sequence?) but i would wish for a trigger to be sent whenever a key is pressed.

So, currently i only have 1 keyboard response in a sequence, but i would wish to let's say send a '3' trigger whenever the letter A is pressed. I would wish for this to be done for an unlimited number of times. So, a participant could press A, 6 times within a sequence, and the EEG would receive 3 3 3 3 3 3. Is this possible without having time constraints for a response and without having 100's of keyboard responses in a sequence? currently i have 1 keyboard response item and then some python saying something like --> IF exp.get('response_keyboard_response') =='A': then send trigger 3. This would send one trigger, but not many.

Any thoughts?

Many thanks

Comments

  • edited 9:42AM

    Hi Joshua,

    If understand correctly, you want to continuously monitor the keyboard, and send a trigger whenever a certain key is pressed, at any time during the trial?

    Basically, you cannot do this with keyboard_responses, at least not, as you say, without having loads of them and having a very complicated experimental structure. You will probably be better off implementing your trial through an inline_script that continuously polls for key presses.

    If you have specific questions about how to do this, don't hesitate to ask. There are quite a few related discussions on the forum (but not exactly the same), for example this one:

    Good luck!

    Cheers,
    Sebastiaan

  • edited 9:42AM

    Hi Sebastiaan,

    That's exactly right. I will have a gander at the code you suggested in the link

  • edited August 2014

    Hi Sebastian, ive had a look at the link and im starting to make sense of it. Im wanting to drive my stimuli with a normal item structure, but just continuously monitor the keyboard in an inline script. Could you please comment on the below code? many thanks. Also would i insert this inline script before a loop or would it have to be in the loop of my trial sequence?

    from openexp.keyboard import keyboard
    
    my_keyboard = keyboard(self.experiment, keylist=["1","2","3","4"], timeout=0)
    
    
    l=[]
    
    while True:
        resp, time = my_keyboard.get_key()
        if resp =='1':
            global io
            trigger = 201
            port = 0x1030
            try:
                io.DlPortWritePortUchar(port, trigger)
            except:
                print 'Failed to send trigger!'
    
        if resp =='2':
            global io
            trigger = 202
            port = 0x1030
            try:
                io.DlPortWritePortUchar(port, trigger)
            except:
                print 'Failed to send trigger!'
    
        if resp =='3':
            global io
            trigger = 203
            port = 0x1030
            try:
                io.DlPortWritePortUchar(port, trigger)
            except:
                print 'Failed to send trigger!'
    
        if resp =='4':
            global io
            trigger = 204
            port = 0x1030
            try:
                io.DlPortWritePortUchar(port, trigger)
            except:
                print 'Failed to send trigger!'
    
        if resp =='':
            print 'shouldnt do this'
    
    
    l = l[-100:]
    
  • edited 9:42AM

    ignore the last conditional statement. Any thoughts on this? Many thanks

  • edited 9:42AM

    Hi Joshua,

    Well, one thing that is clearly wrong with this script is that the while loop will never ever break. So once the while loop starts, OpenSesame will freeze until you forcefully close the program, which is probably not what you want. Instead, you will probably want to break the loop after a given duration. For example, something like this:

    # Loop for 1000 ms
    start_time = self.time()
    duration = 1000
    while self.time() - start_time < duration
        # Do something
        pass
    

    Do you see the logic here?

    Secondly, there's a lot of redundancy in the code that--while not strictly incorrect--kind of suggests that you don't fully understand what is going on. ;) For example, this ...

    if resp =='1':
        global io
        trigger = 201
        port = 0x1030
        try:
            io.DlPortWritePortUchar(port, trigger)
        except:
            print 'Failed to send trigger!'
    
    if resp =='2':
        global io
        trigger = 202
        port = 0x1030
        try:
            io.DlPortWritePortUchar(port, trigger)
        except:
            print 'Failed to send trigger!'
    

    ... is equivalent to this ...

    global io
    port = 0x1030
    if resp =='1':  
        trigger = 201
    elif resp =='2':
        trigger = 202
    try:
        io.DlPortWritePortUchar(port, trigger)
    except:
        print 'Failed to send trigger!'
    

    See? Only the trigger depends on the response, so there's no need to duplicate whole chunks of code.

    So I would first make sure that the while loop stops when you want it to stop (for example after a specific duration), and then clean up the code so that there's no unnecessary duplication. After that you will have a nice runnable script that you can test and debug further.

    And don't forget:

    Cheers!
    Sebastiaan

  • edited 9:42AM

    Thanks for this Sebastiaan! I've managed to get it working before your response. I ended up closing the while loop and basically ended up driving the stimuli through the same inline script. Thanks for your advice :)

Sign In or Register to comment.

agen judi bola , sportbook, casino, togel, number game, singapore, tangkas, basket, slot, poker, dominoqq, agen bola. Semua permainan bisa dimainkan hanya dengan 1 ID. minimal deposit 50.000 ,- bonus cashback hingga 10% , diskon togel hingga 66% bisa bermain di android dan IOS kapanpun dan dimana pun. poker , bandarq , aduq, domino qq , dominobet. Semua permainan bisa dimainkan hanya dengan 1 ID. minimal deposit 10.000 ,- bonus turnover 0.5% dan bonus referral 20%. Bonus - bonus yang dihadirkan bisa terbilang cukup tinggi dan memuaskan, anda hanya perlu memasang pada situs yang memberikan bursa pasaran terbaik yaitu http://45.77.173.118/ Bola168. Situs penyedia segala jenis permainan poker online kini semakin banyak ditemukan di Internet, salah satunya TahunQQ merupakan situs Agen Judi Domino66 Dan BandarQ Terpercaya yang mampu memberikan banyak provit bagi bettornya. Permainan Yang Di Sediakan Dewi365 Juga sangat banyak Dan menarik dan Peluang untuk memenangkan Taruhan Judi online ini juga sangat mudah . Mainkan Segera Taruhan Sportbook anda bersama Agen Judi Bola Bersama Dewi365 Kemenangan Anda Berapa pun akan Terbayarkan. Tersedia 9 macam permainan seru yang bisa kamu mainkan hanya di dalam 1 ID saja. Permainan seru yang tersedia seperti Poker, Domino QQ Dan juga BandarQ Online. Semuanya tersedia lengkap hanya di ABGQQ. Situs ABGQQ sangat mudah dimenangkan, kamu juga akan mendapatkan mega bonus dan setiap pemain berhak mendapatkan cashback mingguan. ABGQQ juga telah diakui sebagai Bandar Domino Online yang menjamin sistem FAIR PLAY disetiap permainan yang bisa dimainkan dengan deposit minimal hanya Rp.25.000. DEWI365 adalah Bandar Judi Bola Terpercaya & resmi dan terpercaya di indonesia. Situs judi bola ini menyediakan fasilitas bagi anda untuk dapat bermain memainkan permainan judi bola. Didalam situs ini memiliki berbagai permainan taruhan bola terlengkap seperti Sbobet, yang membuat DEWI365 menjadi situs judi bola terbaik dan terpercaya di Indonesia. Tentunya sebagai situs yang bertugas sebagai Bandar Poker Online pastinya akan berusaha untuk menjaga semua informasi dan keamanan yang terdapat di POKERQQ13. Kotakqq adalah situs Judi Poker Online Terpercayayang menyediakan 9 jenis permainan sakong online, dominoqq, domino99, bandarq, bandar ceme, aduq, poker online, bandar poker, balak66, perang baccarat, dan capsa susun. Dengan minimal deposit withdraw 15.000 Anda sudah bisa memainkan semua permaina pkv games di situs kami. Jackpot besar,Win rate tinggi, Fair play, PKV Games