Un aiuto sullo sketch

Saluto a tutto il forum mi sto cimentando con delle prove su arduino, e siamo ai primi scogli.. Quello che intendo fare è un contatore all'interno dello sketch che ogni 10 cicli cambi i delay dei led Sto provando a realizzare il Police Led e vorrei appunto che ogni tot cicli , cambino i delay questo è lo sketch int a=40; int b=100; int c=1000; int test=0; int x=1; int i=1; int i1=0; void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(6, OUTPUT); pinMode(9, OUTPUT);

}

void loop()

{ i=i+1; i1=int (i / 10);

if (i1 = x) a=c, b=c, x=x+1;

else { a=40; b=100; } digitalWrite(6, HIGH); // set the LED on delay(a); // wait for a second digitalWrite(6, LOW); // set the LED off delay(b); digitalWrite(6, HIGH); // set the LED on delay(a); // wait for a second digitalWrite(6, LOW); // set the LED off delay(b); digitalWrite(6, HIGH); // set the LED on delay(a); // wait for a second digitalWrite(6, LOW); // set the LED off delay(b); digitalWrite(9, HIGH); // set the LED on delay(a); // wait for a second digitalWrite(9, LOW); // set the LED off delay(b); digitalWrite(9, HIGH); // set the LED on delay(a); // wait for a second digitalWrite(9, LOW); // set the LED off delay(b); digitalWrite(9, HIGH); // set the LED on delay(a); // wait for a second digitalWrite(9, LOW); // set the LED off delay(b); } Grazie a chi mi da una mano il problema sta nel la condizione e non riesco a farla funzionare, perchè mi legge comunque a=c e b=c

I test si fanno con 2 segni di "=" altrimenti non torna nulla. Quindi:

if (a==b)

Inoltre è inutile fare i1=int(i/10) perché sia i1 che i sono di tipo int quindi il compilatore convertirà in automatico il risultato di i/10 in un dato di tipo int. Poi metti le parentesi graffe sugli if, anche se le istruzioni stanno tutte su una riga: ti eviti problemi di lettura del codice. Quindi:

if (i1 == x) {
    a=c;
    b=c;
    x=x+1;
} else {
    a=40;
    b=100;
}

Con le graffe ho riscontrato una serie di problematiche che alla fine ho visto che funziona meglio senza(grazie alla poca esperienza in questo linguaggio) Comunque il problema non viene risolto. in vecchio basic si diceva if x/10 = int (x/10) .... cioè se dividendo x/10 ottengo il numero intero di x/10 .....e funziona invece qua no, l'else viene ignorato e assume la condizione vera anche se è falsa infatti i delay rimangono a 1000... il basic era piu semplice..ma limitato

Ah scusa avevo ignorato la prima parte... ho verificato ed hai ragione.. adesso funziona, esspure avevo provato anche con doppio segno == ... forse ho inerpretato male gli errori :D Quindi dentro le parentesi delle condizioni si testano due variabili con == ... ok grazie mille leo

Non puoi basarti su come lavorava il vecchio BASIC (a quale ti riferisci? GW-BASIC? QBASIC, Commodore BASIC? ;) ). Il C è differente: esegue sempre il casting prima di eseguire i conti e poi converte in automatico. http://arduino.cc/en/Reference/Float

cito leo ed appunto usa i float così avrai 2 decimali inoltre invece che fare i=i+1; è convenzione scrivere i++;

il significato è lo stesso ma è più corretto