4. Control de la sèrie Arduino¶
Amb el programa següent, Arduino executa les comandes que rep de l’ordinador a través del port sèrie.
Exercicis¶
Executeu i prova el programa següent a Arduino.
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
/* Programa para controlar Arduino desde el puerto serie del PC */ #include <Wire.h> #include <pc42.h> #define AND && /* Inicialización */ void setup() { Serial.begin(9600); // Inicializar las comunicaciones serie pc.begin(); // Inicializar el módulo PC42 } /* Bucle principal */ void loop() { int dato, orden; // Envía las instrucciones por el puerto serie Serial.println(); Serial.println("Instrucciones:"); Serial.println(" H3 - enciende el led 3"); Serial.println(" L3 - apaga el led 3"); Serial.println(" R1 - lee y devuelve el valor de la entrada analogica 1"); Serial.println(); // Lee del puerto serie una instrucción while(1) { // Espera la recepción de un dato while(Serial.available() == 0); // Si se recibe una orden correcta, sale al siguiente paso orden = Serial.read(); // Orden de encendido de un led if (orden == 'H') { dato = leer_num(); led_on(dato); } // Orden de apagado de un led if (orden == 'L') { dato = leer_num(); led_off(dato); } // Orden de lectura de puerto analógico if (orden == 'R') { dato = leer_num(); read_analog(dato); } } } /* Funciones */ // Lee un número desde el puerto serie int leer_num() { int dato; // Espera la recepción de un dato while(Serial.available() == 0); // Lee el dato dato = Serial.read(); // Si el dato es un número, devuelve el número if ((dato >= '0') AND (dato <= '9')) return dato - '0'; // En caso contrario, devuelve el dato return dato; } // Enciende un led void led_on(int argumento) { // Comprueba que el argumento no se sale de rango if (argumento > 8) argumento = 8; // Enciende el led pc.ledWrite(argumento, LED_ON); } // Apaga un led void led_off(int argumento) { // Comprueba que el argumento no se sale de rango if (argumento > 8) argumento = 8; // Apaga el led pc.ledWrite(argumento, LED_OFF); } // Lee un puerto analógico y envía el resultado por el puerto serie void read_analog(int argumento) { // Comprueba que el argumento no se sale de rango if (argumento > 3) argumento = 0; // Lee el valor analógicoEjecuta la instrucción int valor = analogRead(argumento); Serial.print("Valor="); Serial.println(valor); }
Afegiu una nova comanda amb la lletra "C" (clar) perquè Arduino desactivi tots els LED.
Afegiu un nou ordre amb la lletra (seqüència) de manera que Arduino es converteixi en un a un a un dels LED des del primer fins a l'últim amb una cadència d'un LED per segon.