Go Down

Topic: Fare una FOTO e mandarla ad un PC - Vari problemi soprattutto di memoria (Read 3903 times) previous topic - next topic

lesto

il fatto che non esiste una funzione nella libreria non vuol dire che non si possa fare. In pratica ti basta prendere il suo codice e schiaffarcelo dentro. Che se non erro dovrebbe essere identico a quello che ti avevo fatto scrivere ;)

Senza giocare con la libreria, chiami il codice del tipo (adattato per usare la Serial1) che richiami prima della libreria. poi usi la libreria normalmente, fai solo  attenzione che non setti di nuovo il baudrate al vecchio valore, anzi visto che la begin l'hai già fatta non c'è problema a cancellarla dalla libreria.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

contecavour

Certo era solo per dire cosa diceva l'articolo.
Comunque metto le 3 righe di codice
-setBaudMax();
-Serial1.end();
-Serial1.begin(115200);

E non va.
Mettendo dei ritardi di 5000ms una volta mi è andata.
MA devo riavviare ogni volta.

Nel setup io lancio
cam.begin()
dove andrebbe messa tra parentesi la velocità ma non va.

Io devo permettere di fare una seconda foto, e non ci riesco.

N










contecavour

Allora riporto l'esempio e il mio output, senza usare librerie.

Code: [Select]
#include <SoftwareSerial.h>

char serInStr[100];
int serInIdx =0;
int serOutIdx =0;

void setup() {

Serial.begin(38400); //Set Hardware Serial to 9600 baud - For outputting debug messages
Serial.println("Start");
Serial1.begin(38400); //Set Software serial to 38400 baud - Default setting for the camera
Serial.println("Softserial Baud has been set to 38400");
delay(10); //Pause for 10ms to let it all settle down. Probably not needed!

Serial.println("Get Camera Version");
getCamVers(); //Call getCamVers function

Serial.println("Setting Camera Baud to 115200");
setBaudMax(); //Call setBaudMax function

Serial.println("Reset softSerial to 115200");
Serial1.end(); //Disconnect serial connection to camera
Serial1.begin(115200); //Reconnect serial connection to camera at 115200 baud

Serial.println("Get Camera Version again using 115200");
getCamVers(); //Check camera version again to prove everything is working at 115200
}

void loop() {
}

void getCamVers() {

uint8_t ByteData[5]={0x56, 0x00, 0x11, 0x00}; //String of bytes that requests version number from camera
Serial1.write(ByteData,5); //Send string to camera

delay(10); //Pause to let the camera deal with the request

if(Serial1.available()){ //Check if serial buffer has a response from camera
while(Serial1.available()){ //Loop as long as the serial buffer contains data
serInStr[serInIdx] = Serial1.read(); //Read data from serial buffer. Copy into array
serInIdx++; //Increase array count by 1
}
}

for(serOutIdx=0; serOutIdx < serInIdx; serOutIdx++) { //Loop through array
Serial.print(serInStr[serOutIdx]); //Print each value in array to consol
}
Serial.println(); //Print end of line

}

void setBaudMax() {

uint8_t ByteData[7]={0x56, 0x00, 0x24, 0x03, 0x01, 0x0D, 0xA6}; //String that sets baud to 115200
Serial1.write(ByteData,7); //Send string to camera

//Should really check for a suitable response here!

}


Quote

Start
Softserial Baud has been set to 38400
Get Camera Version

Setting Camera Baud to 115200
Reset softSerial to 115200
Get Camera Version again using 115200
v    VC0703 1.00


La cosa strana è che il primo getVersion non scrive nulla.

N



lesto

non è che rimane salvato il baudrate a 115200?
se ti fa ancora questo problema prova direttamente a non usare il begin a 38400 la funzione setBaudMax(), a semplifemente passa direttamente alla begin(115200).

però ad occhio direi che ora funziona. bisogna iniziare a scrivere il codice per scattare la foto, e vedere se la cosa ha effettivamente portato a qualche miglioramento
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

contecavour

Quote
però ad occhio direi che ora funziona


In che senso?
A 38400 tutto sta funzionando. Progetto finito. Sto ottimizzando un po' le cose.
Volevo aumentare la velocità e capire perchè certe volte fallisce la connessione sulla 80 del server web.

N

contecavour

Il problema del 115200 è che ho fatto tutto con le librerie Adafruit.
E il cam.begin() anche senza parametri in realtà inizializza tutto a 38400.
Adesso sto facendo uno sketch di test

N


lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

contecavour

Ho provato.
C'è un parametro che dice la velocità ma è quello che usa anche il costruttore, ma non va.
Ho allegato anche i file.

Code: [Select]
boolean Adafruit_VC0706::begin(uint16_t baud) {
  if(swSerial) swSerial->begin(baud);
  else         hwSerial->begin(baud);
  return reset();
}


Secondo te se gli passo la Serial1 del MEGA come si comporta?


N

lesto

secondo me ci puoi forzare la Serial1 con swSerial = false;

l'esempio funziona alla perfezione, quindi mi apsetto che anche la libreria funzioni toccando nei gisuti punti


edit: in teoria basta fare cam.begin(115200); dopo aver chiamato setMaxBaudrate() (se ogni reset serve reimpostare il baudrate)

rideit: non devi neanche forzare la seriale, ti basta passare Serial1 alla libreria che dovrebbe fare tutto da sola (la riconosce come HarwareSerial)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

contecavour

#70
Oct 24, 2012, 11:36 am Last Edit: Oct 24, 2012, 11:41 am by contecavour Reason: 1
Quindi fare un:
Code: [Select]
hwSerial->begin(baud);
secco?

A mio avviso la libreria setta solo la seriale ma non manda il comando alla cam del cambio di velocità


N

contecavour

Poi non mi è chiaro se dopo un reset della CAM la velocità viene rimessa a 38400 o no.

lesto

Quote
Start
Softserial Baud has been set to 38400
Get Camera Version

Setting Camera Baud to 115200
Reset softSerial to 115200
Get Camera Version again using 115200
v    VC0703 1.00


da questo test pare che rimanga settata a 115200..
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

contecavour

In questi test però alla fine spengo tutto scollego cavo di rete e udb cosi per forza torna al default.

MA guarda questo:

COSI VA
Code: [Select]

Serial1.begin(38400);


COSI NON VA
Code: [Select]

Serial1.begin(38400);
setBaudMax();
Serial1.end();
Serial1.begin(115200);


Che ne dici?

lesto

non capiso, parli del codice di prova o della libreria?

se della libreria, il begin non lo devi fare te ma usare quello della libreria
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up