L'objectif est de réaliser une boite à histoire ésothérique afin de susciter la curiosité. À l'aide d'une imprimante thermique et d'un bouton groove, des histoires seront générés et imprimées grâce a Arduino lorsque l'utilisateur appuieras sur celui-ci. Ces histoires sont choisies aléatoirement dans une liste et imprimées.
ARDUINO
//appel de la bibiothèque de l'imprimante, voir le tutoriel d'utilisation de l'imprimante sur adafruit : https://learn.adafruit.com/mini-thermal-receipt-printer
#include "Adafruit_Thermal.h"
#include "SoftwareSerial.h"
#define TX_PIN 6
#define RX_PIN 5
SoftwareSerial mySerial(RX_PIN, TX_PIN);
Adafruit_Thermal printer(&mySerial);
//une led est utilisée pour vérifier le bon fonctionnement du bouton. Ce n'est pas obligatoire.
const int buttonPin = 2; // le numéro de la broche utilisée par le bouton
const int ledPin = 13; // le numéro de la broche utilisée par la led
int buttonState = 0; // variable pour vérifier l'état du bouton
//placez ici le titre de l'oeuvre
const char string_0[] PROGMEM = "TITRE \n";
const char string_1[] PROGMEM = "TITRE \n";
const char string_2[] PROGMEM = "TITRE \n";
const char string_3[] PROGMEM = "TITRE \n";
// placez le texte de votre histoire/poème ici
// le texte doit être sur une seule ligne, voir le wiki du projet pour le formatage du texte et des caractères spéciaux
const char string_4[] PROGMEM = "Histoire,\n histoire.\n Histoire, \n histoire. \n";
const char string_5[] PROGMEM = "Histoire,\n histoire.\n Histoire, \n histoire. \n";
const char string_6[] PROGMEM = "Histoire,\n histoire.\n Histoire, \n histoire. \n";
const char string_7[] PROGMEM = "Histoire,\n histoire.\n Histoire, \n histoire. \n";
//fin du mode histoire
// Tableau des textes
const char* const string_table[] PROGMEM = {string_0, string_1,string_2,string_3,}; // si besoin compléter les valeurs string manquantes
const char* const string_table1[] PROGMEM = {string_4, string_5,string_6, string_7,}; // si mode cadavre exquis commentez pour désactiver
char buffer[1040]; // assurez-vous que la valeur indiquée soit supérieure au nombre maximum de caractères d'un string
int chiffreal = 0; // définit le nom de la valeur aléatoire pour déterminer le texte à utiliser
//fonction intégrant les différents textes à imprimer appelés ici vers 1, vers 2, ...
void vers1 () {
chiffreal = random(0,4); // sélectionne un string entre 0 et 4
{
strcpy_P(buffer, (char*)pgm_read_word(&(string_table[chiffreal]))); // copie le string sélectionné aléatoirement de la table string_table
printer.println(buffer); //imprime le string situé dans le buffer de la carte
delay( 1000 ); // patiente une seconde
}
}
void vers2 () {
{
strcpy_P(buffer, (char*)pgm_read_word(&(string_table1[chiffreal]))); // copie le string sélectionné aléatoirement de la table string_table1
printer.println(buffer);
delay( 1000 );
}
}
void setup() {
// défini la broche de la led comme une sortie
pinMode(ledPin, OUTPUT);
// défini la broche du bouton comme une entrée
pinMode(buttonPin, INPUT);
// initialise l'imprimante
mySerial.begin(19200);
printer.begin();
}
void loop() {
// vérifier l'état du bouton
buttonState = digitalRead(buttonPin);
// Si le bouton est pressé
if (buttonState == HIGH) {
// Allume la led
digitalWrite(ledPin, HIGH);
printer.wake(); //réveille l'imprimante
printer.feed(1); // déroule le papier sans imprimer
printer.boldOn(); // met le texte en gras
vers1(); // imprime le premier texte
vers2(); // imprime le second texte ...
// vers3(); // en fonction du nombre d'éléments à afficher décommentez cette ligne. Si vous souhaitez afficher plus d'éléments pensez à créer la fonction correspondante plus haut (ex ici void vers4)
printer.feed(1);
printer.println("Laurent Colomb \n Vocabul\x82s"); // placez ici votre signature
printer.boldOff(); // fin du texte en gras
printer.feed(2);
printer.sleep(); //met en sommeil l'imprimante
}
else {
// éteins la led et ne fais rien
digitalWrite(ledPin, LOW);
}
}
vidéos, photos du making of…