arduinoRead
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

## arduinoRead

arduinoRead — Lit des données depuis un port arduino avec le protocole Csound-Arduino.

## Description

Opcode du greffon serial.

Lit des données entières depuis un port arduino avec le protocole Csound-Arduino.

## Syntaxe

    kval arduinoRead iPort, iStream[, iSmooth]

## Exécution

iPort -- Numéro de port obtenu d'un opcode arduinoStart.

iStream -- Numéro du flot de données compris entre 0 et 30.

iSmooth -- Mi-durée d'un filtre de portamento pour lisser le flot de données. La valeur 0 par défaut signifie pas de filtrage.

kval -- Données à lire dans l'intervalle [0, 1023].

## Exemples

Voici un exemple de l'opcode arduinoRead. Il utilise le fichier arduinoRead.csd.

Exemple 58. Exemple de l'opcode arduinoRead.

Voir les sections Audio en temps réel et Options de la ligne de commande pour plus d'information sur l'utilisation des options de la ligne de commande.

    Arduino-Joystick2Csound1g-fm1-port (version with smoothing)

    - Push Joystick button to turn on note
    - Use JoystickX to offset and control the modulation index of
      the foscil opcode from 0-40 via the scale opcode
    - Use JoystickY to offset and control the Frequency of the foscil
      opcode up/down two octaves via the scale opcode

    <CsoundSynthesizer>

    <CsInstruments>

    sr = 44100
    ksmps = 441
    nchnls = 2
    0dbfs = 1

    giport init 0

    // NOTE: change USB port "/dev/cu.usbmodem1414301" to correspond
    //       with USB port used by Arduino on your system
    giport arduinoStart  "//dev/ttyACM0", 9600    // for GNULinux

    instr 1

     kY  arduinoRead giport, 1 ; Joystick Y
     kX  arduinoRead giport, 2 ; Joystick X
     kSW arduinoRead giport, 3 ; Joystick Button/Switch

    kAmp  init 0
    kFreq init 0
    kIndx init 1

    kXraw = kX
    kX port kXraw, .02  // smoothed kY stream
    kYraw = kY
    kY port kYraw, .02  // smoothed kY stream

    kYscaled scale kY, 400, 100, 1023, 0 ; scaling the raw sensor
                                         ; data to a user-defined
                                         ; range of (100-400)
    kXscaled scale kX, 40, 0, 1023, 0    ; scaling the raw sensor
                                         ; data to a user-defined
                                         ; range of (0-40)

    	if(kSW == 1) then
    		kAmp = .333
    	elseif(kSW == 0) then
    		kAmp = 0
    	endif

     aOut	foscil 1, kFreq + kYscaled, 1, 1, kIndx + kXscaled, 1

    	 		outs	aOut * kAmp, aOut * kAmp

    printks "Button=%d, RawX=%d, ScaleX=%d, RawY=%d, ScaleY=%d \\n", \
                .5, kSW, kX, kXscaled, kY, kYscaled

     endin

    </CsInstruments>

    <CsScore>

    f 1 0 16384 10 1

    i 1 0 z

    e

    </CsScore>

    </CsoundSynthesizer>

    <arduinoSketch>
    // Joystick Example

    // John ffitch & Richard Boulanger
    // June 11, 2020

    // BreadBoard & Arduino Setup

    // Insert the Joystick Controller into the breadboard
    // NOTE:  Joystick Pins (in order from left to right) are:
               GND, 5V, vrX, vrY, SW
    // Connect the power rails on breadboard to 5V and GND on Arduino
    // Connect GND and 5V from Joystick to + and - power rails on
    //         the breadboard
    // Connect Joystick vrX on breadboard to Analog In A0 on the Arduino
    // Connect Joystick vrY on breadboard to Analog In A1 on the Arduino
    // Connect Joystick SW on breadboard to Digital Pin 2 on Arduino

    // Arduino pin numbers
    // Note: Because of the way that the Joystick stands up in a
    //       breadboard, in this example the vrX and vrY have been swapped.

    const int SW_pin = 2; // Joystick switch output connected to
                          //   Arduino digital pin 2
    const int Y_pin = 0;  // Joystick Y output connected to Arduino
                          //   analog pin A0
    const int X_pin = 1;  // Joystick X output connected to Arduino
                          //   analog pin A1

    int lastState_SW_pin = 1;
    int currentState_SW_pin;

    void setup() {
                  // NOTE: Digital pins can be either inputs or outputs.
      pinMode(SW_pin, INPUT_PULLUP); // Setting digital pin to input mode
                                     // and using onboard pullup resistor
                                     // to reduce noise.

      Serial.begin(9600);
    }

    // put_val( ) - a function to send data values to the Csound
    //              "arduinoRead" opcode
    // The first argument of the put_val function "int senChan" sets
    // the software channel number that Csound reads
    // NOTE: "senChan" does "not" define the input pin that is used on
    // the Arduino for a specific sensor
    // The specific Arduino input pin used by any sensor is assigned
    // and set elsewhere in the Arduino sketch and mapped to a
    // user-defined put_val "senChan" channel

    void put_val(int senChan, int senVal)
            // Set the Csound receive channel "senChan", and read from
            // the sensor data stream "senVal"
    {       // The packing of the data is sssssvvv 0vvvvvvv where s is a
            // senChan bit, v a senVal bit and 0 is zero` bit
      int low = senVal&0x7f;
      int hi = ((senVal>>7)&0x0f) | ((senChan&0x0f)<<4);
      Serial.write(low); Serial.write(hi);
    }

    void loop() {

       Serial.write(0xf8);

       int currentState_SW_pin = digitalRead(SW_pin); // reading digital
                                                      // input 2 and
                                                      // assigning it to
                                                      // "currentState..."

      if (currentState_SW_pin != lastState_SW_pin)
      {                           // checking if the value has changed
        if (currentState_SW_pin == 1)
        {
          put_val(3,0); // In this sketch, the Joystick button,
                        //in Arduino digital pin 2, is sending a 0 or 1
                        // to Csound arduinoRead channel 3
        }
        else
        {
          put_val(3,1);
        }
      }

      lastState_SW_pin = currentState_SW_pin;

      int X = analogRead(X_pin); // reading the Joystick vrX data
                                 //  (0-1023) and asigning to X
        put_val(2,X);            // In this sketch, the Joystick vrX,
                                 // in Arduino analog pin A1, is sending
                                 // a 0-1023 to Csound arduinoRead channel 2

      int Y = analogRead(Y_pin); // reading the Joystick vrY data
                                 // (0-1023) and asigning to Y
        put_val(1,Y);            // In this sketch, the Joystick vrY,
                                 // in Arduino analog pin A0, is sending
                                 // a 0-1023 to Csound arduinoRead channel 1

      delay(10);

    }

    </arduinoSketch>

## Voir aussi

arduinoStart, arduinoStop,

## Crédits

Auteur : John ffitch
Auteur : Richard Boulanger
2020

Nouveau dans la version 6.15

Précédent | Niveau supérieur | Suivant
apoleparams | Sommaire | arduinoReadF