Paso 9: Cargar el código en el Galileo
Para dar vida a su matriz de LED, copiar y pegar nuestro código en el IDE de Arduino y ejecutarlo. También puede descargar el archivo .ino abajo. El código utiliza interrupciones para llenar el registro de cambio y enciende los LEDs específicos. También se utiliza el comando "popen" para comunicarse entre el shell de Linux subyacente y nuestro dibujo. El archivo binario que obtiene desde el servidor se descarga mediante el uso de curl.
Nota: por supuesto tendrás que cambiar la URL a un servidor propio.
#include <timerone.h> int on = 0; int last_on = 0; int datapin = 2; int clockpin = 3; int latchpin = 4; byte data[8]; FILE *fp; char input[10]; void setup() { // Initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards pinMode(13, OUTPUT); pinMode(12,OUTPUT); pinMode(11,OUTPUT); pinMode(10,OUTPUT); pinMode(9,OUTPUT); pinMode(8,OUTPUT); pinMode(7,OUTPUT); pinMode(6,OUTPUT); pinMode(5,OUTPUT); pinMode(4,OUTPUT); pinMode(3,OUTPUT); pinMode(2,OUTPUT); pinMode(1,OUTPUT); pinMode(0,OUTPUT); Timer1.initialize(1000); // the timer period is 100000 useconds, that is 0.1 sec Timer1.attachInterrupt(timerIsr,1000); // the callback will be called on each 5th timer interrupt, i.e. every 0.5 sec //initLED(); data[0] = 0b00000111; data[1] = 0b00000001; data[2] = 0b11100111; data[3] = 0b10110001; data[4] = 0b10101011; data[5] = 0b10101000; data[6] = 0b10101000; data[7] = 0b10101000; Serial.begin(115200); } void loop() { //SWAP THE URL PLEASE fp = popen("curl PLEASE INSERT YOUR URL HERE/galileo/picture.txt","r"); if(fp == NULL) { Serial.println("Couldnt run the curl command"); } else { fgets(input,10,fp); } if(pclose(fp) != 0) { Serial.println("fail"); } data[0] = (byte)input[1]; data[1] = (byte)input[2]; data[2] = (byte)input[3]; data[3] = (byte)input[4]; data[4] = (byte)input[5]; data[5] = (byte)input[6]; data[6] = (byte)input[7]; data[7] = (byte)input[8]; delay(3000); } /// -------------------------- /// Custom ISR Timer Routine /// -------------------------- void timerIsr() { if(on==6) on = 8; digitalWrite((13-last_on), LOW); digitalWrite(latchpin,LOW); if(on == 8) shiftOut(datapin, clockpin, MSBFIRST, ~data[6]); else shiftOut(datapin, clockpin, MSBFIRST, ~data[on]); digitalWrite(latchpin,HIGH); digitalWrite( (13-on), HIGH); digitalWrite((13-last_on),LOW); last_on = on; if(on == 8) on =6; on = (on+1)%8; }