Controllo regia ATEM 1 M/E Blackmagic

Buongiorno a tutti, sono nuovo del forum, l’obbiettivo di questo Topic è migliorare il codice da me “accrocchiato” ed aggiungerci un paio di cose.

Veniamo al concreto: ho acquistato Arduino Uno e una ethernet shield (HunRun HR911105A 16/35) per controllare una regia video della Blackmagic (ATEM Production Studio 4K – Specifiche tecniche | Blackmagic Design).
Ho già scritto uno script che pare funzionare, (premetto che arduino e il suo linguaggio di programmazione li conosco davvero poco) l’obbiettivo come dicevo è di ottimizzarlo e portarlo su un Arduino Mega in quanto i pin digitali non mi bastano per l’intero progetto.

Il codice è questo:

/*****************
 * Example: ATEM Basic Control
 * Connects to the Atem Switcher and outputs changes to Preview and Program on the Serial monitor (at 9600 baud)
 * Uses digital inputs 2 and 3 (active High) to select input 1 and 2 on Preview Bus
 * Uses digital input 7 (active High) to "Cut" (Preview and Program swaps)
 * Uses digital outputs 4 and 5 for Tally LEDs for input 1 and 2 (Active LOW)
 * See file "Breadboard circuit for ATEM basic control.pdf" for suggested breadboard schematics (find it under ATEM/examples/ATEMbasicControl/ in this library)
 *
 * - kasper
 */
/*****************
 * TO MAKE THIS EXAMPLE WORK:
 * - You must have an Arduino with Ethernet Shield (or compatible such as "Arduino Ethernet", http://arduino.cc/en/Main/ArduinoBoardEthernet)
 * - You must have an Atem Switcher connected to the same network as the Arduino - and you should have it working with the desktop software
 * - You must make specific set ups in the below lines where the comment "// SETUP" is found!
 */





#include <SPI.h>         // needed for Arduino versions later than 0018
#include <Ethernet.h>


// MAC address and IP address for this *particular* Ethernet Shield!
// MAC address is printed on the shield
// IP address is an available address you choose on your subnet where the switcher is also present:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xE8, 0xE9 };		// <= SETUP
IPAddress ip(192, 168, 1, 252);				// <= SETUP


// Include ATEM library and make an instance:
#include <ATEM.h>


/*

// All related to library "SkaarhojUtils". Used for "T-bar" potentiometer:
#include "SkaarhojUtils.h"
SkaarhojUtils utils;

*/


// Connect to an ATEM switcher on this address and using this local port:
// The port number is chosen randomly among high numbers.
ATEM AtemSwitcher(IPAddress(192, 168, 1, 250), 5);  // <= SETUP (the IP address of the ATEM switcher)






// All related to library "SkaarhojUtils". Used for "T-bar" potentiometer:
#include "SkaarhojUtils.h"
SkaarhojUtils utils;

//Assegnazione pin controllo
int CL = 8;

void setup() { 

    // Set up pins for 
  pinMode(7, INPUT);  // Cut
  pinMode(2, INPUT);  // Select 4 for Preview
  pinMode(3, INPUT);  // Select 5 for Preview
  pinMode(4, OUTPUT);  // LED: 4 is on Program (Tally)
  pinMode(5, OUTPUT);  // LED: 5 is on Program (Tally)
  pinMode(CL, OUTPUT);  // LED: Connessione attiva

/*

    //slider potenziometro
    utils.uniDirectionalSlider_init(10, 25, 25, A0);  // These 4 arguments are the default arguments given, if you call the function without any. See the library SkaarhojUtils for more info on what they are for.

*/
    
  // Start the Ethernet, Serial (debugging) and UDP:
  Ethernet.begin(mac,ip);
  Serial.begin(9600);  

  // Initialize a connection to the switcher:
  AtemSwitcher.serialOutput(true);
  AtemSwitcher.connect();
}

// For pushButtons:
int pushButton = 0;


bool AtemOnline = false;

void loop() {

  // Check for packets, respond to them etc. Keeping the connection alive!
  AtemSwitcher.runLoop();

  // If connection is gone, try to reconnect:
  if (AtemSwitcher.isConnectionTimedOut())  {
    if (AtemOnline)  {
      AtemOnline = false;
      digitalWrite(CL, LOW);
    }
  AtemSwitcher.connect();
  }

  // If the switcher has been initialized:
  if (AtemSwitcher.hasInitialized())  {
    if (!AtemOnline)  {
      AtemOnline = true;
      digitalWrite(CL, HIGH);
    }
  }
  

    // Write the Tally LEDS:
  digitalWrite(4, AtemSwitcher.getProgramTally(4));
  digitalWrite(5, AtemSwitcher.getProgramTally(5));
  
  if (digitalRead(2))  {
    if (pushButton !=2)  {
      pushButton=2;
      Serial.println("Program 4");
      AtemSwitcher.changeProgramInput(4);
    }
  } else if (pushButton==2) {
    pushButton = 0; 
  }
  if (digitalRead(3))  {
    if (pushButton !=3)  {
      pushButton=3;
      Serial.println("Program 5");
      AtemSwitcher.changeProgramInput(5);
    }
  } else if (pushButton==3) {
    pushButton = 0; 
  }
  if (digitalRead(7))  {
    if (pushButton !=7)  {
      pushButton=7;
      Serial.println("Cut");
      AtemSwitcher.doCut();
    }
  } else if (pushButton==7) {
    pushButton = 0; 
  }

}

E’ evidente che è stato copiato da un preset fornito da skaarhoj.com che a quanto ho capito ha anche realizzato le librerie necessarie(?)
Quello che ho fatto è modificare il loro script base, che davano negli esempi della libreria, aggiungendo un sistema di riconnessione in caso il cavo di rete venisse scollegato. Ho anche aggiunte un led che indica se il collegamento con la regia c’è o meno.
Attualmente il circuito è questo
Quando avrò Arduino Mega metterò 4 Pulsanti che faranno la funzione di Preview + 4 pulsanti Program + 1 pulsante cut + 1 pulsante auto transition + 4 led tally per le camere + 1 led che visualizzi lo stato della connessione con la regia.

Le domande sono:
Una volta che acquisto Arduino Mega e monto la stessa shield ethernet posso utilizzarlo come Arduino Uno?
Ci sono stringhe di codice superflue?
Il circuito è corretto?

Volevo accertarmi di tutto per poi andare a saldare i componenti e racchiudere tutto in una scatola con pulsanti esterni.

Un’altra cosa che mi piacerebbe implementare sarebbe la scrittura dell’indirizzo ip della scheda e l’ip della regia in un file .txt salvato in una micro SD nella shield ethernet in modo da modificarlo più semplicemente.
Però questa cosa non saprei proprio come implementarla.

Ringrazio in anticipo chi sarà così gentile da darmi una mano :slight_smile:

Buona sera,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO … Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

... dopo che avrai fatto quanto su richiesto ... metti un link alla scheda ethernet che stai usando perché così, anche noi, capiamo esattamente che prodotto stai utilizzando :wink:

Guglielmo

una ethernet shield (HunRun HR911105A 16/35)

Presentati e poi dacci informazioni piú utili riguardante la scheda Ethernet. Quella sigla é il codice del connettore J45.
Ciao Uwe

Scusate, avevo scordato di presentarmi.

La scheda ethernet è questa: https://www.amazon.it/gp/product/B01C2Q70A2/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1

Stando a quanto serigrafato su quella scheda è ... Mega Compatibile, quindi non dovresti avere problemi, dovrebbe comportarsi allo stesso modo.

Guglielmo

Ok! Riguardo i valori delle resistenze? sono corretti? Ho messo 1K ohm per lo “scarico a terra” dei pulsanti e 220k ohm per i led. Mi consigliate valori diversi?

Ho messo 1K ohm per lo "scarico a terra" dei pulsanti e 220k ohm per i led.

????

brunello22:
????

:cry: non ho capito se ho scritto una boiata o se non hai capito cosa ho scritto

paolo8997:
:cry: non ho capito se ho scritto una boiata o se non hai capito cosa ho scritto

Emmm ...
...probabilmente l'uso dei "termini" NON è esattamente quello più "tecnicamente corretto" e comprensibile ... :wink:

Prova a spiegare bene quello che volevi dire, magari facendo anche un piccolo disegnino ... ::slight_smile:

Guglielmo

220K per un led è un valore un pò troppo "altino"
Così come 1K per " lo scarico a terra" è un valore un pò basso

gpb01:
Prova a spiegare bene quello che volevi dire, magari facendo anche un piccolo disegnino ... ::slight_smile:

Il disegno del circuito l'ho inserito all'inizio

brunello22:
220K per un led è un valore un pò troppo "altino"
Così come 1K per " lo scarico a terra" è un valore un pò basso

Ci sono dei valori standard? So che per i led varia anche in base al colore perciò penso seguirò queste indicazioni:

La caduta di tensione ai capi del LED varia in funzione del colore:

colore rosso: 1,8 V
colore giallo: 1,9 V
colore verde: 2,0 V
colore arancio: 2,0 V
colore blu: 3,0 V
colore bianco: 3,0 V
Per calcolare la resistenza R serie bisogna utilizzare la seguente formula:

R = (Vpin – V)/I

Per quanto riguardo "lo scarico a terra" (scusate continuo a chiamarlo così perchè non so come spiegarlo, sarebbe l'uscita dei 3 bottoni che con una resistenza va a massa) che valore mi consigli di utilizzare e perchè?

Per quanto riguardo "lo scarico a terra" ......... che valore mi consigli di utilizzare e perchè?

Come resistenza di PullDown 8 ma è valido anche per una di PullUp ) in genere si usa una 10K
Perchè il valore di 1K consuma solo corrente ( I=V/R )

Per la resistenza sul Led, ok alla formula.
E se fai un calcolo vedi che ad esempio ottieni per un led rosso 220 Ohm, non 220K Ohm

hello paolo8997Newbie

can you make 8 program button

8 preview button , 1 cut , 1 auto button , and 1 t ber

what is the code . with arduino mega

pleas let me know

hello dear how can i made 8 program , 8 preview, 1 cut , 1 auto button and 1 t bar. pleassss help me .

@live360bd

Hi, you are on Italian section of the forum, I don't believe you can have answer if you're not able to write italian language,

Ciao sono del Bangladesh. sono un videoeditor online. penso che io possa scrivere la lingua italiana, mi aiuti aiutarmi. non sono un esperto sul codice del programma. ma se mi aiuti posso costruire il mio progetto del mio hobby. Grazie