Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
499 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  132  133  134  135  136  137
Page Suivante
Auteur Sujet :

[arduino] Topic Unique blabla @ Arduino

n°160856
M4vrick
Mad user
Posté le 01-05-2017 à 09:43:19  profilanswer
 

Reprise du message précédent :

Nitescent a écrit :

Où faire un schéma propre et assez facilement? :D


 
Sur une feuille de papier au pire


---------------
--== M4vr|ck ==--
mood
Publicité
Posté le 01-05-2017 à 09:43:19  profilanswer
 

n°160857
man-x69
Posté le 01-05-2017 à 09:58:08  profilanswer
 

 

Il n'y a aucun problème d'orthographe ou de lien, c'est juste que les schémas faits avec Fritzing ne sont pas reconnus pour leur lisibilité ou leur clarté (ca devient vite du spaghetti/sac de noeuds).

 

Si tu veux aller vite sans trop d'expérience, rien ne vaut du papier et un crayon.
(Fear, en me relisant ça fait un peu "vieux con" :sweat:) .


---------------
Monorailcat iz ohverin
n°160859
SuperSic
Posté le 01-05-2017 à 10:08:34  profilanswer
 

man-x69 a écrit :

Il n'y a aucun problème d'orthographe ou de lien, c'est juste que les schémas faits avec Fritzing ne sont pas reconnus pour leur lisibilité ou leur clarté (ca devient vite du spaghetti/sac de noeuds).
 
Si tu veux aller vite sans trop d'expérience, rien ne vaut du papier et un crayon.
(Fear, en me relisant ça fait un peu "vieux con" :sweat:) .


Bah vu mon niveau en dessin, Fritzing est bien mieux. :spamafote:


---------------
"Les soldats vivent. Et se demandent pourquoi." Toubib (La Compagnie noire) | [TU] Killing Floor 1&2
n°160872
ObsydianKe​nobi
peloton suicida
Posté le 01-05-2017 à 11:48:04  profilanswer
 

Tu sais pas tracer des traits? Faut un niveau en dessin pour ça? :D


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
n°160878
Nitescent
Posté le 01-05-2017 à 12:05:09  profilanswer
 

Pas con la feuille de papier, c'est plutôt intelligent comme invention  [:fredmoul:1]

 

Je regarde ça cet aprem :)

n°161029
stepha
Posté le 02-05-2017 à 21:07:20  profilanswer
 

Bonjour,
 
Comment modifier ceci  
if ((PIND & B00000100))  
     PORTD &= B11111011;
     else PORTD |= B00000100;
si j’utilise le port 34 d’une carte arduino mega 2560
 
par avance merci !

n°161031
jimbofarra​r
Posté le 02-05-2017 à 21:37:27  profilanswer
 

stepha a écrit :

Bonjour,
 
Comment modifier ceci  
if ((PIND & B00000100))  
     PORTD &= B11111011;
     else PORTD |= B00000100;
si j’utilise le port 34 d’une carte arduino mega 2560
 
par avance merci !


La broche 34 d'un MEGA 2560 est connectée au PORTC3 donc :
 
if ((PINC & B00001000))  
     PORTC &= B11110111;
     else PORTC |= B00001000;


Message édité par jimbofarrar le 02-05-2017 à 21:56:20

---------------
Un putain d'son qui pète comme un cul bordé d'mogettes.
n°161805
Turkleton
I don't quite understand you
Posté le 12-05-2017 à 06:43:06  profilanswer
 

Y a-t-il des gens ici qui commandent du matos pour leur entreprise ? J'essaie de trouver comment acheter du sparkfun en France (ou au pire en Europe, le but étant de pouvoir récupérer la TVA), mais les revendeurs qui sont listés sur leur site n'ont l'air de ne proposer qu'une toute petite partie du magasin…


---------------
If you think it could look good, then I guess it should
n°161857
Elbarto
Posté le 12-05-2017 à 20:16:56  profilanswer
 

sparkfun c'est du ricain donc attention aux droits de douane et la difficulté de faire appliquer le SAV
 
 
 
 

n°161868
gremi
Vieux con des neiges d'antan
Posté le 12-05-2017 à 22:02:24  profilanswer
 

Snootlab ?


---------------
In aligot we trust.
mood
Publicité
Posté le 12-05-2017 à 22:02:24  profilanswer
 

n°161891
Turkleton
I don't quite understand you
Posté le 13-05-2017 à 12:10:25  profilanswer
 

Elbarto a écrit :

sparkfun c'est du ricain donc attention aux droits de douane et la difficulté de faire appliquer le SAV

Bin ouais, ça induit pas mal de (potentiels) problèmes de commander directement chez eux [:fabien27]  
 

J'ai maté, effectivement ils ont un certain nombre de références Sparkfun, mais ça remplace pas un "Sparkfun européen". Tant pis, je verrai comment je ferai.


Message édité par Turkleton le 13-05-2017 à 12:11:13

---------------
If you think it could look good, then I guess it should
n°161892
gremi
Vieux con des neiges d'antan
Posté le 13-05-2017 à 12:21:53  profilanswer
 

Selon les besoins je pense que tu peux aussi les contacter pour voir s'ils peuvent avoir des références sur demande...


---------------
In aligot we trust.
n°161894
Natopsi
☭ Sodium Metal ☭
Posté le 13-05-2017 à 12:24:55  profilanswer
 

Essaie de contacter les revendeurs sparkfun en France, a mon avis ils accepterons une commande personnalisée  :jap:


---------------
ACH/VDSHFRCoin:7Z2K2a9BLZ1yo1v8uMr4rg7qD3vtBFXZ6p◈1435mm◈
n°161895
Turkleton
I don't quite understand you
Posté le 13-05-2017 à 12:32:47  profilanswer
 

Pas con ça :jap: L'embêtant c'est que je pense commander au fur et à mesure, ça va faire beaucoup de commandes personnalisées à un moment donné :D  
 
Ou alors je contacte Sparkfun en disant que je veux être revendeur pour eux, et je commande que ce dont j'ai besoin, à prix fournisseur [:madame_de_galles:5]


---------------
If you think it could look good, then I guess it should
n°161926
rat de com​bat
attention rongeur méchant!
Posté le 13-05-2017 à 20:23:45  profilanswer
 

Peut-être Watterott au pays de Goethe? Ils ont du Sparkfun, un site en anglais et c'est en Europe donc pas de problèmes avec la douane, mais j'en sais pas plus.

 

edit: J'avais passé commande chez eux une fois, des problèmes avec le site mais qui étaient clairement dû à mon ordinateur et ils ont été extrêmement réactif suite à mon mail, de mémoire j'ai eu des réponses tard le soir et/ou le weekend.


Message édité par rat de combat le 13-05-2017 à 20:27:50
n°161948
Turkleton
I don't quite understand you
Posté le 14-05-2017 à 12:18:06  profilanswer
 

Pareil, y'a pas mal de références, mais y'a clairement pas tout. Mais peut-être qu'en regroupant plusieurs sites comme ceux ci-dessus je vais m'approcher de l'offre du site original :D


---------------
If you think it could look good, then I guess it should
n°162101
gizmo15
Posté le 15-05-2017 à 22:51:37  profilanswer
 

Bonsoir à tous,
 
Petite question: vous utilisez quoi comme soft pour dessiner les schéma de montage d'arduino?
 
j'ai trouvé fritzing mais je sais pas si ca répond à mon besoin: préparer simplement mes montages.
 
Merci

n°162104
Elbarto
Posté le 15-05-2017 à 23:40:17  profilanswer
 

j'utilise aussi fritzing :
 
http://fritzing.org/home/
 
ça devrait suffire pour le débutant
 

n°162117
M4vrick
Mad user
Posté le 16-05-2017 à 09:19:02  profilanswer
 

Pour du schéma Arduino je trouve aussi Fritzing très bien, c'est simple et tu vois immédiatement les éléments et où te brancher.


---------------
--== M4vr|ck ==--
n°162145
gizmo15
Posté le 16-05-2017 à 12:13:18  profilanswer
 

d'accord bas je vais tester ca, merci :jap:

n°162274
dureiken
Posté le 17-05-2017 à 09:58:17  profilanswer
 

Salut les gars
 
je viens de finir la partie acquisition/affichage des données de ma piscine :
 
http://reho.st/medium/self/dfe131282ea0536d895e2782d04d6b5f1d21ba89.png
 
grâce à vous, notamment rat_de_combat, car vous m'aviez bien aidé l'an dernier, je n'ai fait qu'améliorer le tout.
 
Je cherche maintenant à piloter le bouzin à distance, mais je but avec la fonction GET. Je me suis inspiré du tuto openclassroom, mais sans succes.
 
Je souhaite pouvoir changer ma variable Bypass : 0 ou 1, tout simple pour commencer :)
 

Code :
  1. void corps(EthernetClient cl) {
  2.     cl.print("<br>Bypass " );
  3.     cl.print(" " );
  4.     cl.print(Bypass);
  5.     cl.print(" <a href=?b" ); //création du lien inutile de répéter l'adresse du site
  6.     cl.println(" target=_self >Change</a><br>" );
  7. }
  8. //fonctin décodage GET
  9. void GET(EthernetClient cl) {
  10.   boolean lu = 0; //variable pour indiquer l'état de lecture
  11.   while (cl.available()) { // tant qu'il a des infos à transmettre
  12.     char c = cl.read(); // on lit le caractère
  13.     delay(1); //delai de lecture
  14.     if (c == '?' && lu == 0) { //si "?" repéré
  15.       c = cl.read(); //on lit le caractère suivant qui contient la donnée
  16.       if (c == "b" ) {
  17.         Bypass = 1;
  18.       }
  19.      
  20.       delay(10);
  21.       lu = 1; // on dit qu'on a lu l'info
  22.     }
  23.   }
  24. }


 
le lien marche bien, j'ai bien ?b
 
mais rien ne se passe sur bypass
 
Merci

n°162306
rat de com​bat
attention rongeur méchant!
Posté le 17-05-2017 à 13:55:08  profilanswer
 

Sans regarder la logique du code:
Active les warnings sur ton compilateur!! Arduino c'est le gcc, il faut rajouter -Wall dans ses paramètres, faut voir sur internet comment faire dans l'IDE Arduino (il font toujours pas ça par défaut?).

 
Citation :


>type t.cpp
void f()
{
        char c='a';
        if(     c == "b" );
}
>gcc -Wall t.cpp
t.cpp:4:11: warning: comparison with string literal results in unspecified behaviour [-Waddress]
t.cpp:4:11: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]

 

C'est ta comparaison qui n'est pas bonne.
"abc" ou même "a" c'est une chaine de caractère (string), donc un pointeur vers un espace mémoire qui contient le code ASCII des caractères à la suite (=un tableau) avec un '\0' comme dernier élément (convention).
'a' c'est un caractère, le compilateur remplace par le code ASCII==une valeur numérique.
Ta variable c c'est un char, donc une valeur numérique. Donc il te faut quelles guillemets autour de la valeur avec laquelle tu compares? ;)


Message édité par rat de combat le 17-05-2017 à 13:56:23
n°162348
dureiken
Posté le 18-05-2017 à 12:05:09  profilanswer
 

genial merci :)

 

sinon shift+compile ca met le debug tool

 

edit : et du coup on peut remplacer la lecture d'un seul character par un mot ?

 

genre 'bypass' au lieu de 'b'

Message cité 2 fois
Message édité par dureiken le 18-05-2017 à 12:09:49
n°162356
MossieurPr​opre
I d͟o̩n᷃'̵t͖ give a shit
Posté le 18-05-2017 à 14:27:05  profilanswer
 

dureiken a écrit :

genial merci :)
 
sinon shift+compile ca met le debug tool
 
edit : et du coup on peut remplacer la lecture d'un seul character par un mot ?
 
genre 'bypass' au lieu de 'b'


 
Il faut utiliser strcmp de String.h pour ça

n°162358
rat de com​bat
attention rongeur méchant!
Posté le 18-05-2017 à 14:30:32  profilanswer
 

dureiken a écrit :

edit : et du coup on peut remplacer la lecture d'un seul character par un mot ?

 

genre 'bypass' au lieu de 'b'

Tu veux dire if(c=='bypass') ? Non, car déjà 1) les guillemets simples c'est pour un seul caractère (qui devient un code ASCII) et 2) même avec les bons guillemets "bypass" tu vas comparer la valeur de c avec un pointeur (voir mon explication plus haut), c'est pas ce que tu veux. Pour comparer des chaînes de caractère en C c'est strcmp() qu'il faut, mais avec une variable de type char et non char[] pour c ça n'a pas de sens / ne fonctionnera pas.

 

edit: Les warnings doivent être TOUJOURS actives et je dirai même -Werror avec.

 

edit encore: strcmp c'est bon mais c'est du C et pour du char[]. En C++ (que l'Arduino utilises au moins en partie) il y a aussi les String qui permettent peut-être des comparaisons plus faciles mais je ne connais pas.


Message édité par rat de combat le 18-05-2017 à 14:35:52
n°162367
rat de com​bat
attention rongeur méchant!
Posté le 18-05-2017 à 15:35:32  profilanswer
 

Tu parles bien de ce tuto? J'ai très brièvement regardé le dernier code ("TP : Correction" ), bof... '0' serait bien plus clair que 48 et il manque du input validation / test contre out of bound access. Il se passe quoi si j'envoye "GET ...?9"? :o  
 
J'ai bricolé un truc pour un GET avec un ?argument=valeur à plusieurs caractères chacun. Utilisation entièrement à vos risques etc bien sûr. :o Vu l'interface très limitée (lecture d'un seul octet à la fois) que propose le EthernetClient et les faibles ressources du µC je ne vois pas vraiment l'intérêt de lire d'abord tout le truc reçu dans un buffer pour attaquer ensuite avec les fonctions de string.h.
 
Pour l'instant mon code ne supporte pas plusieurs paires argument=valeur (genre ?abc=123&xyz=789) mais ça peut se modifier. Concernant le traitement des infos reçus attention, on ne peut pas faire

Code :
  1. char str[42];
  2. [...]
  3. return str;


!!! Ca compile mais on aura un pointeur vers un espace mémoire qui "n'existe plus", c'est faux! (Avec String en C++ c'est peut-être une autre histoire, je ne sais pas.)
 
Ah oui, j'ai bricolé un truc ("ugly hack" ) pour pouvoir tester mon code sur ordi, ne regardez pas ça... :o  

Code :
  1. //UTILISATION A VOS RISQUES ETC
  2. //------------------------------------------------------------------------
  3. //bricolage très moche pour avoir un truc en C compilable sur ordi pour tester
  4. //ne regardez pas ça!!
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #define EthernetClient ec_t
  9. typedef struct
  10. {
  11.     int (*available)(void);
  12.     char (*read)(void);
  13. } ec_t;
  14. char getstr[]="blabla?abc=123";
  15. int pos_str=0;
  16. int av(void)
  17. {
  18.     if(pos_str<strlen(getstr))
  19.         return 1;
  20.     else
  21.         return 0;
  22. }
  23. char re(void)
  24. {
  25.     if(pos_str<strlen(getstr))
  26.         return getstr[pos_str++];
  27.     else
  28.         return '\0'; //comportement réel?
  29. }
  30. void get(EthernetClient cl);
  31. int main(void)
  32. {
  33.     ec_t ec;
  34.     ec.available=&av;
  35.     ec.read=&re;
  36.    
  37.     get(ec);
  38.    
  39.     return 0;
  40. }
  41. //------------------------------------------------------------------
  42. #define SZ_ARG 10
  43. #define SZ_VAL 10
  44. //CONVENTION NOMS:
  45. //?<argument>=<valeur>
  46. //NE SUPPORTE PAS plusieurs paires argument+valeur genre ?abc=123&xyz=789
  47. void get(EthernetClient cl) //majuscules (GET) réservées aux directives préprocesseur (par convention)
  48. {
  49.     char argument[SZ_ARG];
  50.     char valeur[SZ_VAL];
  51.     unsigned char state=0; //0== attente '?', 1== '?' trouvé et attente '=', 2== '=' trouvé
  52.     unsigned char nb_chars_arg=0, nb_chars_val=0;
  53.    
  54.     while (cl.available())
  55.     {
  56.         char c=cl.read();
  57.        
  58.         if(c=='?')
  59.             state=1;
  60.         else if(c=='=')
  61.             state=2;
  62.         else if(state==1)
  63.         {
  64.             if(nb_chars_arg<SZ_ARG-1) //laisser place pour '\0'!
  65.                 argument[nb_chars_arg++]=c;
  66.         }
  67.         else if(state==2)
  68.         {
  69.             if(nb_chars_val<SZ_VAL-1) //laisser place pour '\0'!
  70.                 valeur[nb_chars_val++]=c;
  71.         }
  72.     }
  73.    
  74.     argument[nb_chars_arg]='\0';
  75.     valeur[nb_chars_val]='\0';
  76.    
  77.     //faire quelque chose avec argument et valeur
  78.     //printf("%s=%s\n", argument, valeur);
  79. }

n°162370
dureiken
Posté le 18-05-2017 à 15:52:42  profilanswer
 

oui je parle de ce tuto
 
desole mais la suite c'est du charabia pour moi, j'ai vraiment pas le niveau en C
 
merci quand meme :)

n°162372
rat de com​bat
attention rongeur méchant!
Posté le 18-05-2017 à 15:59:51  profilanswer
 

dureiken a écrit :

desole mais la suite c'est du charabia pour moi, j'ai vraiment pas le niveau en C

T'es pas le seul "Arduinoicien" dans ce cas malheureusement... (ne le prends pas mal surtout!)

 

Pour mon code la première partie c'est juste un truc pour pouvoir tester sur ordinateur sans Arduino sous la main, ne regarde pas ça. Le code qui t'intéresse c'est la fonction get() et c'est des choses simples.

 

edit: Ou tu parles de mon 1er message à 14:30:32? Là c'est des bases auxquelles on n'échappe pas malheureusement...


Message édité par rat de combat le 18-05-2017 à 16:01:25
n°162378
dureiken
Posté le 18-05-2017 à 16:33:34  profilanswer
 

non de ton second message :)

n°162380
MossieurPr​opre
I d͟o̩n᷃'̵t͖ give a shit
Posté le 18-05-2017 à 16:38:05  profilanswer
 

Propre  [:implosion du tibia]  
 
Ligne 70 :
 

Code :
  1. if (c=='?' || c=='&')

Message cité 1 fois
Message édité par MossieurPropre le 18-05-2017 à 16:38:28
n°162385
rat de com​bat
attention rongeur méchant!
Posté le 18-05-2017 à 17:03:45  profilanswer
 

Merci! (à moins que ce soit ironique? :o )

Citation :

Ligne 70 :

Code :
  1. if (c=='?' || c=='&')


Pas tout à fait, pour "GET ...blabla?abc=123&xyz=789" on va obtenir un seul couple abcxyz=123789... Je vais modifier le code pour supporter plusieurs couples/paires argument=valeur, je reviens. (D'ailleurs la question se pose si on peut considérer que la chaîne reçue sera toujours valide au niveau syntaxe ou pas. Je pense que c'est une supposition risquée mais que je faisais en programmant, avec p.ex. "blabla?abc=123?oooo" on va obtenir n'importe quoi avec le code actuel. :o )
 
EDIT: Support de plusieurs paires <argument>=<valeur> y compris argument sans =<valeur> ou avec =<rien ici>. Gestion d'erreur rudimentaire (terminer la fonction) à développer.  
Attention: Si la fonction utiliser() prends beaucoup de temps on peut avoir des soucis si on reçoit une nouvelle requête GET entre-temps (comportement du code Arduino??), dans ce cas il vaudrait mieux d'abord parser le résultat complètement, sauvegarder les <argument>=<valeur> en mémoire et faire le traitement ensuite.
 

Code :
  1. #define SZ_ARG 10
  2. #define SZ_VAL 10
  3. //CONVENTION NOMS:
  4. //?<argument>=<valeur>[&<argument2>=<valeur2>...]
  5. void utiliser(char const * const arg, char const * const val)
  6. {
  7.     //faire quelque chose...
  8.     printf("%s=%s\n", arg, val);
  9. }
  10. void get(EthernetClient cl) //majuscules (GET) réservées aux directives préprocesseur (par convention)
  11. {
  12.     char argument[SZ_ARG];
  13.     char valeur[SZ_VAL];
  14.     unsigned char state=0; //0== attente '?', 1== '?' trouvé et attente '=', 2== '=' trouvé
  15.     unsigned char nb_chars_arg=0, nb_chars_val=0;
  16.    
  17.     while (cl.available())
  18.     {
  19.         char c=cl.read();
  20.        
  21.         if(c=='?')
  22.         {
  23.             if(state!=0) //erreur syntaxe
  24.                 return;
  25.             state=1;
  26.         }
  27.         else if(c=='=')
  28.         {
  29.             if(state!=1) //erreur syntaxe
  30.                 return;
  31.             state=2;
  32.         }
  33.         else if(c=='&')
  34.         {
  35.             if(state==0) //erreur syntaxe
  36.                 return;
  37.             argument[nb_chars_arg]='\0';
  38.             valeur[nb_chars_val]='\0';
  39.             utiliser(argument, valeur);
  40.             nb_chars_arg=0;
  41.             nb_chars_val=0;
  42.             state=1;
  43.         }
  44.         else if(state==1)
  45.         {
  46.             if(nb_chars_arg<SZ_ARG-1) //laisser place pour '\0'!
  47.                 argument[nb_chars_arg++]=c;
  48.         }
  49.         else if(state==2)
  50.         {
  51.             if(nb_chars_val<SZ_VAL-1) //laisser place pour '\0'!
  52.                 valeur[nb_chars_val++]=c;
  53.         }
  54.     }
  55.    
  56.     argument[nb_chars_arg]='\0';
  57.     valeur[nb_chars_val]='\0';
  58.    
  59.     utiliser(argument, valeur); //derniere paire
  60. }


Message édité par rat de combat le 18-05-2017 à 17:20:13
n°162481
dureiken
Posté le 19-05-2017 à 14:08:41  profilanswer
 

si je comprends bien ton bout de code, il permet dans mon cas par exemple d'avoir ?bypass ou même ?bypass=1
 
et d'en faire quelquechose ?
 
Merci

n°162522
rat de com​bat
attention rongeur méchant!
Posté le 19-05-2017 à 17:52:30  profilanswer
 

dureiken a écrit :

si je comprends bien ton bout de code, il permet dans mon cas par exemple d'avoir ?bypass ou même ?bypass=1

ou même ?bypass=1&nom=dureiken&autre_argument=42  :)
EDIT: Attention par contre, par défaut la longeur de chaque argument et valeur est limitée à 9 caractères, pour "autre_argument" il faudrait donc modifier SZ_ARG à 15 (14 caractères + le '\0' obligatoire).

 


Citation :

et d'en faire quelquechose ?

Dans la fonction utiliser() oui.


Message édité par rat de combat le 19-05-2017 à 18:33:59
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  132  133  134  135  136  137
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
** Le topic des réparations de vos appareils électroniques ** 
Plus de sujets relatifs à : [arduino] Topic Unique blabla @ Arduino



Copyright © 1997-2016 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR