Salve a tutti, è la prima volta che chiedo aiuto alla comunity, ho 40 anni di esperienza nella progettazione elettronica, ma solo da un paio di anni ho iniziato ad utilizzare arduino, linguaggio di programmazione ne conosco il minimo per addentrarmi. Ho realizzato una regia video per 6 videocamere, sulla regia ho messo un arduino mega 2560 e su ogni camera un arduino uno r3, per ogni camera ho un joystick quindi due potenziometri, inoltre un deviatore per lo zoom e un interruttore per la luce di rec, per cui devo trasmettere 30 valori, ma quando metto un numero superiore a 16 nelle variabili non funziona più la trasmissione-ricezione
questo è il codice di una cam (client)
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <Servo.h>
int pots[15];
int led5 = 2;
Servo servox;
Servo servoy;
void setup(){
Serial.begin(9600);
servox.attach(3);
servoy.attach(4);
Mirf.cePin = 7;
Mirf.csnPin = 8;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.channel = 1;
Mirf.setRADDR((byte *)"serv1");
Mirf.payload =sizeof(pots);
Mirf.config();
}
void loop(){
while(!Mirf.dataReady()){
}
Mirf.getData((byte *) &pots);
// delay(10);
//Mirf.getData((byte *) &butstate);
// digitalWrite(led,butstate);
//Serial.println(rate);
//Serial.println (siz);
Serial.println(pots[0]);
Serial.println(pots[1]);
servox.write(pots[0]);
servoy.write(pots[1]);
Serial.println(pots[2]);
if (pots[2] == 1){digitalWrite(led5,LOW);}
else{digitalWrite(led5, HIGH);}
delay(10);
}
e questo la regia (server)
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int timer = 100; // The higher the number, the slower the timing.
int pots[20];
int potsx1;
int potsy1;
int Zt1;
int Zw1;
int led1;
int potsx2;
int potsy2;
int Zt2;
int Zw2;
int led2;
int potsx3;
int potsy3;
int Zt3;
int Zw3;
int led3;
void setup(){
Serial.begin(9600);
int thisPin;
Mirf.cePin = 7;
Mirf.csnPin = 8;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.channel = 1;
Mirf.setRADDR((byte *)"clie1");
#define MIRF_PAYLOAD 64;
Mirf.config();
}
void loop(){ // loop from the lowest pin to the highest:
potsx1 = analogRead(A10);
potsx1 = map(potsx1, 0, 1023, 0, 180);
potsy1 = analogRead(A11);
potsy1 = map(potsy1, 0, 1023, 0, 180);
pots[0]=potsx1;
pots[1]=potsy1;
Zt1 = digitalRead(22);
pots[2]=Zt1;
Zw1 = digitalRead(24);
pots[3]=Zw1;
led1 = digitalRead(21);
pots[4]=led1;
potsx2 = analogRead(A8);
potsx2 = map(potsx2, 0, 1023, 0, 180);
potsy2 = analogRead(A9);
potsy2 = map(potsy2, 0, 1023, 0, 180);
pots[5]=potsx2;
pots[6]=potsy2;
Zt2 = digitalRead(26);
pots[7]=Zt2;
Zw2 = digitalRead(28);
pots[8]=Zw2;
led2 = digitalRead(23);
pots[9]=led2;
potsx3 = analogRead(A6);
potsx3 = map(potsx3, 0, 1023, 0, 180);
potsy3 = analogRead(A7);
potsy3 = map(potsy3, 0, 1023, 0, 180);
pots[10]=potsx3;
pots[11]=potsy3;
Zt3 = digitalRead(30);
pots[12]=Zt3;
Zw3 = digitalRead(32);
pots[13]=Zw3;
led3 = digitalRead(27);
pots[14]=led3;
delay(timer);
// turn the pin off:
//digitalWrite(ledPins[thisPin], LOW);
Mirf.setTADDR((byte *)"serv1");
Mirf.send((byte *) &pots);
// Mirf.send((byte *) &butstate);
while(Mirf.isSending()){
}
}
ho dimezzato il numero di cam per abbreviare i listati nel presente forum
ho cercato tra i tanti post, ma non riesco a risolvere, qualcuno può darmi una mano?
grazie