Glossari
ARDUINO
Continguts:
Llibreries
Led
Grup de Leds amb vuMeter
Botons
Sensors d'inclinació Tilt
LDR Resistència llum
Sensor Capacitiu de contacte amb persones (paper d'alumini)
Sensor de vibració PiezoKnockSensor
Potenciòmetre: Resistència variable
Arrays
Sèrie (per enviar missatges i depurar el codi)
Servo estàndard 180º
Servo de gir continu
2 Servos
No dubteu en fer copy/paste
Llibreries
Les hem d'afegir a tots els programes.
#include <CapacitiveSensor.h>
#include <Servo.h>
#include <SPI.h>
#include <SD.h>
#include <EducationShield.h>
Led
R = 220 Ω
void setup() {
pinMode(5, OUTPUT); //OUTPUT per sortida i INPUT per entrades
}
void loop() {
digitalWrite(5, HIGH);
delay(1000);
digitalWrite(5, LOW);
delay(1000);
}
Grup de Leds amb vuMeter
http://bcn.verkstad.cc/ca/course-literature/vu-%C2%AD-meter-de-led/
/* An array of pin numbers to which LEDs are attached the defaults are 2 to 6 but you can choose any of the digital */
int ledPins[] = {2, 3, 4, 5, 6};
int pinCount = 5;
VUMeter vuMeter;
int ledTime = 100; //determines how fast the LEDs will switch
void setup(){
//if your are using other pins than 2 to 6 you need to configure that here
vuMeter.config(pinCount, ledPins);
vuMeter.begin(); //does the same as pinMode, LEDs are outputs
}
void loop(){
vuMeter.scrollLeft(ledTime, 1); //The game starts by scrolling the LEDs to the left
vuMeter.scrollRight(ledTime, 1);
vuMeter.blinkAll(100,10);
}
Botons
R = 10 kΩ
Button button1 = Button(9); //the button connected to digital pin 9
int pressTime = 200; //determines how long time a player has to press the button
void setup(){
button1.begin(); //does the same as pinMode, buttons are inputs
}
void loop(){
/* if button1 is pressed within the press time, the game will continue */
if(button1.released(pressTime)){
// Continua el joc
}
Sensors d'inclinació Tilt
TiltSwitch player_1 = TiltSwitch(10); //the tilt connected to digital pin 10
void setup(){
//Initializing components
player_1.begin();
}
void loop(){
if(player_1.pressed(1)){
// Aquí passen les coses
}
}
LDR Resistència llum
R = 1 KΩ
LDR ldr = LDR(A1); //the ldr connected to analog pin 1
void setup(){
ldr.config(800, 600); //first run LDRtest example to see what values you need to put here
}
void loop(){
//if the ldr is covered the score increases with 1
//and a sounds is played
ldr.pressed();
}
Sensor Capacitiu de contacte amb persones (paper d'alumini)
http://bcn.verkstad.cc/ca/course-literature/sensor-capacitatiu/
// Declarem el sensor capacitiu i diem que estarà connectat entre els pins digitals 2 i 3.
CapacitiveSwitch leftFoot=CapacitiveSwitch(2,3);
void setup(){
//inicialitza el sensor capacitiu que li hem dit leftfoot
//el llindar de sensibilitat és 400 a l'enllaç de dalt hi ha l'explicació de com calibrar el sensor
leftFoot.config(400);
}
void loop(){
//S'espera fins que es toqui el sensor
leftFoot.pressed();
//Aquí escriuràs el programa del que passa quan s'ha tocat el sensor
}
Sensor de vibració PiezoKnockSensor
http://bcn.verkstad.cc/ca/course-literature/sensor-de-knock-ca/
//Declara el sensor connectat a l'entrada analògica A0
PiezoKnockSensor sensor=PiezoKnockSensor(A0);
void setup(){
//defineix el llindar de sensibilitat i el temps mínim entre tocs.
//A l'enllaç de dalt explica com calibrar el sensor.
sensor.config(40,80);
}
void loop(){
//el sensor Knock espera fins que es colpegi el sensor
if(sensor.knocked(10)){
//Aquí poseu el que passa quan li hem donat un un cop al sensor
}
}
Potenciòmetre: Resistència variable
Knob pot=Knob(A0);//Connectem el potenciòmetre a la pota A0
void setup(){
//L'entrada analògica A0 rebrà un voltatge que anirà de 0 a 5 volts. Aquesta instrucció el que fa és dividir aquest voltatge en 5 valors diferents.
pot.setLevels(5);
}
void loop(){
//Si el voltatge que hi ha a l'entrada analògica A0 va de 0 a 1 V retornarà 0, de 1V a 2V retornarà 1,...
valorDelPotenciometre = pot.getLevel()
}
Arrays
// Exemples de declaració de diferents arrays:
int ledPins[] = {2, 3, 4, 5, 6};
boolean message[5][22]={
// H H H H O O O O L L L L A A A A
{0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0},
{0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0},
{0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0},
{0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0},
{0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0}
};
int dau[6][9]={
//1
{
0,0,0,
0,1,0,
0,0,0
},
//2
{
1,0,0,
0,0,0,
0,0,1
},
//3
{
1,0,0,
0,1,0,
0,0,1
},
//4
{
1,0,1,
0,0,0,
1,0,1
},
//5
{
1,0,1,
0,1,0,
1,0,1
},
//6
{
1,1,1,
0,0,0,
1,1,1
}
};
// Exemple de com fer serfir un FOR per adreçar-nos a l'índex d'una array de dues dimensions
void loop(){
// If the whole array has been drawn
if(rowCount == rowLength) {
rowCount = 0; // Reset the rowCount
} else {
// Shows the message
for (int i = 0; i < pinCount; i++) {
// Checks if the array says HIGH
if (message[i][rowCount] == 1) {
vuMeter.on(i);
} else {
vuMeter.off(i);
}
}
rowCount++;
}
delay(delayTime); // This is the delay per row
}
Sèrie (per enviar missatges i depurar el codi)
http://bcn.verkstad.cc/ca/course-literature/enviant-al-ordinador/
void setup() {
Serial.begin(9600);
}
void loop() {
// Si volem depurar el codi aquí hem de posar la variable que volem monitoritzar sense cometes
Serial.println("Hola Caracola");
delay(1000); // Opcional quan només volem depurar el codi. Quan enviem a l'ordinador s'ha de posar per no saturar-lo
}
Servo estàndard 180º
http://bcn.verkstad.cc/ca/course-literature/servo-estandar-ca/
include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
}
void loop() {
myservo.write(0); // Mou el servo a 0º
delay(1000);
myservo.write(180);// Mou el servo a 180º
delay(1000);
}
Servo de gir continu
http://bcn.verkstad.cc/ca/course-literature/servo-de-rotacio-continua/
Servo me;
void setup(){
me.attach(9);
}
void loop(){
// De 0 a 90 fa girar el servo en un sentit i de 90 a 180 gira en sentit contrari.
// Com més ens acostem als extrems, es a dir, al 0 o a 180 més ràpid girarà i a 90 es quedarà quiet.
me.write(120);
}
2 Servos
http://bcn.verkstad.cc/ca/course-literature/fent-servir-dos-servos/
// Declara els 2 servos
Servo myservo1, myservo2;
void setup() {
myservo1.attach(9);
myservo2.attach(10);
}
void loop() {
// Arduino no té prou potència per fer anar 2 servos alhora
// per això s'ha de desconnectar un servo per poder fer anar l'altre
myservo2.detach(); // Desconnecta el servo2
myservo1.attach(9); // Connecta el servo1
myservo1.write(70); // Mou el servo1
delay(1000);
myservo1.detach(); // Desconnecta el servo1
myservo2.attach(10); // Connecta el servo2
myservo2.write(70); // Mou el servo2
delay(1000);
}
PROCESSING
size(ample, alt): Estableix la mida de la finestra del programa en píxels.
background(gray): Estableix el color de fons des de 0 (negre) fins a 255 (blanc). També pots utilitzar backround(red, green, blue) per establir el color que tu vulguis.
line(x1, y1, x2, y2): Dibuixa una línia des de la coordenada (x1,y1) fins la (x2,y2).
ellipse(x, y, diàmetre x, diàmetre y): Dibuixa una el·lipse amb centre a (x,y). La mida s’estableix amb diàmetre x i diàmetre y. Quan aquests dos paràmetres són iguals, el resultat és un cercle.
stroke(red, green, blue): Estableix el color de la línia. Cada valor de color pot ser des de 0 fins a 255. En aquest cas, la línia és de color blau, ja que red=0, green=0 i blue=255.
noStroke(): Si s’usa aquesta ordre, les figures dibuixades no tindran contorn.
fill(red, green, blue): Estableix el color utilitzat per omplir les figures. En aquest exemple, omple el cercle de color vermell.
width: l’amplada de la finestra de programa.
height: l’alçada de la finestra de programa.
mouseX: La coordenada X del cursor del ratolí.
mouseY: La coordenada Y del cursor del ratolí.
int variableName = value: Crea una variable del tipus integer, un nombre enter. Pots escollir qualsevol nom per identificar-la, però assegura’t que el nom s’adiu al context en el qual s’utilitza la variable.
int: Nombre enter, p.ex., 2, 99 o 532.
long: aquest és un tipus de dades per números enters llargs. Convé utilitzar-les quan fem servir variables temporals, perquè aquestes dades poden ser molt grans. Recordes que vam explicar que una variable és un contenidor de dades? Bé, es pot dir que long és un contenidor més gran que int. Un int es queda sense espai abans que un long.
float: Nombre decimal, p.ex., 2.76, 8.211 o 900.3.
boolean: Pot ser veritable o fals.
char: Un caràcter, p.ex. ‘r’, ‘2’ o ‘%’.
String: Una seqüència de caràcters, p.ex. “hola”, “M’encanta programar!” o “&%!@¤”.
int(data): Converteix data a un enter. P.ex. int(2.545) retorna 2, int(233.9999) retorna 233, etc.
PImage: Un tipus de variable que pot contenir una imatge.
loadImage(image file): Puja la imatge image file localitzada dins el directori actual de l’sketch. image file s’ha d’escriure exactament igual que el nom del fitxer. Comprova més avall com situar la imatge a la carpeta correcta.
image(image name, x, y): Mostra la PImage image name a les coordenades (x, y). La cantonada superior esquerra és l’eix de coordenades.
La declaració de les imatges és una mica diferent: PImage im[] = new PImage[2]. Això significa que declarem un array del tipus PImage amb dos blocs (o compartiments) de dades.
Quan mostrem i pugem les imatges, utilitzem img[0] per la primera posició de l’array i img[1] per la segona.
if( boolean ): comprova si boolean és true. Pots també comprovar si és fals escrivint if( !boolean ).
for(initiator; test; update){ statements }: Aquesta funció permet repetir una peça de codi tantes vegades com calgui. El primer que succeeix dins el for() és la inicialització, initiator. En l’exemple, aquesta declaració és un enter, i. Després, comprova si test és veritable o fals, tal i com vam fer amb l’ifal projecte anterior, recordes? Aquí, test comprova si i és menor que 4. Si és així, el codi entre claus s’executarà. A continuació, el que succeeix és l’ update; en aquest cas, es tracta d’incrementar i una unitat. Després, test es comprova de nou i, si altra cop és cert, es repeteix el procés anterior. Com que sempre actualitzem afegint 1 a i, en algun moment i serà igual a 4, la qual cosa significa que test serà fals (4 no és menor que 4). En aquest moment, s’abandonarà el bucle.
noLoop(): atura l’execució contínua dins de draw. Per tornar a executar el programa hauràs de cridar a loop().
hour(): Retorna l’hora actual com un número de 0 a 23.
minute(): retorna els minuts actuals com un valor de 0 a 59.
second(): retorna els segons actuals com un valor entre 0 i 59.
keyPressed(): aquesta funció es crida cada vegada que es prem una tecla. Això significa que qualsevol codi escrit dins d’aquesta funció serà executat en prémer una tecla.
keyCode: retorna el valor de la tecla que has premut.
random(high): genera un número aleatori entre 0 i el número high. Pots utilitzar també random(low,high) per generar un número entre low i high.
text(text, x, y): escriu un text a la pantalla a les coordenades x i y.