# Gestione osservatorio astronomico, scheda switch con ASCOM ALPACA

**URL:** <https://forum.arduino.cc/t/gestione-osservatorio-astronomico-scheda-switch-con-ascom-alpaca/1458063>\
**Category:** Software\
**Created:** [September 2, 2026, 4:07pm UTC](https://forum.arduino.cc/t/gestione-osservatorio-astronomico-scheda-switch-con-ascom-alpaca/1458063 "2026-09-02T16:07:37Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![eferriani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/eferriani/32/1099003_2.png) [@eferriani](https://forum.arduino.cc/u/eferriani)\
**Post date:** [September 2, 2026, 4:07pm UTC](https://forum.arduino.cc/t/gestione-osservatorio-astronomico-scheda-switch-con-ascom-alpaca/1458063/1 "2026-09-02T16:07:37Z")

</div>

Secondo voi riesco a far comparire i nomi che pare a me negli switch su NINA intervenendo sul codice? Non trovo il modo ammesso che ci sia.  
Il mio dubbio è che venga definito nel driver.

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/3/6/b/36b4dcbee9680556361b871f494dbeaac4c50301.png)

```arduino
// 30/08/2026
// D:\Lavori\ARDUINO\OSSERVATORIO_TEST\SWITCH_00
// https://github.com/Tigra-Astronomy/TA.ArduinoPowerController.AscomServer/tree/master

// Driver 

// xx/xx/2026: 

// Command reference
// 
// :{S|R}{relaynum 0-7}{1=on, 0=off}#
// eg. :S00# = Set Relay 0 to OFF
// eg. :S01# = Set Relay 0 to ON
// eg. :R0# = Read status of relay 1, returns 0=Off, 1=On 

// Tigra Astronomy
// Arduino code in controlling 8 relay switches

void SerialReceive();

const int SerialBufferSize = 6;
int relayArray [8] = {2, 3, 4, 5, 6, 7, 8, 9};
enum SerialState {start, wait, receive};
enum SerialState currentState = start;
char receiveBuffer [SerialBufferSize];
int bufferPosition = 0;
enum SerialState lastState = start;

// As per original sketch
//const int digital_on = 0;
//const int digital_off = 1;

// to handle relays which are reversed, swap these around eg XC-4418 (https://www.jaycar.com.au/medias/sys_master/images/images/9403712995358/XC4418-dataSheetMain.pdf)
const int digital_on = 1;
const int digital_off = 0;

void setup()
{
  // put your setup code here, to run once:

  for (int i = 0; i < 8; i++)
  {
    digitalWrite(relayArray[i],digital_off); // switch off relays by default
    pinMode(relayArray[i], OUTPUT);
  }
}

void loop()
{
  SerialStateMachine();
}

int DigitalReadOutputPin(int pin)
{
  int bit = digitalPinToBitMask(pin);
  int port = digitalPinToPort(pin);
  if (port == NOT_A_PIN)
    return -1;
  return (*portOutputRegister(port) & bit) ? 0 : 1;
}

char ReadOneChar()
{
    if (Serial.available() == 0)
    return 0;
    char rxByte = Serial.read();
    //Serial.println(rxByte);
    return rxByte;
}

void testMode()
{
  for (int i = 0; i < 8; i++) //turn relays on
  {
    WriteRelayPin(relayArray[i], digital_on);
    delay (250);
  }

  for (int i = 0; i < 8; i++) //turn relays off
  {
    WriteRelayPin(relayArray[i], digital_off);
    delay (250);
  }
}

void SerialStateMachine()
{
  // if (currentState != lastState)
  // {
  // Serial.print("State ");
  // Serial.println(currentState);
  // }

  lastState = currentState;
  switch (currentState)
  {
    case start: SerialStart();
      break;
    case wait: SerialWait();
      break;
    case receive: SerialReceive();
      break;
  }
}

void SerialStart()
{
  ClearBuffer();
  Serial.begin(9600);
  currentState = wait;
  // Serial.println("SerialStart Initiated");
}

void ClearBuffer()
{
  bufferPosition = 0;
  for (int i =0; i < SerialBufferSize; i++)
  {
    receiveBuffer[i] = 0;
  }
}

void SerialWait()
{
  char rxByte = ReadOneChar();
 
  if (rxByte != ':')
    return;
  ClearBuffer();
  currentState = receive;
}

void SerialReceive()
{
  char rxByte = ReadOneChar();
  switch (rxByte)
  {
    case ':': 
      ClearBuffer();
      break;
    case '#':
      InterpretCommand();
      break;
    case 0:
      return;
    default:
      receiveBuffer[bufferPosition++] = rxByte;
      break;
  }
}

void SendRelayStatus(int relay,int relayStatus)
{
  Serial.print(':');
  Serial.print(receiveBuffer[0]);
  Serial.print(relay);
  Serial.print(relayStatus);
  Serial.print('#');
}

int GetRelayNumber()
{
  char relay = receiveBuffer[1];
  if (relay <'0' || relay > '7')
  {
    Serial.println("Bad relay number");
    return -1;
  }
  int relayNumber = relay - '0';
  return relayNumber;
}

void DoReadCommand()
{
  if (bufferPosition != 2)
  {
    Serial.println("Wrong number of characters");
    return;
  }
  int relay = GetRelayNumber();
  if (relay <0) return;
  int relayStatus = DigitalReadOutputPin(relayArray[relay]); 
  SendRelayStatus(relay,relayStatus);
  }

void WriteRelayPin(int relayPin, int relayValue)
{
  digitalWrite(relayPin, relayValue == digital_on ? digital_on : digital_off);
}

void DoSetCommand()
{
  if (bufferPosition != 3)
  {
    Serial.println("Wrong number of characters");
    return;
  }
  int relay = GetRelayNumber();
  if (relay <0) return;
  int relayPin = relayArray[relay];
  int onOffCommand = receiveBuffer[2];
  if (onOffCommand <'0' || onOffCommand > '1')
  {
    Serial.println("Bad data");
    return;
  }

  //int relayValue = onOffCommand - '0';
  int relayValue;
  if (onOffCommand == '0' ? relayValue = digital_off : relayValue = digital_on);
  
  WriteRelayPin(relayPin, relayValue);
  SendRelayStatus(relay,relayValue);
  }

void InterpretCommand()
{
  // Serial.print("Received ");
  // Serial.println(receiveBuffer);
  switch (receiveBuffer[0])
  {
    case 's':
    case 'S':
      DoSetCommand();
      break;
    case 'r': 
    case 'R':
      DoReadCommand();
      break;
    default:
      Serial.println("Bad command");
  }
}
  

```

---

<div class="post-metadata">

**Author:** ![kmin](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kmin/32/1147370_2.png) [@kmin](https://forum.arduino.cc/u/kmin)\
**Post date:** [September 3, 2026, 12:44pm UTC](https://forum.arduino.cc/t/gestione-osservatorio-astronomico-scheda-switch-con-ascom-alpaca/1458063/2 "2026-09-03T12:44:27Z")

</div>

No, sketch sopra non fa parte di UI.

---

<div class="post-metadata">

**Author:** ![eferriani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/eferriani/32/1099003_2.png) [@eferriani](https://forum.arduino.cc/u/eferriani)\
**Post date:** [September 3, 2026, 1:50pm UTC](https://forum.arduino.cc/t/gestione-osservatorio-astronomico-scheda-switch-con-ascom-alpaca/1458063/3 "2026-09-03T13:50:32Z")

</div>

Scusa, non si capisce.  
Ho incollato una schermata di NINA. Ho sbagliato?  
Magari non si può, me lo sono perso per strada.

Oppure intendevi altro?

---

<div class="post-metadata">

**Author:** ![kmin](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kmin/32/1147370_2.png) [@kmin](https://forum.arduino.cc/u/kmin)\
**Post date:** [September 3, 2026, 1:56pm UTC](https://forum.arduino.cc/t/gestione-osservatorio-astronomico-scheda-switch-con-ascom-alpaca/1458063/4 "2026-09-03T13:56:49Z")

</div>

Intendevo che sketch che hai postato non occupa per interfaccia utente, solo comunicazione seriale e controllo relay.

---

<div class="post-metadata">

**Author:** ![eferriani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/eferriani/32/1099003_2.png) [@eferriani](https://forum.arduino.cc/u/eferriani)\
**Post date:** [September 4, 2026, 7:00am UTC](https://forum.arduino.cc/t/gestione-osservatorio-astronomico-scheda-switch-con-ascom-alpaca/1458063/5 "2026-09-04T07:00:54Z")

</div>

Come pensavo, quindi si tratta del driver. Quello non sono in grado di personalizzarlo. Magari qualcuno qua lo conosce...chissà.  
Peccato.

---

<div class="post-metadata">

**Author:** ![eferriani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/eferriani/32/1099003_2.png) [@eferriani](https://forum.arduino.cc/u/eferriani)\
**Post date:** [October 18, 2026, 1:57pm UTC](https://forum.arduino.cc/t/gestione-osservatorio-astronomico-scheda-switch-con-ascom-alpaca/1458063/6 "2026-10-18T13:57:57Z")

</div>

Trovato, o meglio ci ho guardato quando ho avuto tempo.

Bastava andare nell'interfaccia gestionale di ASCOM, ProfileExplorer, e cambiare nella stringa la stringa relativa al singolo output.

Ovvero, nella riga "Switch Name" di questa tabella:

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/0/6/5/065e609c829aa0f6392aa7a625295cfa187e202a.png)

scorrendo la riga verso destra (prima non ci avevo guardato) trovate i vari nomi "Switch N" , li sostituite con quello che vi pare.  
Se copiate la riga e le incollate in un file di testo è così strutturata

\<?xml version="1.0" encoding="utf-16"?\> Switch 0 Switch 1 Switch 2 Switch 3 Switch 4 Switch 5 Switch 6 Switch 7

Questo un esempio:

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/8/b/4/8b435c4fa77c9e62007396a2e4a496c0779da019.png)

Per chi fosse interessato metto anche una sequenza di test per NINA, e verificare che quanto avete installato funzioni a modo.

[Test\_8\_Switch.json](https://forum.arduino.cc/uploads/short-url/bbJgAcvkZsUhfsdA34G9iMkgNSl.json) (15,8 KB)
