Tecnologia vestible

Per començar Elements d'entrada Programació CircuitPython   Recursos CITCEA
Elements no electrònics Elements de sortida Programació Arduino    
Projectes Elements de control Dades pràctiques   Inici

Monitor sèrie

El monitor sèrie ens permet comunicar l'ordinador i la placa del microcontrolador mentre estem fent programes de prova.

Per obrir el monitor cal picar sobre la icona Monitor sèrie

En el nostre programa, haurem d'inicialitzar la comunicació sèrie amb Serial.begin indicant la velocitat (normalment 9600 baud).

Si el nostre programa necessita una segona comunicació sèrie per comunicar-se amb algun sensor o altres dispositius disposem també del Serial1. Amb la majoria de les plaques no podem obrir més de dos canals sèrie ni tampoc fer-ho amb noms diferents.

void setup() {
	Serial.begin(9600);
	...
}

Per enviar coses al monitor sèrie podem fer servir Serial.print i ens anirà posant les coses una al costat de l'altra. Si fem servir Serial.print enviarà un salt de línia al final i així la següent cosa que s'enviï quedarà a la línia següent.

	...
	Serial.print("a = ");
	Serial.println(a);
	...

El següent programa envia a l'ordinador els números de l'1 al 10 i els seus quadrats.

	int a;
void setup() {
	Serial.begin(9600);
}
void loop() {
	delay(1000);  // Espera 1 segon
	for (a=1; a <= 10; a++) {
		Serial.print("a = ");
		Serial.print(a);
		Serial.print("               a·a = ");
		Serial.println(a*a);
	}
		Serial.println();
		Serial.println();
}

El resultat que apareixerà a la pantalla del monitor sèrie serà:

a = 1               a·a = 1
a = 2               a·a = 4
a = 3               a·a = 9
a = 4               a·a = 16
a = 5               a·a = 25
a = 6               a·a = 36
a = 7               a·a = 49
a = 8               a·a = 64
a = 9               a·a = 81
a = 10              a·a = 100


a = 1               a·a = 1
a = 2               a·a = 4
...

També podem enviar informació al microcontrolador. El següent exemple senzill ens ho mostra.

int rebut;
void setup() {
  Serial.begin(9600);
}
void loop() {
  // Mira si hi ha caràcters per llegir
  if (Serial.available() > 0) {
    // Llegim el següent caràcter
    rebut = Serial.read();
    // i l'escriu al canal sèrie
    Serial.print("S'ha rebut: ");
    Serial.println(rebut, DEC);
  }
}

Si escrivim, per exemple "A4" en la línia d'entrada de la consola sèrie, rebrem:

S'ha rebut: 65
S'ha rebut: 52
S'ha rebut: 10

Ja que 65 és el codi ASCII d ela lletra A i 52 el del dígit 4.El darrer valor, 10, correspon al salt de línia. En la part inferior de la consola sèrie tenim un desplegable que ens permet triar què s'envia quan premem la tecla ENTER. Pot ser un salt de línia (10), un retorn de carro (13), les dues coses o cap de les dues.

També tenim l'opció de rebre text directament, com mostra el següent programa:

String rebut;
void setup() {
  Serial.begin(9600);
}
void loop() {
  // Mira si hi ha caràcters per llegir
  if (Serial.available() > 0) {
    // Llegim el següent caràcter
    rebut = Serial.readString();
    // i l'escriu al canal sèrie
    Serial.print("S'ha rebut: ");
    Serial.println(rebut);
  }
}

Important: Alguns dels programes d'exemple dels sensors d'Adafruit tenen al començament del setup unes línies similars a les següents:

...
	while (!Serial);
		delay(500);
	Serial.begin(9600);
...

Aquestes dues línies equivalen a:

...
	while (!Serial){
		delay(500);
	}
	Serial.begin(9600);
...

Les claus no són necessàries quan la sentència té una única línia dins però ajuden a entendre millor el programa.

Aquestes línies bloquegen el programa fins que la connexió sèrie està disponible. Si no hi fossin ens trobaríem amb un petit problema amb les plaques Flora i Micro. Aquestes plaques triguen una mica des que es carrega el programa fins que la connexió sèrie està disponible. Si no fessim res la instrucció begin fallaria i no ens funcionaria la comunicació amb el monitor sèrie.

El problema apareix quan alimentem la placa amb una bateria ja que llavors la comunicació sèrie no està disponible i el programa queda bloquejat. En aquest cas tenim dues opcions. Una és substituir les dues línies marcades en taronja per un retard prou llarg. L'altra és suprimir aquestes línies i totes les vegades que es fa servir el canal sèrie quan el nostre programa ja no s'hagi de comunicar amb l'ordinador.

Format de les dades

Quan fem servir les funcions print i println si el que hi posem com a paràmetre són variables de text (o un text entre cometes) s'enviarà el ext corresponent com a caràcters ASCII. Si hi posem una variable numèrica, convertirà les xifres en caràcters ASCII per tal que es mostri correctament un nombre decimal.

En aquestes funcions, podem posar un segon caràcter que indica en quin format es mostren les dades. Els formats possibles són:

Paràmetre Format Exemple
Instruccions Sortida al monitor sèrie
No ho indiquem Decimal int n = 90;
print(b);
90
DEC Decimal int n = 90;
print(b, DEC);
90
HEX Hexadecimal int n = 90;
print(b, HEX);
5A
OCT Octal int n = 90;
print(b, OCT);
132
BIN Binari int n = 90;
print(b, BIN);
1011010

 

 

 

En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.