Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-07-01 10:55:18 Firmata + sendDigital()

top
membre
Date d'inscription: 2012-04-12
Messages: 43

Firmata + sendDigital()



Je continue mon apprentissage d'Arduino mais je galère un peu, j'ai réalisé le montage le plus simple possible allumé une diode !big_smile
Jusque là pas de problème
Je voudrais récupérer l'état de ma diode dans un code Processing
j'ai le code Arduino  suivant:

#include <Boards.h>
#include <Firmata.h>

int ledpin = 10;

void setup() {
  Firmata.begin(57600); 
  pinMode(ledpin, OUTPUT);
}

void loop() {
  Firmata.processInput();
  digitalWrite(ledpin, HIGH);
  int val = digitalRead(ledpin);
  Firmata.sendDigitalPort(ledpin, val);
  //serial.print(val);
}

et le code Processing associé

Mais impossible d'obtenir dans le code Processing l'état HIGH de ma diode, la valeur renvoyée est tjrs 0 soit un état LOW, surement un problème de communication sur le port série avec Firmata alors si quelqu'un pouvait m'indiquer mon erreur je lui en serais reconnaissant
merci

Dernière modification par top (2014-07-01 11:03:42)

Hors ligne

 

#2 2014-07-01 12:55:39 Re : Firmata + sendDigital()

top
membre
Date d'inscription: 2012-04-12
Messages: 43

Re: Firmata + sendDigital()



Je viens de comprendre un truc lol il faut charger le programme standardFirmata dans la carte arduino pour ensuite
la piloter depuis Processing....
Donc maintenant tout fonctionne bien avec le code Processing suivant :

import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
int val = 0;

void setup() {
  println(Arduino.list()[0]);
  arduino = new Arduino(this, Arduino.list()[0], 57600);
  arduino.pinMode(10, Arduino.OUTPUT);
}

void draw() {
}

void keyPressed() { 
  if (val == 0) {
    arduino.digitalWrite(10, Arduino.HIGH);
    val=1;
  } else {
    arduino.digitalWrite(10, Arduino.LOW);
    val=0;
  }
}

Hors ligne

 

#3 2014-07-03 05:42:19 Re : Firmata + sendDigital()

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: Firmata + sendDigital()



Tout à fait sinon ,tu en a  un standard, un digital,et un analogique ;en conséquence pour allumer ta led  le standard digital aurais fait l'affaire. Un petit pour les valeurs analogiques.

Code (P5) :

import processing.serial.*;  
import cc.arduino.*;  
Arduino arduino;  
float[] val=new float[5];  
int i;  
void setup() {  
  size(800,700);  
   println(Arduino.list());  
   arduino = new Arduino(this, Arduino.list()[0], 57600);  
}  
  void draw() {  
    background(255);  
  for(int i=0;i<5;i++)  
{  
    val[i]= arduino.analogRead(i+1);  
   fill(0);  
 rect(100,100+100*i,255,15);  
 fill(255,0,0);  
  val[i]=map(val[i],0,1024,0,255);     
 rect(100,100+100*i,val[i],15);  
 }  
  }

Hors ligne

 

#4 2014-07-03 09:16:29 Re : Firmata + sendDigital()

top
membre
Date d'inscription: 2012-04-12
Messages: 43

Re: Firmata + sendDigital()



Questions de novice:

Est-ce que le standardFirmata peut-être vu comme le "super" programme à charger dans la mémoire
flash de l'Arduino pour gérer tous les cas de figure depuis Processing : entrées / sorties analogiques et numériques ?

Si je désire contrôler le clignotement de ma LED depuis Processing je déclare le PIN correspondant OUTPUT mais comment
lire l'état de ma LED HIGH ou LOW avec digitalRead(pin) puisque que cette fonction n'est utilisable qu'avec
un PIN déclaré INPUT ?

Dernière modification par top (2014-07-03 13:52:19)

Hors ligne

 

#5 2014-07-03 16:27:06 Re : Firmata + sendDigital()

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: Firmata + sendDigital()



Si tu change l'état de ta led la patte que tu utilise est toujours en sortie si tu veux connaitre l’état de ta led il faut prendre une autre patte pour connaitre l'état de la sortie :ex si ta led est sur 2 tu programme pinMode en sortie et si tu veux connaitre l'état tu programme pinMode en entrée(sur patte 3)et tu boucle la 2 sur la 3 ;c'est comme un retour de signalisation une patte pur la commande et une autre patte pour la signalisation donc un pinmode en entrée et un pinmode en sortie .Un petit programme de demo.

Hors ligne

 

#6 2014-07-03 16:31:21 Re : Firmata + sendDigital()

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: Firmata + sendDigital()



UN programme pour demo.

Code (P5) :

Hors ligne

 

#7 2014-07-04 13:44:14 Re : Firmata + sendDigital()

top
membre
Date d'inscription: 2012-04-12
Messages: 43

Re: Firmata + sendDigital()



Merci pour l'histoire du PinMode en entrée et en sortie.
J'ai fait quelques tests et çà marche bien. Par contre pour le coup je trouve qu'il est aussi simple de gérer une variable
dans le code qui maintient à jour l'état d'un pinMode (bon d'accord faut pas que l'électronique bug), on évite la multiplication des fils sur le montage.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024