serialRead
Prev | Orchestra Opcodes and Operators | Next

## serialRead

serialRead — Read data from a serial port.

## Description

Plugin opcode in serial.

Read data from a serial port for arduino.

## Syntax

    kByte serialRead iPort

## Performance

iPort -- port number optained from a serialBegin opcode.

kByte -- a byte of data to read.

## Examples

Here is an example of the serialRead opcode. It uses the file serialRead.csd.

Example 954. Example of the serialRead opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    -n  ;;;no output
    ;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o serialRead.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr  = 44100
    ksmps = 500 ; the default krate can be too fast for the arduino to handle
    nchnls = 2
    0dbfs  = 1

    instr 1

    iPort serialBegin "/dev/cu.usbmodemfa131", 9600			;connect to the arduino with baudrate = 9600

    kGain init 16							;read our knob value
    kVal serialRead iPort
    if (kVal != -1) then
        kGain = kVal/128
    endif

    aSig in								;get our audio input and get its rms
    kRms rms aSig*kGain

    kRms = kRms*kRms*255						;scale the rms to a good value for the LED and send it out
    serialWrite iPort, (kRms < 255 ? kRms : 255)			;must be in range: 0-255

    endin
    </CsInstruments>
    <CsScore>
    f 1 0 1024 10 1 1 1 1 1 1

    i 1 0 200
    e
    </CsScore>
    </CsoundSynthesizer>

This is the matching Arduino code :

    void setup() {
      // enable serial communication
      Serial.begin(9600);

      // declare pin 9 to be an output:
      pinMode(9, OUTPUT);
    }

    void loop() {
      // only do something if we received something (this should be at csound's k-rate)
      if (Serial.available()) {
        // set the brightness of LED (connected to pin 9) to our input value
        int brightness = Serial.read();
        analogWrite(9, brightness);

        // while we are here, get our knob value and send it to csound
        int sensorValue = analogRead(A0);
        Serial.write(sensorValue/4); // scale to 1-byte range (0-255)
      }
    }
    .....

## See Also

serialBegin, serialEnd, serialWrite_i, serialWrite, serialPrint, serialFlush.

## Credits

Author: Matt Ingalls
2011

New in version 5.14

Prev | Up | Next
serialPrint | Home | serialWrite_i