Arduino - Manejo de dos led desde arduino y pc

 
Vista:
sin imagen de perfil
Val: 1
Ha mantenido su posición en Arduino (en relación al último mes)
Gráfica de Arduino

Manejo de dos led desde arduino y pc

Publicado por francisco (1 intervención) el 24/05/2019 19:52:18
Hola
A ver si por favor alguien puede ayudarme a solucionar este problema.

Quiero manejar dos led desde arduino mediante dos interruptores, y que tambien pueda manejarlos desde el pc.

El problema que me encuentro es que desde los interruptores funcionan perfectos, pero cuando intento encenderlos desde el pc al instante se me apagan.

En el codigo que pongo a continuacion, cuando cierro el interruptor1 y su valor es HIGH se establece el valor de m = false, luego para apagarlo le pongo la condicion de que el interruptor1 sea LOW (y) que m sea false, lo apaga perfectamente y establezco el valor de m en true

Lo que no entiendo es por que cuando despues de esto enciendo el led desde el pc automaticamente se apaga, cuando m esta establecido en true. ya no se cumplen las dos condiciones de apagado que le pido de que interruptor1 sea LOW y m sea false.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#define interruptor1 A4
#define interruptor2 A3
 
#define led1 A1
#define led2 A2
 
void setup()
{
  pinMode(interruptor1, INPUT);
  pinMode(interruptor2, INPUT);
 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
 
  Serial.begin(9600);
 
}
 
void loop()
{
  //Codigo para los interruptores de los led
 
 int valor1 = digitalRead(interruptor1);
 int valor2 = digitalRead(interruptor2);
 bool m;
 bool n;
 
 if (valor1 == HIGH)
 {
  digitalWrite(led1, HIGH);
  m = false;
 }
 
 if ((valor1 == LOW) && (m == false))
 {
  digitalWrite(led1, LOW);
  m = true;
 }
 
 if (valor2 == HIGH)
 {
  digitalWrite(led2, HIGH);
  n = false;
 }
 
 if ((valor2 == LOW) && (n == false))
 {
  digitalWrite(led2, LOW);
   n = true;
 }
 
 
 
 //Codigo para manejo desde el pc
 
 if (Serial.available() > 0)
   {
      int pc = Serial.read();
 
 if (pc == 'h')
    {
      digitalWrite(led1, HIGH); //Enciende el laser 1
    }
    if (pc == 'i')
    {
      digitalWrite(led1, LOW); //Apaga el laser 1
    }
    if (pc == 'j')
    {
      digitalWrite(led2, HIGH); //Enciende el laser 2
    }
    if (pc == 'k')
    {
      digitalWrite(led2, LOW); //Apaga el laser2
    }
   }
 
}

Si utilizo este codigo en el que elimino la parte de encendido y apagado mediante interruptores funciona perfecto desde el pc, cuando le pido que se encienda se enciende, y permanece encendido hasta que le pido que se apague.

Algun error estoy cometiendo y no soy capaz a verlo o a solucionarlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#define interruptor1 A4
#define interruptor2 A3
 
#define led1 A1
#define led2 A2
 
void setup()
{
  pinMode(interruptor1, INPUT);
  pinMode(interruptor2, INPUT);
 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
 
  Serial.begin(9600);
 
}
 
void loop()
{
  //Codigo para los interruptores de los led
 
 
 //Codigo para manejo desde el pc
 if (Serial.available() > 0)
   {
      int pc = Serial.read();
 
 if (pc == 'h')
    {
      digitalWrite(led1, HIGH); //Enciende el laser 1
    }
    if (pc == 'i')
    {
      digitalWrite(led1, LOW); //Apaga el laser 1
    }
    if (pc == 'j')
    {
      digitalWrite(led2, HIGH); //Enciende el laser 2
    }
    if (pc == 'k')
    {
      digitalWrite(led2, LOW); //Apaga el laser2
    }
   }
 
}

Muchas gracias y un saludo por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder