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();
}