^^ crow 2.0+ help: general (connectivity, device q’s, ecosystem)

Welcome to modular! One of the main draws for me was also to leave the screen behind, but I am a true nerd at heart so I had to have Teletype as soon as I learned about it. I actually have both Teletype and Crow.

The way I have them setup is Teletype connected to Ansible and Crow is connected to Just Friends and w/.

I’ll give you my 2 cents about them.

Teletype is great because you can program it without a computer, just need a keyboard. However, the only real way to trigger anything to happen is via external triggers or internal metronome (timer). So you can’t have it react to subtle voltage changes like Crow can. For me, Teletype is beautifully restrictive device, with its ~10 scripts, 6 lines per script. It kind of forces you to focus on exactly what you want it to do. Coming from other programming languages, the Teletype language took a bit of getting used to. Nothing too bad, just a learning curve.

Crow on the other hand, you need a computer to code it, but you have a full Lua runtime. Crow only has 2 inputs and 4 outputs, but you can use them however you want. You can have the inputs listen for triggers, gates or even subtle voltage changes. With ASL (a slope language) outputs can easily be a trigger or envelope. Also, it’s only 2hp. Crow can only contain 1 script at a time (as far as I know), where as Teletype can hold up to 32 that you can choose from using the button and knob on the face.

So, why do I have both? Because I’m a nerd that can’t get away from coding. But honestly, they’re both really cool. If money and rack space are more important right now, maybe go with a Crow. You can always add a Teletype later. :slight_smile:

Hope this helps some. If you have specific questions, feel free to ask.


@jakecarter Thanks so much for your elaborate thoughts!

After your comments I am very much leaning towards getting a Crow indeed- the Teletype seems a bit big for my case at the moment, and I could just as well keep a laptop around to edit scripts instead of a keyboard. I also think the outputs will be plenty as I will primarily use it to drive Just Friends and 2x W/.
The only problem is that the Crow is currently unavailable, but at least that gives me something to look forward to :wink:

I’m still looking for experiences of people who set up a script on Crow for performance- so defining a “composed” or “comprovised” structure for example! Let me know! I will also read through this topic :slight_smile:

1 Like

this question might be silly, but since i’m quite new to i2c i thought i’d ask just in case i’m missing something:
can crow “multitask”, running both an uploaded script and acting out i2c duties at the same time? my assumption is no, but i could not find a definite answer.

i gave it a test by simply uploading a script to crow via druid, checked that it was running properly, then swapped the crow usb-cable from my laptop to norns and loaded less concepts 3. script was still running, but as soon as a set a lc3 voice to jf the script stopped running. does this in effect do the same thing as loading a new script to the crow memory?

is this a hardware limitation of crow, or would it be possible to enable script + i2c multitasking in software somehow? i know crow only runs one script at a time, but could i combine i2c communication with some type of cv generation on the crow outputs into one script? are there perhaps already norns scripts that does this? thanks!

Certainly, crow continues to accept and evaluate Lua commands sent to it whether a script is uploaded or not.

However when norns detects that a crow has been connected, it sends a crow.reset() Lua command to crow, which clears all of crow’s metros and input handlers so on. This ensures that crow is in a known, idle state for norns scripts to send commands to it – the way all norns scripts with crow support operate is by sending chunks of Lua to crow for crow to evaluate on the fly.

To accomplish what you want you would need a way to tell norns not to send this reset, so that your uploaded script on crow continues doing its thing when norns connects. You could probably modify Less Concepts to send your whole desired script to crow, or it might be a nice future system enhancement to have an option in the norns menu to globally toggle off this “reset crow” behavior.


i see, thank you for explaining it to me! i’ll experiment with removing the crow.reset() command in lc3 and see what happens and go from there : )

i definitely think so. while the reset is surely there for a reason, i suppose removing it might cause some reliability issues, it would make crow so much more powerful. i always feel as if those jacks on the panels are kind of missing out on all the fun when i’m only using crow as a i2c bridge.

To be clear, it is not LC3 that is sending the reset command, it’s the norns system itself


Originally we didn’t send this message and it led to a lot of confusion for norns users (a primary audience of crow). I’m currently working on a system to allow dynamic loading of crow scripts from within norns, much the same as druid does. This will have the benefit of not having to replug between a laptop & norns, plus it is explicit, avoiding the confusion when crow isn’t reset.

I think this path forward makes more sense than the old style. The primary issue with the former approach was clashes where both crow & norns were trying to use the input modes, or referring to the same metro (very common).


ah, thanks for clearing this up! dynamic loading of crow scripts directly from norns sounds rad!

hey peeps, proud new owner here. I’m trying to make a simple quantizer that talks to Just Friends over i2c.

Easy enough to quantize the analog outputs using output[n].scale but I can’t figure out how to quantize the digital output going to Just Friends.

So, input[n].scale raises an event whenever the analog input needs to be quantized. It appears to print a bunch of information to druid including the note index and the voltage. How can I “fetch” this voltage value, and send it to JF with ii.jf.play_note()?

This is probably a simple fix, but my brain is fried fgrom puzzling over it all morning :smiley: Thanks very much for any help!

edit for future googlers: The syntax I was looking for was
input[2].scale = function(v) ii.jf.play_note(v.volts, 3) end


I’m very much looking fwd to acquire a Crow- is monome.org (where its sold out) the only place to get it? :slight_smile:

new? yes. crow will be restocked in may! :bird:

1 Like

new or second hand, doesn’t matter- haven’t seen any 2nd hand ones floating by on Reverb or Modulargrid… yet!

Is it possible to get a new panel for my crow? I’ve been dealing with the ill fitting holes from the first run and finally run into a configuration that doesn’t work (can’t get both screws in). Is it advisable to try to open the holes up a bit? I’d prefer not to do this…

1 Like

I don’t see what the problem would be opening the holes with a small drillbit, it’s just a chunk of aluminum :slight_smile: but yeah, curious as well if they sell new panels.

apologies, missed these posts — we might be able to scavenge a few new faceplates for folks. for these types of service q’s, please email help@monome.org and we’ll work it out :slight_smile:

I’m having a little trouble reinstalling First.

Is there a script which can reinstall our serial number and save?

> r                                                                             
running Documents/bowery/euclidean.lua                                        
Running: euclidean rhythms                                                      
> ^^clear                                                                       
User script cleared.                                                            
No user script.                                                                 
> ^^reset                                                                       
 <crow disconnected>                                                            
 <crow connected>                                                               
> ^^first                                                                       
Using default script.                                                           
Running: First.lua                                                              
> r                                                                             
running Documents/bowery/euclidean.lua                                        
Running: euclidean rhythms                                                      

At this point, First is already running.

The r command to run a script, when run without arguments, asks Druid to re-run the previous script Druid was asked to run, so it starts running that script instead of First.


it worked! thank you so much

1 Like

My crow has stopped speaking i2c and I can’t for the life of me work out what’s caused it. I had it connected with an Ansible, Just Friends and TXi. I’m trying to isolate the issue at the moment. All are running latest firmware.

My approach is:

  • I’m trying one module at a time, eg crow → just friends or crow → ansible
  • ii.jf.trigger_channel(1,1) with just friends in transient/shape
  • ii.ansible.trigger(1,1), and ii.ansible.trigger_toggle(1)
  • I’m testing norns awake in crow/just friends mode
  • testing three different i2c cables

What I’ll probably try when I get stuck is moving to a new case.

Does anyone have any advice for solving this?

Currently I’m plugged into ansible and I’m getting hit with ii:lines are low, check ii devices… etc when running ii.ansible.trigger_pulse(1). Often it just fails silently though.

update: Moved to a new case I 100% trust, only have crow and just friends installed. Can’t get druid events to fire on just friends (It either displays the check pullups/cables message or fails silently). Norns awake using crow-jf output fails silently as well.

update2: I notice that running ^^identity or ^^version doesn’t currently work either. Just returns nothing (or doesn’t return). I’m now down to just crow in the case and working on having those commands behave as they should.

I had this as well. What solved it for me was to reduce the length of my i2c Dupont cable. I only have JF and W/ attached though.