Maintenant que nous disposons d'une Debian sur notre Transformer Prime (cf : Allier Android en GUI et Debian en CLI sur la Asus Transformer Prime), il est grand temps de commencer à jouer avec. C'est dans cette optique que j'ai décidé de détailler dans cet article la marche à suivre pour programmer une carte Arduino (Uno dans mon cas).

Dans un premier temps, il nous faut préparer notre environnement de développement au sein de la Debian. Un petit coup de aptitude (ou apt-get, selon vos préférences) et le tour est joué :

aptitude update
aptitude install gcc-avr avrdude avr-libc

Il va également nous falloir de quoi écrire notre code. Pour ma part, mon choix s'est tourné vers Vim. De plus, l'utilisation d'un Makefile va grandement nous faciliter la vie. Prenez donc le temps d'installer make en plus du reste.

Nous sommes enfin prêts à écrire notre code. Je vous propose donc un exemple de programme très simple à réaliser qui va tout simplement faire clignoter la LED située sur la carte :

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>

#define LED_DDR     DDRB
#define LED_PIN     PINB
#define LED         PB5

int main(void)
{
    LED_DDR |= _BV(LED);

    while (1)
    {
        LED_PIN |= _BV(LED);
        _delay_ms(50);
    }

    return(0);
}

La dernière étape est de réaliser un Makefile qui va nous servir à automatiser la phase de compilation ainsi que l'envoi du programme dans la mémoire de la carte :

MCU         = atmega328p
TARGET_ARCH = -mmcu=$(MCU)
TARGET      = main
CC          = avr-gcc
CPPFLAGS    = -mmcu=$(MCU)
CFLAGS      = -Os -g -Wall -I. -DF_CPU=16000000
LDFLAGS     = -g -mmcu=$(MCU) -lm -Wl,--gc-sections -Os
PGMER       = -c arduino -b 115200 -P /dev/ttyACM0
PGMERISP    = -c avrispv2 -P /dev/ttyACM0
DUDE        = /usr/bin/avrdude -V -p $(MCU)

C_SRCS      = $(wildcard *.c)
OBJ_FILES   = $(C_SRCS:.c=.o)

all:    $(TARGET).hex

clean:
    rm -f $(TARGET).elf *.o *.hex

%.o: %.c
    $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@

$(TARGET).elf: $(OBJ_FILES)
    $(CC) $(LDFLAGS) -o $@ $(OBJ_FILES)

$(TARGET).hex: $(TARGET).elf
    avr-objcopy -j .text -j .data -O ihex $(TARGET).elf $(TARGET).hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex main.elf eeprom.hex

upload: $(TARGET).hex
    $(DUDE) $(PGMER) -U flash:w:main.hex

size: main.elf
    avr-size --format=avr --mcu=$(MCU) main.elf

Et maintenant, on test le tout (après avoir connecté votre carte Arduino au port USB du dock de la Transformer Prime) :

make
make upload

Normalement, avrdude devrait vous indiquer que le programme a bien été chargé dans la carte et la LED devrait clignoter en signe de réussite.

Si vous rencontrez des problèmes lors de l'application de cette procédure, n'hésitez pas à me laisser un message en commentaire de cet article.