Kommunikation fra Arduino til Processing

Fra HTX Arduino
Spring til navigation Spring til søgning

Hvis man ønsker at kommunikere fra Arduino til Processing, så kan det typisk være nogle måledata eller noget andet lignende man vil have kommunikeret over.

I dette lille eksempel er det skåret helt ned til at værdien der kan læses på Analog ben A0 bliver skrevet ud på PC-skærmen som et tal.

Koden til Arduino

Den viste kode ligger som txArduino i følgende ZIP-fil og skal selvfølgelig programmeres ned i en Arduino UNO.

Koden ser ud som følger:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  Serial.println(analogRead(A0));
  delay(100);
}

Indholdet er simpelt: I setup() initialiseres den serielle port til at fungere med 9600 Baud. I loop() læses den analoge indgang A0, og den værdi skrives ud til seriel-porten. For at PC'en kan følge med, så ventes der 100ms i hvert loop.

Koden til Processing (i PC'en)

Den viste kode ligger som rxFromArduino i følgende ZIP-fil og denne kode skal afvikles af processing i dens IDE på PC'en.

Koden ser ud som følger:

import processing.serial.*;
//Start seriel kommunikation
Serial port; // USB-portens navn
String USBPort = "COM4";

void setup() {
  // Koden til afvikles en gang, når programmet startes 
  size(480, 360);
  background(80);
  frameRate(60);
  textSize(24);
  // Starter den serielle port
  port = new Serial(this, USBPort, 9600);
}

String tekst = "";
int tal = 0;

void draw() {
  // Kode der kaldes med programmets framerate
  // Start på en frisk i hver frame
  background(40);
  if (port.available() > 0) {
    tekst = port.readStringUntil('\n');
    if (tekst != null) {  // Hvis der læses en tom tekst, så fejler trim
      tekst = trim(tekst);
      if (tekst != null) {  // Hvis der trimmes til en tom tekst, så fejler int-konverteringen
        tal = int(tekst);
      }
    }
  }
  // Skriv tallet
  text(tal, 50, 100);    
}

I starten af koden importeres det serielle bibliotek[1], der er installeret i Processing, men som lige skal have en henvisning for at fungere.

VIGTIGT - der er angivet hvilken COM-port (her COM4) der anvendes til kommunikationen - det er den port som Arduino-programmet bruger som seriel port, den skal selvfølgelig tilrettes, så det er det rigtige nummer. Man kan også få Processing-programmet til at kunne vælge porten, ved at lade sig inspirere af følgende kodeeksempel

I setup() bliver der sat de grafiske betingelser op for programmet, og den serielle port bliver gjort klar, så man kan kommunikere med den.

I loop() sletter man indholdet af skærmen, så tallene ikke kommer til at stå oven i hinanden når de skifter.

Hvis det er modtaget noget på den serielle port, så bliver det læst ind som en tekst, og det der står før og efter selve tallet trimmes af.

Hvis der stadig er en tekst, så konverteres det til et tal - dette retter tallets værdi.

Til slut skrives tallet ud for hvert skærmbillede, så det står der permanent, men det bliver kun opdateret hver gang der modtages et nyt godkendt tal.

Fælder i udviklingen

Når man arbejder med udviklingen af programmer hvor man anvender den serielle port, så er der specielt en fælde man skal passe på.

Det er når man har testet sit processing program, og så vil lave en rettelse i Arduinoen - så vil processing programmet blokere for at kunne uploade, hvis det oversatte processing program stadig er aktivt. Det skyldes at processing programmet har reserveret den serielle port, så længe programmet er aktivt. Man behøves ikke lukke hele IDE'et ned, men bare det oversatte program, for at man kan uploade til Arduinoen. Det skyldes at det er den samme serielle port man arbejder på til begge dele.

Man vil også kunne opleve at hvis man forsøger at starte sit processing program, uden at der er en Arduino på, så vil programmet låse, fordi den ikke kan finde porten.

Referencer

  1. Processing reference omkring den serielle port
Kom i gang med Arduino
Grundlæggende forståelse for Arduino Arduino Hardware - Arduino Prototype Print - Blink Eksempel - Overblik - Serial Monitor - Simple Komponenter - Software og Udviklingsmiljø
Programmering af Arduino Anvendelse af Eksempler - Klasser og Objekter - Programafvikling i Arduino - Test af Programmer
Dokumentationsformer Dokumentation med Kode og Flowchart - Dokumentation med State-machines - Flowchart - Pseudokode - Program-kommentarer - Systemdokumentation - Syntaksfarvning - Blokdiagram - Pulsplaner - UML
Opkoblinger til Arduino Moduler og Biblioteker - Driver - Opkobling af Hardware - Simple Komponenter - Tips til anvendelse af ben på Arduino UNO
Kompliceret Programmering Arduino kombineret med Processing - Kommunikation fra Arduino til Processing - Kommunikation fra Processing til Arduino - CopyThread Multitasking - Dokumentation med State-machines - Tid og Samtidighed i Software - Arduino Memory
Kompliceret Hardware I2C - Andre Processorboards - Internet of Things (IoT)
Oprindelige Dokumenter PDF-Version - Forfattere
Software Udviklingsteknikker Agile metoder - Brugertest - SCRUM

Fasemodellen - Kravspecifikation - Databasedesign - Struktur eller Arkitektur - Softwaretest

Projekter Afstand programforslag - Lysmåling - Projektforslag - Prototyper
Undervisningsforløb 4t Valgfag til Folkeskolen - Læsevejledning 4t Valgfag - Materialer til 4t Valgfag - Undervisningsnoter 4t Valgfag - Undervisningsplan 4t Valgfag - Slides til Undervisning

Kort Valgfag til Folkeskolen - Læsevejledning Kort Valgfag - Materialer til Kort Valgfag - Undervisningsnoter Kort Valgfag - Undervisningsplan Kort Valgfag


Programmering
Programmeringsbegreber Initialisering - Sekvens - Algoritme - Hexadecimal - Det Binære Talsystem - HEX-fil - ASCII - Interrupt - Events - Styresystem - Autocomplete - Selvstudie Programmering - Hour Of Code - Stepwise Improvement - Syntaks - Prog-links - Microcontroller
Grundlæggende C C float - C double - C-løkker - Datatyper - Konstanter - Regnearter - Funktioner - Return - Returværdi - Rekursion - Semikolon
Variabel Typer boolean - byte - int - unsigned int - word - long - unsigned long - short - float - double - char - unsigned char - string - char array - String - object - Array - 2-dimensionelt Array - void
Program-klassikere Polling - State-machine - Trykknap - Forkant - Bagkant - Prel
Arduino Arduino til Programmering - C til Arduino - Programmering Shield - Arduino PC-software - Arduino Udviklingsmiljø - Arduino Pin Library - Funktion - Arduino Seriel - Arduino String - Arduino String Split - Arduino StateChangeDetection - setup() - loop() - Compilerdirektiver - Asynkron kommunikation - millis() - micros() - Scratch for Arduino - Send fra Arduino til Excel - [[]] - [[]]
Processing Grafik i Processing‎ - Keyboard i Processing - Mus i Processing‎ - Tid i Processing‎ - Draw() - Setup() - Tal Input til Processing - Syntaksfarvning - Kommunikation fra Arduino til Processing - Kommunikation fra Processing til Arduino
javaScript Javascript input‎ - Javascript output‎ - Javascript strukturer‎ - Javascript syntaks‎ - Tid i javaScript - Objekt‎ - AJAX
Serverprogrammering PHP - MySQL - Task Scheduler - WeMOS
PIC JAL - [[]]
Scratch for Arduino S4A Installation - S4A programmering - S4A undervisningsforløb - S4A begrænsninger
Program Dokumentation Algoritme - Flowchart - Pseudokode - Datastruktur - Dataabstraktion - Pulsplaner - Program-kommentar - Teori - Test - UML