if e valori

Ciao
avrei bisogno di un programma che

Inserisco "4" nel seriale
imposta il valore int "mod" = 1
Inserisco "5" nel seriale
imposta mod = 0
Inserisco "6" nel seriale
Verifica se mod valga 0 o 1 e agisca in una determinata maniera

[...]
  if (numero == '4'){           //4x4
    digitalWrite(marcia, HIGH);
    mod = 1;
  }
  if (numero =='5'){
    digitalWrite(marcia, LOW); //no 4x4
    mod = 0;
  }
  if (numero =='6'){
    if(mod != 0){
      digitalWrite(motas, HIGH);
      digitalWrite(motad, HIGH);
      digitalWrite(motps, HIGH);
      digitalWrite(motpd, HIGH);
    }
    if(mod = 0){
      digitalWrite(motps, HIGH);
      digitalWrite(motpd, HIGH);
    }
  }

Cosa sbaglio?

Ciao,
Ho appena letto il tuo codice.
Credo che tu possa usare al posto di un int o byte per dichiarare mod, un boolean, che può assumere solo due valori, vero o falso. Dopodiche credo che il tuo errore sia nell'ultimo if, in cui non devi fare un assegnazione:

if(mod = 0)

ma piuttosto devi comparare la variabile con un numero quindi la sintassi giusta è:

if(mod == 0)

poi ti ripeto che, per lo spezzone di sketch che hai postato, avrebbe un senso usare un boolean al posto di un qualsiasi altra dichiarazione. Spero di esserti stato di aiuto.

Ciao, Giovicavalla

sto cercando di fare una specie di macchina telecomandata

 #include <IRremote.h>           //http://forum.arduino.cc/index.php?topic=375850.0
#include <Servo.h>
Servo myservo;
#define Fari 13
#define Clacson 12
#define motas 2
#define motad 3
#define motps 4
#define motpd 5
#define marcia 9

char numero=0;
int RECV_PIN = 11;
int pos = 0;
IRrecv irrecv(RECV_PIN);
decode_results results;
boolean mod = false;

void setup()
{
  myservo.attach(10);
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode (Fari, OUTPUT);
  pinMode (Clacson, OUTPUT);
  pinMode (motas, OUTPUT);
  pinMode (motad, OUTPUT);
  pinMode (motps, OUTPUT);
  pinMode (motpd, OUTPUT);
  pinMode (marcia, INPUT);
  }

void loop()
{
  mod = digitalRead(marcia);                      //
  /*if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume();
} */
if (Serial.available ()){
  numero = Serial.read();
  Serial.println (numero);

  if (numero == '1'){           //accendo fari
      digitalWrite(Fari, HIGH);
    }
  if (numero == '2'){           //spengo fari
    digitalWrite(Fari, LOW);
  }
  /*if (numero == '3'){           //clacson
tone (Clacson, 400, 500);
tone (Clacson, 200, 500);
  } */
  if (numero == '4') boolean mod = true;{           //4x4
    digitalWrite(marcia, HIGH);
  }
  if (numero =='5') boolean mod = false;{
    digitalWrite(marcia, LOW); //no 4x4
  }
  if (numero =='6'){
    if(mod == true) {
      digitalWrite(motas, HIGH);
      digitalWrite(motad, HIGH);
      digitalWrite(motps, HIGH);
      digitalWrite(motpd, HIGH);
    }
    if(mod == false) {
      digitalWrite(motps, HIGH);
      digitalWrite(motpd, HIGH);
    }
  }
  if (numero =='7'){
    digitalWrite(motas, LOW);
    digitalWrite(motad, LOW);
    digitalWrite(motps, LOW);
    digitalWrite(motpd, LOW);
  }
}
}

@epicmovie: Stai attento, rileggi bene il codice, hai commesso vari errori di logica causa posizionamento errato di alcune graffe, inoltre ti ricordo che la sintassi completa del IF è:

if (condizione) {
 _viene_eseguito_se_vero_
}
else {
 _viene_eseguito_se_falso_
}

... quindi inutile che fai un if (mod == true) ed un altro per if (mod == false) non ti pare ? Basterebbe :

if (mod == true) {
 _qui_mod_è_ture_
}
else {
 _qui_mod_è_false_
}

... ma si può ottimizzare ancora di più perché inutile chiedersi se una cosa è == true o == false perché se è == true vuol dire che è true quindi :

if (mod) {
 _qui_mod_è_true_
}
else {
 _qui_mod_è_false_
}

Tutto chiaro ?

Guglielmo