Bonjour à tous,
Peut être avez-vous déjà visité ces liens :
http://mrl.nyu.edu/~jhan/ledtouch/ledtouch.mpg (vidéo)
redirect
Welcome to your SWAG instance
Impressionnant !
J'ai voulu en faire autant avec la carte arduino. En particulier ce qui se trouve ici redirect, c'est-à-dire la version la plus minimaliste, sans convertisseurs analogique/numérique, juste avec deux entrées/sorties numériques, une résistance et une led ordinaire.
Facile ? Oui et non.
Le problème avec la carte arduino pour réaliser l'application, c'est que les résistance "pull-up" des sorties sont actives par défaut, donc, une entrée avec "pull-up" active ne permet pas de décharger la capacité de la LED par éclairement.
Solution, mettre ceci dans la fonction setup() pour désactiver les "pull-up" : _SFR_IO8(0x30) |= 4;
Pour expérimenter, voici mon code qui envoie les valeurs d'éclairement sur la sortie série tout en allumant la LED. Oh bien sur, la LED "clignote" un peu et ne semble pas allumée de manière permanente. C'est un code "pour voir" mais qui fonctionne. Pour essayer, il vous faudra connecter une LED en série avec une résistance d'environ 560Ohms sur les sorties numériques 2 et 3 de la carte arduino. l'anode (+, patte la plus longue) sur la sortie 2, l'autre la cathode sur la sortie 3.
Le code d'expérimentation est celui-ci :
int pinA = 2; // + Anode de la LED
int pinB = 3; // - Cathode de la LED
int val = 0; // valeur de l'éclairement
void setup()
{
// désactivation des résistances pull-up
_SFR_IO8(0x30) |= 4;
// Les deux broches connectées à la LED en sorties
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
// On allume la LED
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
beginSerial(9600); // connect to the serial port
}
void loop()
{
// RAZ valeur d'éclairement
val = 0;
// phase a - led allumée durant 80 ms
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
delay (80);
// phase b - mise a niveau
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
// phase c - décharge & mesure
pinMode(pinB, INPUT);
while (digitalRead (pinB) != 0)
val++;
pinMode(pinB, OUTPUT); // on repasse la sortie B en sortie
// on réallume la LED le temps de la transmisssion plus bouclage, mais rien d'obligatoire
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
// transmission valeur
printInteger (val);
printByte (13);
}