Primo sketch

Ciao,
sono alle primissime armi (una settimana), sto imparando i comandi per effettuare i primi esperimenti con Arduino UNO.
Ho messo assieme due "esercizi" trovati su dei manuali in uno sketch , ma non riesco a farli funzionare correttamente.

Il primo è l'accensione di un led (LedB) con un pulsante il secondo l'intermittenza di un altro led (LedY). il problema che l'accensione prende il Delay di quello intermittente.

Dove sbaglio o casa manca

#define LedB 11
#define Button 7
#define LedY 12

int val = 0;
int old_val = 0;
int state = 0;
int ledDelay = 1000;

void setup () {
  pinMode(LedB, OUTPUT);
  pinMode(Button, INPUT);
  pinMode(LedY, OUTPUT);

}

void loop() {
  val = digitalRead(Button);

  if ((val == HIGH) && (old_val == LOW)) {
    state = 1 - state;
    delay(10);
  }
  old_val = val;
  if (state == 1) {

    digitalWrite(LedB, HIGH);

  } 
  else  {
    digitalWrite(LedB, LOW); 

  }

  digitalWrite(LedY, HIGH);
  delay(ledDelay);
  digitalWrite(LedY, LOW);
  delay(ledDelay);
}

[EDIT] sostituito i quote con code Tags. Uwe [/EDIT]

Il codice deve essere racchiuso nei Tag Code e non Tag Quote. (Il bottone con il simbolo #)

Dovresti prima di metterli insieme rivedere il led blink da solo ma modificarlo per non usare la delay() ma millis()
Vedi l'esempio che viene fornitor nell'IDE BlinkWithoutDelay

Ho rivisto il codice come da tuo consiglio e funziona come pensavo ..

const int ledPin =  11; 
int Button = 7;
int LedG = 12;

//led blink
int ledState = LOW;             
long previousMillis = 0;
long interval = 500;
// led Button
int val = 0;
int old_val = 0;
int state = 0;




void setup() {

  pinMode(ledPin, OUTPUT);
  pinMode(LedG, OUTPUT);
  pinMode(Button, INPUT); 
}

void loop()
// led blink
{

  val = digitalRead(Button);

  if ((val == HIGH) && (old_val == LOW)) {
    state = 1 - state;
    delay(10);
  }

  old_val = val;
  if (state == 1) {

    digitalWrite(LedG, HIGH);

  } 
  else  {
    digitalWrite(LedG, LOW); 

  }

  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {

    previousMillis = currentMillis;   


    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;


    digitalWrite(ledPin, ledState);
  }
}

mi puoi spiegare, per fa coesistere due o più funzioni (accendi led con il pulsante e lampeggio ) basta aggiungerli nella sezione void loop.

grazie mille

[EDIT] sostituito i quote con code Tags. Uwe [/EDIT]

Teoricamente si, fondi i due codici nella loop(), però in molti casi non puoi lavorare con i delay() perchè sono bloccanti e quindi se una parte del codice li usa, la seconda parte non può essere in esecuzione.

Un pò di consigli su suel codice.
1- modifica il post e metti i tag code e non i tag quote.
2- per tutti i pin usa const come hai fatto per ledPin, inoltre a tutti aggiungerei la parola pin.

const byte ledPin=11;
const byte ButtonPin=7;

3- previousMillis e currentMillis li hai dichiarati uno unsigned e l'altro long semplice.
http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/

Una curiosità, in C potresti usare l'if in linea per accorpare parti del codice, secondo me diventano poco leggibili, ma tanto per informazione.
Da così (circa 6 righe):

if (state == 1) { 
  digitalWrite(LedG, HIGH);
} 
else { 
  digitalWrite(LedG, LOW);  
}

A cosi (1 riga):

digitalWrite(LedG, (state==1 ? HIGH : LOW) );

Da così (circa 4 righe):

  if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

a così (1 riga):

    ledState = (ledState==LOW ? HIGH : LOW);

nid69ita:
Una curiosità, in C potresti usare l'if in linea per accorpare parti del codice, secondo me diventano poco leggibili, ma tanto per informazione.
Da così (circa 6 righe):

if (state == 1) { 

digitalWrite(LedG, HIGH);
}
else {
  digitalWrite(LedG, LOW); 
}



A cosi (1 riga):


digitalWrite(LedG, (state==1 ? HIGH : LOW) );




Da così (circa 4 righe):


if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;



a così (1 riga):


ledState = (ledState==LOW ? HIGH : LOW);

Si puó concentrare di piú (a una riga ben leggibile)

digitalWrite(LedG, state);

e

ledState = !ledState;

oppure

ledState = 1-ledState;

Ciao Uwe

Piano ragazzi …. così mi create confusione , una cosa alla volta. Anche perché i manuali che sto leggendo non riportano quella sintassi.

Non é cosí complicato. Cosa é che Ti crea confusione?
Ciao Uwe

Sto leggendo alcune dispense trovate in rete che utilizzano un "linguaggio" diverso .

sono partito con

int led=10;

adesso scrivo

const byte led = 10;

per non parlare delle funzioni, il tutto mi crea un può di confusione non avendo ancora difficoltà nella stesura di un semplice programmino.

Mi indirizzate su un più corretto linguaggio di programmazione ?

chutzpah:
Mi indirizzate su un più corretto linguaggio di programmazione ?

Il linguaggio Arduinico è un superset del C++. Inizia studiando questo linguaggio con uno dei tanti manuali che trovi gratuitamente e liberamente online. Se non conosci la sintassi le regole ed i comandi del C++ non puoi neanche scrivere del buon codice su Arduino :wink:

Cerca le dispense (un pdf) della professoressa Tiziana Marsella, ha fatto un opuscolo molto carino sulla programmazione Arduino per un ITIS e lo ha reso disponibile.

Cerca in internet "Tiziana Marsella arduino programmazione"

Link utili --> Link utili elettronica - Megatopic - Arduino Forum

PaoloP:
Link utili --> Link utili elettronica - Megatopic - Arduino Forum

Mi riferivo proprio alla dispensa della Professoressa Tiziana Marsella, mi sembra ben fatta e semplice per me alle prime armi. Ma i vostri (preziosi) suggerimenti mi hanno cambiato un pochino le carte in tavola.

Per ora mi conviene imparare la logica con la dispensa che ho scaricato, in seguito raffinerò ! Mi sembra la cosa più logica.

Alt. Consigli o suggerimenti sul tuo codice sono i miei 1,2,3. :smiley:
L'altro è solo una curiosità. Non tenerne conto. Quando conoscerai meglio il C magari potrai rileggerlo e capirlo.
Diciamo che è un corso C advanced. Tralascialo e passa oltre, come dici tu meglio affrontare un argomento alla volta :smiley: