Aiutino

Ciao a tutti, sto facendo un po di test e di prove per inoltrarmi nel mondo di arduino e della programmazione.

int timer = 400;

const int redPin = A0;
const int greenPin = A1;
const int bluePin = A2;

void setup()
{
Serial.begin(9600);
for (int thisPin = 11; thisPin < 13; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}

void loop()
Serial.print(analogRead(redPin));
Serial.print(",");
Serial.print(analogRead(greenPin));
Serial.print(",");
Serial.println(analogRead(bluePin));

for (int thisPin = 11; thisPin < 14; thisPin++) {
digitalWrite(thisPin, HIGH);
int prova = thisPin;
prova++;
Serial.println(prova);
delay(timer);
digitalWrite(thisPin, LOW);
}
}

per farvi capire ho fuso insieme le righe di codice che avevo in "nero" con quelle "blu" ma la soluzione che ho ottenuto non è stata quella che mi aspettavo. se guardiamo il codice senza le righe "blu" il print Serial.print(analogRead(greenPin)); nella console è molto veloce, per intederci fa un check sul pulsante premuto 5 volte al secondo( più o meno, sto ipotizzando), mentre se inserisco il for questo "check" si sballa e viene eseguito solo alla fine del for stesso. spero di essere stato chiaro, come faccio a risolvere la cosa e far tornare il "check" + reattivo mantenendo altri elementi all'interno del codice?

Grazie

no, sinceramente non sei stato molto chiaro
Non capisco perchè avresti dovuto fondere il codice in blu, così va benissimo.
Se ho ben ccapito tu vuoi spostare le printl sui pin analogici al'interno del secondo for, giusto?

l'analogRead dura circa 100micros, quindi non credo sia il problema. La serial già è più lenta, dipenda dal baudrate che hai impostato. Il baudrate è il numero di caratteri al secondo, un numero è composto da tanti caratteri quante le sue cifre, e andare a capo è un carattere. Fatti quattro calcoli per vedere se per caso è la serial che rallenta tutto.

2 cose:

  • "const int redPin = A0;" non puoi mettere una stringa in un int. L' entrata analogica A0 viene considerata anche pin 0 percui scrivi "const int redPin = 0;". La stessa cosa per le altre entrate analogiche.
  • elimina il delay() e usa il milli() esempio: http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
    Ciao Uwe.

uwefed:
2 cose:

  • "const int redPin = A0;" non puoi mettere una stringa in un int. L' entrata analogica A0 viene considerata anche pin 0 percui scrivi "const int redPin = 0;". La stessa cosa per le altre entrate analogiche.
  • elimina il delay() e usa il milli() esempio: http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
    Ciao Uwe.

Grazie per la risposta Uwe, ho provato ad integrare la guida dentro il mio codice ma no riesco proprio a capire come farlo funzionare dentro il mio for, potresti darmi una mano, grazie

posta il codice

@uwefed A0 non credo sa una stringa ma un intero defininito da qualche parte

A0-A5 sono definiti nel core di Arduino, esattamente non so dove.

leo72:
A0-A5 sono definiti nel core di Arduino, esattamente non so dove.

Allora analogRead(A0) corrisponde a scrivere analogRead(0) ecc.
Ma la stessa cosa funziona se metti in una variabile di tipo int il valore A0 ?

Ciao Uwe

Esatto.
I pin sono contati a partire da 0. Sulla UNO, fino al pin 13 i pin corrispondono ai pin digitali, dal pin 14 al pin 19 corrispondono ai pin analogici. Però se metti D0 è equivalente a mettere 0, se metti A0 è equivalente a mettere 14, solo che la forma alfanumerica (Ax) è preferibile a quella solo numerica.

The analog input pins can be used as digital pins, referred to as A0, A1, etc.

non vorrei intromettermi ma non siamo un po OT :P? io volevo sapere come inserire la funzione millis dentro il mio codice al posto di delay, non riesco proprio a comprendere la logica dell'esempio, qualche dritta?

Ciao filoo
per usare millis() memorizzi quando vuoi fare partire il ritardo il valore che Ti da millis() in una variable di tipo unsigned long. Poi controlli se millis() é arrivato al valore millis() della variablie sommando il ritardo in millisecondi. Se sei arrivato a wuel tempo fai eseguire il condice che vuoi eseguire dopo il ritardo.
sotto l' esempio BlinkWithoutDelay comentato in italiano

/* Blink without Delay
 This example code is in the public domain.
 http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay */

const int ledPin =  13;       // led sul piedino 13 di arduino

int ledState = LOW;            // stato del LED (acceso o spento)
long previousMillis = 0;        // variabile per memorizzare il tempo di partenza ritardo

long interval = 1000;           // ritardo in millisecondi

void setup() {
   pinMode(ledPin, OUTPUT);      
}

void loop()
{
  unsigned long currentMillis = millis();  // memorizza il valore di millis() nella varabile come tempo di partenza
 
  if(currentMillis - previousMillis > interval) {  // controlla se il tempo di ritardo é passato
     previousMillis = currentMillis;    // mette il tempo attuale della variabile perché in questo esempio il led lampeggia di continuo.
    if (ledState == LOW)   // il ritardo é passato, esegue il codice di invertire lo stato del LED
      ledState = HIGH;
    else
      ledState = LOW;
    digitalWrite(ledPin, ledState);  / scrive lo stato del LED sul uscita led.
  }
}

Ciao Uwe

leo72:
I pin sono contati a partire da 0. Sulla UNO, fino al pin 13 i pin corrispondono ai pin digitali, dal pin 14 al pin 19 corrispondono ai pin analogici. Però se metti D0 è equivalente a mettere 0, se metti A0 è equivalente a mettere 14, solo che la forma alfanumerica (Ax) è preferibile a quella solo numerica.

ok, ma la mia domanda é: funziona anche se metti in mezzo una variabile di tipo int?

esempio:

const int redPin = A0; 
...
analogRead(redPin);

Ciao Uwe

Bella domanda, bisognerebbe ritrovare dove viene creata quella costante e vedere di che tipo è.

si, sono definite in wprogram.h come uint8_t, quindi in teoria stanno bene pure in un byte:

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
const static uint8_t A0 = 54;
const static uint8_t A1 = 55;
const static uint8_t A2 = 56;
const static uint8_t A3 = 57;
const static uint8_t A4 = 58;
const static uint8_t A5 = 59;
const static uint8_t A6 = 60;
const static uint8_t A7 = 61;
const static uint8_t A8 = 62;
const static uint8_t A9 = 63;
const static uint8_t A10 = 64;
const static uint8_t A11 = 65;
const static uint8_t A12 = 66;
const static uint8_t A13 = 67;
const static uint8_t A14 = 68;
const static uint8_t A15 = 69;
#else
const static uint8_t A0 = 14;
const static uint8_t A1 = 15;
const static uint8_t A2 = 16;
const static uint8_t A3 = 17;
const static uint8_t A4 = 18;
const static uint8_t A5 = 19;
const static uint8_t A6 = 20;
const static uint8_t A7 = 21;
#endif

OK grazie lesto per la informazione
Ciao Uwe