Eines de l'usuari

Eines del lloc


tutorials:arduino:00_arduino_basic:10_port_serie

Port Serie

El port serie, utilitzat des dels orígens de les computadores i que actualment ha evolucionat fins al USB(Universal Serial Bus) es una de les eines més importants de les que disposa un sistema electrònic, permet adquirir informació o enviar informació entre un ordinador i la placa electrònica. Es el sistema bàsic de comunicació entre dispositius electrònics.

El port serie bàsic que envia bytes a anat evolucionant pel temps, el antic ja inexistent RS232, que ha evolucionat cap al USB, USB3, Bluetooth, inclús es pot encapsular amb Ethernet, wifi…Internet, també hi ha versions industrials, com el RS485(MODBUS) que no es veu afectada per les interferències electromagnètiques i pot recórrer grans distancies, característica que ha fet que sigui instituïble, i després de 30 anys es segueix utilitzat, ni USB, ni Wifi, ni altres disposen de la immunitat electromagnètica ni de la distància de comunicació del RS485(MODBUS).

arduino -> ordinador

Exemple 1: Lectura d'una entrada digital pel port serie. Amb el pulsador pitjat sortira “ON” amb el polsador no pitjat ha de sortir “OFF”, (recordeu que si es PULLUP, pitjat=LOW)

void setup() {
pinMode(8, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
if (digitalRead(8)==LOW) Serial.println("ON");
  else Serial.println("OFF");
delay(100);
}

Serial.begin(9600); Sempre que vulguem utilitzar el port serie caldra afegir aquesta línia al setup().

Serial.println(“ON”); EN via pel port serie la paraula o string “ON” i afegeix el final de liniea “ln”. Si no volem afegir el “ln” només cal traure'l.

if ( comparació ) { accions; } es la instrcció condicional, la mes utilitzada en programació, si es compleix la comparació executa les accions, si no (else) executa altres o segueix el programa. Pots trobar mes informació a BLINK sense delay

8-O Exercici01: Posar altre polsador, i que faci el mateix. “S1_ON” “S1_OFF” “S2_ON” “S2_OFF”

8-O Exercici02: Posar una variable x, que augmente amb el primer polsador i baixi amb el segon polsador. Mostrar el valor actual de la variable pel port serie. Pots trobar més informació sobre les variables a BLINK sense delay. Canvia el valor del delay, que passa?

CODI ASCII

Les dades entre uns altres ordinadors, sempre es realitza amb el codi ascii. Es un codi que emparella un byte(8 bits) amb lletres, números i codis especials com finals de liniea…

8-O Exercici03: Cerca al exemples del IDE d'arduino un que dibuixa el codi asccii executal. Desprès llegeix el codi i pregunta el que entenguis al professor, o cerca la liniea que no entenguis a internet per veure que pot significar(el comentaris no, evidentment).

Serial.write(45); amb Serial.write escrivim un byte i no un string o cadena de caràcters com el Serial.println(“string”); ….

ordinador -> arduino

Amb la una “a” activem un LED connectat al pin4, i amb una “d” el desactivem. (nota: cal definir una variable per enregistrar la lectura del port serie o no funciona)

byte byte_rebut;

void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop() {
 
  // check if data has been sent from the computer:
  if (Serial.available()) {
    byte_rebut = Serial.read();
    if (byte_rebut=='a') digitalWrite(13,HIGH);
    if (byte_rebut=='b') digitalWrite(13,LOW);
    Serial.println(byte_rebut);
  }
}

8-O Exercici04: Canvia la 'a' i la 'b' per el byte que el representa al sistema ASCII

8-O Exercici05: Cal enviar una seqüencia de 3 bytes pel port serie (3 caracters asccii) per desactivar la bomba, si no son els caractecters correctes amb la seqüencia correcta la bomba explota(missatge pel port serie “BOOOOOOOOOM”), o “BOMBA DESACTIVADA”.

Solució:

 // Per desactivar la bomba cal a - f - z
byte byte_rebut=0;
int nombreAcerts=0;
void setup() {
  Serial.begin(9600);
  }
void loop() {
  // Per desactivar la bomba cal a - f - z
  if (Serial.available()) {
    byte_rebut = Serial.read();
    //Serial.println(byte_rebut);
    if (nombreAcerts==2 && byte_rebut=='z') {
        Serial.println("tercera lletra encertada - bomba desactivada");
       }
    if (nombreAcerts==2 && byte_rebut != 'z') Serial.println("BooomMMMMM_no_z");
    if (nombreAcerts==1 && byte_rebut=='f') {
        Serial.println("segona lletra encertada nombreAcerts=2");
        nombreAcerts=2;
       }   
    if (nombreAcerts==1 && byte_rebut != 'f') Serial.println("BooomMMMMM_no_f");
    if (nombreAcerts==0 && byte_rebut == 'a') {
        nombreAcerts=1;
       Serial.println("primera lletra encertada nombreAcerts=1");
      }
    if (nombreAcerts==0 && byte_rebut != 'a') Serial.println("BooomMMMMM_no_a");
  }
}
tutorials/arduino/00_arduino_basic/10_port_serie.txt · Darrera modificació: 2018/11/26 19:42 per crevert