Opta Expansion analog Volt einstellen

Hallo, ich habe Opta mit 1xanalog Expansion und 2xdigital Expansion.
Programmierung per IDE. Die digitalen lassen sich alle schalten. Die Analogen Ausgänge will ich auf verschiedene Volt einstellen. Die Werte werden aber nicht übertragen/angenommen.

#include "OptaBlue.h"
#include <ArduinoRS485.h>

using namespace Opta;
DigitalStSolidExpansion Exp_1;
DigitalStSolidExpansion Exp_2;
AnalogExpansion Exp_analog;


// Geschwindigkeit, zuerst Expand Anschluss, dann Voltzahl
uint16_t Mot_volt[8][2]={{0,5000},{1,2000},{2,3000},{3,4000},{4,5000},{5,6000},{6,7000},{7,8000}};


int Agg_change;    //Nr. Aggregat dessen Zustand verändert wird


// ---------------------------------------------------
void analog_setzen(int aggnr)
{
      static uint16_t dac_value = 0;
      static uint16_t dac_value2 = 5000;
      dac_value = Mot_volt[aggnr][1];
      //Exp_analog = OptaController.getExpansion(0);
      //  Serial.println("Setting " +  Mot_volt[port][1]);
      //if (Exp_analog) {
                
          Exp_analog.setDac(Mot_volt[aggnr][0], dac_value);    // 1. Anschluss 2.neue Spannung
          //Exp_analog.setDac(OA_CH_7, dac_value2); 
          Exp_analog.updateAnalogOutputs();     //alle neuen Werte schreiben
          Serial.println("Setting dac value " + String(dac_value) + " on expansion n. " + String(Exp_analog.getIndex())+ " onPort "+Mot_volt[aggnr][0]);
        //OptaController.update();

      //}
  
}



// -------------------------------------------------------------
void anweisung_verarbeiten()
// erste Zahl gibt Aggregat an, 2.Zahl für Parameter, 3.Zahl für Wert
{
  if (anweisung[0]>0)      //Anweisung vorhanden, erste Zahl gibt Aggregat an
  {
    Agg_change=anweisung[0]-1;

    switch (anweisung[1])     //welcher Parameter 
    {
      case 1:                 //An/aus
            {
                Motor_anaus(Agg_change, anweisung[2]);       //Motor an oder ausschalten
                
            }
            break;
      case 2:               // Geschwindigkeit
            {
                  Mot_volt[Agg_change][1]=anweisung[2]*1000; //neue Geschwindigkeit eintragen
                  analog_setzen(Agg_change);
            }
            break;
      case 3:               // Tastung ein/aus
            {
                Tastung_anaus(anweisung[0]-1, anweisung[2]);
            } break;

    }
    anweisung_nullsetzen();
  }

}

//------------------------------------------SETUP----------------------------------------------------------
void setup() 
{
  
  OptaController.begin();
  Exp_1= OptaController.getExpansion(1);
  Exp_2 = OptaController.getExpansion(2);
      
    for (int ch = 0; ch < OA_AN_CHANNELS_NUM; ch++) {
      /* odd channel are configured as voltage DAC */
          AnalogExpansion:Exp_analog.beginChannelAsDac(OptaController,

                                         0,
                                         ch,
                                         OA_VOLTAGE_DAC,
                                         true,
                                         false,
                                         OA_SLEW_RATE_0);
  }
Exp_analog = OptaController.getExpansion(0);


//Geschwindigkeiten Frequenzumformer setzen auf Standardwert lt. Deklaration
        
      for (int i=0;i<OA_AN_CHANNELS_NUM;i++)     
        {
          analog_setzen(i);
          delay(100);   
        }
  OptaController.update();

}



//------------------------------------ LOOP ---------------------------------------------------------------

void loop() 
{
rs485_lesen();
anweisung_verarbeiten();
 

}

Vieleicht solltest Du Deim Problem auf Englisch im Teil des Forums für OPTA veröffentlichen.

Dort tummeln sich mehr User die OPTA verwenden.
Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.