[Résolu] Débutant en Arduino Need Help !

// A Fermer , Le problème a été résolu !

Bonjours a tous ! 8) Depuis quelques jours, je me suis lancé dans l’arduino, j’ai une Uno et j’ai très peu d’expérience sur le code Processing modifier pour l’Arduino . Donc après les essaie classiques j’ai écrit un code intégarlement dont le but est de faire clignoter 2 LEDs en Différé .
Le Code :

void setup() {
pinMode(9, OUTPUT);
pinMode(3, OUTPUT);
}

void loop() {
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
int digitalRead(9);
do {
digitalWrite(3, HIGH); // set the LED on
delay(1000);
sensorValue = analogRead(9);
} while (sensorValue < 512);
}

Malgré que tout sembke correcte, j’ai un message d’erreur récurent :

Test__While_.cpp: In function ‘void loop()’:
Test__While_:14: error: ‘sensorValue’ was not declared in this scope
Test__While_:15: error: ‘sensorValue’ was not declared in this scope

Si vous pouviez m’aider , merci ! :slight_smile:

Salut,

ta variable "sensorValue " n'est déclarée nulle part.
Il te faut la déclarer soit en tant que variable globale en tête de sketch

int sensorValue =0;

ou simplement corriger la ligne si tu n'utilises pas cette variable ailleurs.

int sensorValue = analogRead(9);

Gromain

Bonjour, ton erreur est simple regarde:

int sensorValue=0;
int digitalValue=0;
void setup() {
  pinMode(9, OUTPUT);
  pinMode(3, OUTPUT);
}

void loop() {
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(1000);
 digitalValue=digitalRead(9);
 while(sensorValue < 512)
{
      digitalWrite(3, HIGH);   // set the LED on
      delay(1000);
      sensorValue = analogRead(9);
 }
}

Voila monsieur, je pense que ça devrais être bon, tu n’avais pas déclaré toute tes variable et tu avait mis un int devant un digitalRead = inutile ^^
à la limite int a= digitalRead la oui d’ailleur à mon souvenir il n’y a pas de d’I/O analogique 9… bref je te laisse ce problème pour t’échauffer ^^

en espèrent que ça t’aide, vue la simplicité de ton programme tu reviendra vite vers nous pour d’autre projet plus intéressent ^^

peace

Skizo !

void loop() {
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
int digitalRead(9); *********** CA FAIT QUOI CA !!! LIGNE A SUPPRIMER - NE VEUT RIEN DIRE
do {
digitalWrite(3, HIGH); // set the LED on
delay(1000);
sensorValue = analogRead(9); *************** VARIABLE NON DECLAREE il faut ecrire : int sensorValue = analogRead(9);
DE PLUS SUR LA UNO IL N’Y A PAS D’ENTREE ANALOGIQUE A9
} while (sensorValue < 512); **************** CA C’EST UNE BOUCLE INFINIE CAR A9 DONNERA TOUJOURS 0
}

Pour le langage C je te conseille la lecture du Kernighan & Ritchie.

JLB

Yop Yop,
Vu le titre et le tag [help] je m'attendais à des morts ... :grin:
Un petit passage par ici avant de poster Arduino Forum .
balise [code][/code] pour exposer le code et non [quote][/quote] (boutton -> #).

Test__While_.cpp: In function 'void loop()':
Test__While_:14: error: 'sensorValue' was not declared in this scope
Test__While_:15: error: 'sensorValue' was not declared in this scope

Pour ton problème, comme le msg d'erreur te le précise : sensorValue n'es pas déclaré ...

int digitalRead(9);

Il y a un petit "int" en trop ici ...

Je détecte un petit problème de compréhension sur ce que sont les variables ?

Ha ah ! En effait ! Maintenant le Code marche , ( Du moins en Compilation ), je le test et je reviens vous dire comme ça c'est passé .

Pour t'aider dans ta prise en main de la UNO je te conseille cet outils que j'ai publié dans un autre post.

JLB

Voila , le code Marche comme je le voulais , Merci a tous ! Je viens juste d’arriver , je repasserai présenter des programmes plus intéressant .
So long !

Bon ça va alors à plus tard avec un vrai problème :stuck_out_tongue:

et pour tes variable rappel toi que:

char = 1 octet = 1 caractere ASCII 'a' 'z' etc

byte = 1 octet = 2 caractere HEXA 0x45 0xFF

int = 2 a 4 octet = entier 348 5784

float = 4 octet = chiffre a virgule 1.25 745.25

après pour faire des tableau de ces variable tu utilise les caractère "[2]" avec a la place du nombre le nombre de case de ton tableau

exemple:

char tab[5]={'a','b','c','d','e'}; => tab[0]='a'; tab[1]='b'; etc..

voila pour tes début ça t'aidera peut être :slight_smile:

Skizo !

N07070:
// A Fermer , Le problème a été résolu !

[quote author=Réglement et charte du forum… à lire impérativement avant de poster]
Les titres de vos topics…

Utilisez un titre explicite ! Les sujets ayant pour titre “Help”, “A l’aide”, “Au secours” et assimilés… seront supprimés ou édités. Exposez clairement votre question. Evitez également d’écrire des titres tout en MAJUSCULES !

Les Tags réglementaires

[Résolu] : Pour les sujets dont la solution a été trouvée
[Non réglé] : Pour les sujets dont la solution n’a pas été trouvée
[Info] : Sujet d’information
[Conseil] : Demande de conseil
[Débat] : Sujet pour débattre d’un sujet bien précis
: Pour demander à supprimer votre sujet “en cas d’erreur ou de double topic”
[sondage] : Ce qui concerne les sondages[/quote]

Ok, je prend note , merci de m'avoir aider !

skizoh:
et pour tes variable rappel toi que:

char = 1 octet = 1 caractere ASCII ‘a’ ‘z’ etc

byte = 1 octet = 2 caractere HEXA 0x45 0xFF

int = 2 a 4 octet = entier 348 5784

float = 4 octet = chiffre a virgule 1.25 745.25

Pas bien skiski

char = 1 octet = nb de -128 à +127 = (0 à 127 seulement) représentation des caractères ascii

byte = 1 octet = unsigned char = en decimal nb de 0 à 255 = représentation Hexa : 0x00 à 0xFF

int = 2 octet = en decimal nb de -32.768 à +32.767
unsigned int = 2 octet = en decimal nb de 0 à 65.535 = Hexa nb de 0x0000 à 0xFFFF

long = 4 octet = en decimal nb de -2.147.483.648 à 2.147.483.647 = …
unsigned long = 4 octet = en decimal nb de 0 à 4.294.967.295 = …

.
.
.

Je me répète mais pour le langage C la bible c’est le Kernighan & Ritchie.

Version francaise aux éditions MASSON.

JLB

Sinon tous les types définis par Arduino sont listés ici, "Data Types".

La pratique ne suffit pas pour devenir un programmeur efficace et rapide en langage C.

Il y a des concepts et des conventions que l'on ne peut pas deviner (sauf si l'on est déja un expert dans les concepts et les langages informatiques).

JLB

osaka:

skizoh:
et pour tes variable rappel toi que:

char = 1 octet = 1 caractere ASCII 'a' 'z' etc

byte = 1 octet = 2 caractere HEXA 0x45 0xFF

int = 2 a 4 octet = entier 348 5784

float = 4 octet = chiffre a virgule 1.25 745.25

Pas bien skiski

char = 1 octet = nb de -128 à +127 = (0 à 127 seulement) représentation des caractères ascii

byte = 1 octet = unsigned char = en decimal nb de 0 à 255 = représentation Hexa : 0x00 à 0xFF

int = 2 octet = en decimal nb de -32.768 à +32.767
unsigned int = 2 octet = en decimal nb de 0 à 65.535 = Hexa nb de 0x0000 à 0xFFFF

long = 4 octet = en decimal nb de -2.147.483.648 à 2.147.483.647 = ...
unsigned long = 4 octet = en decimal nb de 0 à 4.294.967.295 = ...

.
.
.

hum hum mise à part le détail je vois pas ce qui change mais bon..

Parce qu'une variable a 3 propriétés :

Sa taille : 1, 2, 4 octets pour les processeurs 8 & 16 bits.
1, 4, 4 octets pour les processeurs 32 bits (c'est pour cela qu'il existe le type int16).

Sa réalité numérique binaire : signée (règle du complément à 2).
non signée.

Son type au niveau langage - numérique signé : int, long.
numérique non signé : char, unsigned int, unsigned long.

Je passe sous silence les float et double dont la représentation binaire est plus compliquée.

Les strings ne sont pas un type de base. Une variable de type String est en fait un pointeur sur une chaîne d'octets.

type char - representation binaire de 00000000 à 11111111
representation hexadecimale de 00 à FF.
representation decimale de 0 à 255.
representation ASCII de "§" à "~" plus quelques valeurs de contrôle (ex BACK SPACE, CR, LF,...) et le jeu ASCII étendu
entre 0x80 et 0xFF (128 à 255).

type int - representation binaire de 0000000000000000 à 1111111111111111
representation hexadecimale de 0000 à FFFF.
representation decimale de -32768 à 32767.

type unsigned int - representation binaire de 0000000000000000 à 1111111111111111
representation hexadecimale de -8000 à 7FFF.
representation decimale de -32768 à 32767.

etc...

GLOUP… Une petite erreur de copier coller… Il faut lire :

Parce qu’une variable a 3 propriétés :

Sa taille : 1, 2, 4 octets pour les processeurs 8 & 16 bits.
1, 4, 4 octets pour les processeurs 32 bits (c’est pour cela qu’il existe le type int16).

Sa réalité numérique binaire : signée (règle du complément à 2).
non signée.

Son type au niveau langage - numérique signé : int, long.
numérique non signé : char, unsigned int, unsigned long.

Je passe sous silence les float et double dont la représentation binaire est plus compliquée.

Les strings ne sont pas un type de base. Une variable de type String est en fait un pointeur sur une chaîne d’octets.

type char - representation binaire de 00000000 à 11111111
representation hexadecimale de 00 à FF.
representation decimale de 0 à 255.
representation ASCII de “§” à “~” plus quelques valeurs de contrôle (ex BACK SPACE, CR, LF,…) et le jeu ASCII étendu
entre 0x80 et 0xFF (128 à 255).

type int - representation binaire de 0000000000000000 à 1111111111111111
representation hexadecimale de -8000 à 7FFF.
representation decimale de -32768 à 32767.

type unsigned int - representation binaire de 0000000000000000 à 1111111111111111
representation hexadecimale de 0000 à FFFF.
representation decimale de 0 à 65535.

etc…

skizoh:
hum hum mise à part le détail je vois pas ce qui change mais bon..

C'est justement ses nombreux détails manquants qui peuvent induire en erreur et une compréhension erronée aux débutants ...

Par exemple :

char = 1 caractere ASCII 'a' 'z' etc

Affirmer ceci est faux, Il faut bien montrer que malgré son nom "trompeur" ce sont bien des nombres signé sous forme de caractère, nb decimal, hexa qu'un char prend pour valeur (-128 à + 127), d'ailleurs les nombres négatifs n'ont aucune correspondance ascii ...
Donc il peut mais ne doit pas obligatoirement prendre pour valeur la correspondance ascii des caractères.

char c;
c = 'A';
c = 65; 
c = 0x41;

c = -52;

byte = 2 caractere HEXA 0x45 0xFF

Les variables de type byte ne sont rien d'autre que des char non signé (nombre de 0 à 255) donc comme le type char elles prennent pour valeur des nombres que ce soit sous forme decimal, hexa, binaire ou même ascii ...
Dans "45" et "FF" on parlera plutôt de digit représenté par les symboles 0->9 et A->F et non de caractères.

byte b;
b = 'A';
b = 65;
b = 0x41;

int = 2 a 4 octet = entier 348 5784

Pour l'atmega c'est 2 octet,4 c'est le type long et ne pas oublier les valeurs négatives sinon passé en non signé (unsigned).

Enfin bref c'est à cause de ses petits détails manquant que la plupart des débutants utilisent un int pour des valeurs qui ne dépasseront jamais 255 ou même 1 pour les booléens ...

Exemple :

int maSortie = 5;
digitalWrite(maSortie, 1);

Utiliser un int alors qu'un char ou byte aurait suffit vu que l'arduino ne dispose même de 127 I/O ...

non mais on est bien d'accord sur tout ça je connais tant fait pas mais tu pense que quand tu débute dans la programmation le premier truc que tu fait c'est regarder si c'est signer ou uint 16? moi je lui donne les renseignement qu'il utilisera maintenant toute de suite, quand tu connais pas trop les variable c'est que en générale tu t'y connais encore moins bien en signé pas signé etc donc j'ai fait simple, je sais que les gens ici aime bien balancer une bible quand on leur demande un livre de poche mais c'est pas une raison pour te sentir obligé de me sortir ça, tant fait pas pour moi je connais très bien tous ça et pour lui à mon avis c'est rentré par une oreille ressorti par l'autre mais ça ça reste mon avis :wink:

Skizo !