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…