3. Encès i desactivació dels LEDs

LED de colores y RGB.

Els pendents

  • Enceneu i apagueu els díodes LED del tauler de control PC42.
  • Generar parpelleig de LEDs amb el temps esperant.

PC42 Panell de control LEDES

El tauler de control té 6 LED. 5 LED són d’un sol color. L’últim LED a la dreta és un LED RGB amb els tres colors bàsics de color vermell, verd i blau.

Porta Color
1 Vermell
2 Groga
3 Verd
4 Blava
5 Blanc
6 RGB-vermell
7 RGB-VERDE
8 RGB-Azul

El LED RGB permet generar colors compostos per altres:

Porta Color
6 + 7 RGB-Yellow
7 + 8 RGB-CYAN
6 + 8 RGB-Morible
6 + 7 + 8 RGB-Blanco

La funció: CPP: Fun: ledWrite

ledWrite(int ledNum, int bright)

Aquesta funció permet activar o desactivar un LED específic. Els seus paràmetres són els següents:

`` lednum``: LED que s’encendrà o s’apagarà. Els valors vàlids oscil·len entre 1 per LED D1 a 8 per al color blau del LED D6.

El LED D6 és un LED RGB, que conté 3 LEDs al seu interior. Els números 6, 7, 8 representen respectivament els colors vermells, verds i blaus del LED D6.

`` Bright``: Brillo amb el qual s’encén el LED.

  • `` Led_off``: Apagueu el LED. Es pot substituir pel número zero.
  • `` Led_``: encén el LED amb la intensitat màxima.

La funció: CPP: Fun: DigitalWrite

digitalWrite(int ledNum, int bright)

Aquesta funció és similar a la funció anterior ledWrite '. La seva operació és idèntica, accepta dues ` `` `` Bright`` `` `` per establir el LED que es manejarà i la seva brillantor.

La funció té el mateix nom que la funció d'Arduino per gestionar els pins de sortida digital. D’aquesta manera es manté la compatibilitat dels noms per a aquells programadors acostumats a l’entorn Arduino.

Exemple: enceneu el LED D1

El següent programa encendrà definitivament el LED D1 mitjançant la funció ledWrite

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Enciende el led D1

#include <Wire.h>
#include <PC42.h>

void setup() {
   pc.begin();               // Inicializar el módulo PC42
   pc.ledWrite(1, LED_ON);   // Encender el led D1
}

void loop() {
}

Programa equivalent a l’entorn Arcublock:

Programa de Ardublock para encender el led D1 del panel de control PC42

En aquest enllaç podeu descarregar: Descarregueu: `Program Archive for Environment

Exemple: LD D1 Flicker

Si voleu activar i desactivar el LED D1 amb un període de segon, una manera de fer -ho és encendre el LED, esperar mig segon, apagar el LED i esperar mig segon. Quan es repeteix aquesta seqüència, el LED parpelleja. Per aconseguir una meitat de segon, s’utilitza la funció `` retard (500) `` que provoca 500 mil·lisegons (0,5 segons). Per assegurar -se que la seqüència es repeteix indefinidament, el codi s’introdueix al bloc `` bucle () ``, que es repeteix una i altra vegada dins del programa Arduino.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// Parpadea el led D1 una vez por segundo

#include <Wire.h>
#include <PC42.h>

void setup() {
   pc.begin();              // Inicializar el módulo PC42
}

void loop() {
   pc.ledWrite(1, LED_ON);  // Encender el led D1
   delay(500);              // Esperar medio segundo (500 ms)
   pc.ledWrite(1, LED_OFF); // Apagar el led D1
   delay(500);              // Esperar medio segundo (500 ms)
}

Programa equivalent a l’entorn Arcublock:

Programa de Ardublock para encender y apagar el led D1 del panel de control PC42

En aquest enllaç podeu descarregar: Descarregueu: `Program Archive for Environment

Exercicis

Programa el codi necessari per resoldre els problemes següents.

  1. Enceneu de forma permanent les LEDES D1, D3 i D5.

  2. Enceneu el LED D1, espereu un segon, activeu el LED D2, espereu un segon, continueu la seqüència fins que els primers 4 LED estan encesos. Un cop finalitzat, el programa mantindrà els 4 LED encesos.

  3. Enceneu els LEDs vermells, ambre i verds com en un semàfor.

    Primer el LED verd s’encendrà i es mantindrà durant 4 segons. El LED verd s’apagarà i el LED ambre s’encendrà durant 2 segons. Finalment, el LED ambre s’apagarà i el vermell s’encendrà, que es mantindrà durant 4 segons.

    Aquesta seqüència es repetirà indefinidament.

  4. Modifiqueu l'exercici anterior de manera que el LED ambre parpelleja tres vegades, canviant l'encesa a la segona meitat, abans d'encendre el LED vermell.

  5. Programa una balisa que s’encén alternativament el LED vermell i el LED blau. Cada LED ha de romandre un segon. Un dels dos LED sempre ha de ser i mai serà els dos LED alhora.

  6. Enceneu el LED D1, espereu un segon, apagueu el LED D1 i engegueu el LED D2. S'encendran d'aquesta manera, consecutivament, els primers 5 LED. En cada moment només hi haurà un LED. Un cop finalitzada la seqüència, tornarà a començar des del principi.

  7. Feu una modificació a l’exercici anterior de manera que en tot moment hi hagi 2 LEDES encès.

    Al començament del programa, els LED D1 i D2 s’han d’encendre.

    Al cap d'un segon, els LeDes D2 i D3 s'encendran.

    La seqüència continuarà fins que LeDes D6 i D1 s’encenguin.

    A partir d’aquest moment, el programa es repetirà de nou des del principi.

  8. El següent programa té diversos errors. Corregiu els errors sintàctics per funcionar correctament.

     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
    // Programa con errores sintácticos
    // Enciende 6 ledes en secuencia a derecha y a izquierda
    
    #include <Wire.h>
    #include <PC42.h>
    
    void setup() {
       pc.begin();                   // Inicializar el módulo PC42
       pc.ledWrite(1, LED_on);
    }
    
    void loop() {
       for(char i=1; i<=5; i++) {
          pc.ledWrite(i+1, LED_ON);  // Encender el led siguiente
          delay(250);                // Esperar 250 milisegundos
          pc.ledWrite(i, LED_OFF);   // Apagar el led anterior
          delay(100);                // Esperar 100 milisegundos
       }
    
       for(char i=5; i>=1; i--) {
          pc.ledWrite(i, LED_ON);    // Encender el led anterior
          delay(250);                // Esperar 250 milisegundos
          pc.ledWrite(i+1, LED_OFF); // Apagar el led siguiente
          delay(100);                // Esperar 100 milisegundos
       }
    
  9. Realitzeu un programa que parpelleja D1 una vegada per segon al mateix temps que D2 parpelleja dues vegades per segon.