Ciao,
conoscevo questa differenza tra usb, comunque sul portatile che sto usando ora funziona solo su una delle due usb3. non riesco a capire perchè, forse è quella che ho utilizzato per la prima volta con l'arduino e con la quale ho installato i driver.... ( può essere??)
Il problema è che non sono davanti al mio PC dove ho l'IDE. Ad occhio il loop mi sembra un pelino contorto e non ci ho capito gran che, sarebbe da caricare nell'IDE per indentarlo bene.
Ho solo una USB che va bene sull'arduino ma se funziona su altri PC dubiti sia quella.
Ti dico la verità sarei tentato di acquistare un arduini originale rendendo questo. Ma prima volevo vedere se il progettino poteva funzionare
Non può funzionare così perché ti ricordo che hai a che fare con una oscillazione per cui il segnale scenderà sotto i 512 e poi risalirà, il tutto in dipendenza dalla frequenza di acquisizione che, per come hai scritto il codice, dipende da qual che fai dopo.
Ad esempio la stampa sulla seriale rallenta l'acquisizione.
Per cui , dopo che superi la soglia, può capitare che campioni mentre il segnale è più basso, anche più basso di 512 perché è l'altra parte dell'oscillazione.
Se non fosse un segnale oscillante potrebbe funzionare ma il suono lo è.
Invece potresti contare quante volte si supera la soglia, incrementando un contatore, ma in un intervallo di tempo misurato con millis.
Io sulla seriale non vedo un valore che oscilla ma, i numeri sono molto costanti... Esempio
500 505 510 515 e poi se parlo si alza ma, non trovo mai un valore a 500 e uno a 1000 per esempio. Comunque se mi fai un esempio pratico di quello che mi hai descritto verbalmente te ne sarei grato .
Preciso che il problema del mio programma non è che non si attiva la luce , è che non si spegne .
int re = 2;
int mic = A2;
int c = 0;
void setup() {
Serial.begin(9600);
pinMode(re , OUTPUT);
pinMode(mic , INPUT);
}
void loop() {
int micvalore = analogRead(mic);
if (micvalore > 620) {
digitalWrite(re , HIGH);
delay(1000);
}
else
{
digitalWrite(re , LOW);
delay(1000);
}
}
Per migliorarlo:
Invece di leggere una sola volta il valore del microfono lo su può leggere una decina di volte e fare una media usando il ciclo for {}
Il delay è bruttissimo ma se non deve fare nient'altro può andare.
Puoi anche toglierlo, il LED si accende solo se il valore supera la soglia.
Ciao,
grazie per la risposta, questa che mi hai fatto te è la prima prova del programma, funziona però è molto impreciso, a volte la luce si accende a random. Per renderlo migliore avevo provato a mettere un if che se superavo la soglia mi sommava una variabile quando arrivava a 3 si accendeva. ed effettivamente andava meglio ma, il problema è che se sente un rumore e dopo di chè c'è silenzio la variabile aumenta comunque di 1 e ritorniamo quindi al problema precedente.
Io ho bisogno di creare una funzione che se in un range di 10 valori c'è ne sono 3-4 che supera la soglia mi accenda la luce altrimenti no. Solo che non so proprio come fare... Sai per caso aiutarmi?
Ciao, ci sono riuscito. Ora a mio parere funziona bene. Avevo provato con la media, ma non era il top a volte sballava, così faccio accendere la luce se ci sono più di 3 valori alti ogni 10 letture.
int re = 2;
int mic = A2;
int valori[10];
int h=0;
void setup() {
Serial.begin(9600);
pinMode(re , OUTPUT);
pinMode(mic , INPUT);
digitalWrite(re , HIGH);
// put your setup code here, to run once:
}
void loop() {
h=0;
for(int x = 0; x < 10 ; x++)
{
valori[x] = analogRead(mic);
}
Serial.println("************");
for (int i = 0; i < 10; i ++)
{
Serial.println(valori[i]);
}
Serial.println("************");
delay(20);
for(int y = 0; y < 10 ; y++)
{
if( valori[y]> 590) h++;
}
Serial.println("xxxxxxxxxxx");
Serial.println("VALORE H=");
Serial.println(h);
Serial.println("xxxxxxxxxxx");
delay(20);
if( h >= 3 )
{
Serial.println(" +++++++++++++ ");
Serial.println(" mi sto accendendo.... ");
digitalWrite(re , LOW);
delay(5000);
h=0;
Serial.println(" +++++++++++++ ");
}
else
{
Serial.println(" -------- ");
Serial.println(" dovrei spegnermi ...... ");
digitalWrite(re , HIGH);
delay(30);
Serial.println(" -------- ");
}
}
ora vi chiedo l'ultimo sfozo @nid69ita@speedyant@Diego67@zoomx , per risolvere il problema sul fisso... Aggingo un ulteriore informazione, se uso una usb anche se sempre USB3 sui portatili l'arduino non funziona e non carica i software.
Ho fatto un test con un altro cavo ma, fa lo stesso identico problema. Preciso che al cavetto corto dell'arduino aggiungo una prolunga USB di circa 2 m per poter arrivare comodo alla scrivania. Ma utilizzandola su tutti i PC posso dire che funziona .
Ciao,
La luce su on è fissa , mentre rx si accende in funzione della luce. Ma la cosa assurda è che il programma presente sull'arduino testato da un altro PC va, collegato al fisso invece impazzisce e fa lampeggiare in continuo la luce senza un apparente logica. Se collego l'arduino a un carica USB, esegue il programma correttamente .
Uso una luce 220v comandata da un relè 5v che si abilità quando ho un segnale basso .
La prolunga su altri PC funziona .
Il relè a tre pin che due a lavolta possono essere cortouicitati con una specie di jumper ma, solo nella posiziona attuale funziona .
Problema di cavo. io ho un cavo usb dati che, pur funzionando sui cellulari anche come cavo dati, non riesce a far "riconoscere" le schede nucleo in fase di prima connessione.
Se vengono riconosciute con altro cavo, poi quello incriminato funziona.