Go Down

Topic: probleme programme afficheur 4x 7segments (Read 298 times) previous topic - next topic

speed4501

Bonsoir

Je fais mes premier pas sur arduino.

je souhaite mesurer une température et l'afficher sur un afficheur 4x 7 segment
Mon kit à des tutos de fournis avec, donc j'ai fait un premier programme pour mesurer la température via un capteur TMP36.
j'ai voulu poursuivre en faisant un 2eme programme pour l'afficheur mais quand je le compile sa me met une erreur:

exit status 1
'Display' was not declared in this scope

voici le programme utiliser:
Code: [Select]

//display 1234
//Set cathode interface
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int dp = 8;
//Set anode interface
int d4 = 9;
int d3 = 10;
int d2 = 11;
int d1 = 12;
//Set variable
long n = 1230;
int x = 100;
int del = 55; //Here to fine tune the clock
void setup()
{
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(dp, OUTPUT);
}
/////////////////////////////////////////////////////////////
void loop()
{
Display(1, 1);
Display(2, 2);
Display(3, 3);
Display(4, 4);
}
///////////////////////////////////////////////////////////////
void WeiXuan(unsigned char n)//
{
switch(n)
{
case 1:
digitalWrite(d1,HIGH);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
break;
case 2:
digitalWrite(d1, LOW);
digitalWrite(d2, HIGH);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
break;
case 3:
digitalWrite(d1,LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, HIGH);
digitalWrite(d4, LOW);
break;
case 4:
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, HIGH);
break;
default :
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
break;
}
}
void Num_0()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
digitalWrite(dp,HIGH);
}
void Num_1()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(dp,HIGH);
}
void Num_2()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
digitalWrite(dp,HIGH);
}
void Num_3()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
digitalWrite(dp,HIGH);
}
void Num_4()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(dp,HIGH);
}
void Num_5()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(dp,HIGH);
}
void Num_6()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(dp,HIGH);
}
void Num_7()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(dp,HIGH);
}
void Num_8()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(dp,HIGH);
}
void Num_9()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(dp,HIGH);
}
void Clear() // Clear the screen
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(dp,HIGH);
}
void pickNumber(unsigned char n)//Choose the number of
{
switch(n)
{
case 0:Num_0();
break;
case 1:Num_1();
break;
case 2:Num_2();
break;
case 3:Num_3();
break;
case 4:Num_4();
break;
case 5:Num_5();
break;
case 6:Num_6();
break;
case 7:Num_7();
break;
case 8:Num_8();
break;
case 9:Num_9();
break;
default:Clear();
break;
}
}
void Display(unsigned char x, unsigned char Number)//Show that x is the coordinate, Number
is the number
{
WeiXuan(x);
pickNumber(Number);
delay(1);
Clear() ; //Vanishing
}


ce programme est sensé afficher 1234 sur l'afficheur.
je ne comprend pas l'erreur étant donné que j'ai recopier le code fournis dans le tuto de l'afficheur

kamill

Bonjour,

Tu as un commentaire qui déborde sur la ligne suivante dans la définition de Display()
Code: [Select]
void Display(unsigned char x, unsigned char Number)//Show that x is the coordinate, Number
is the number
Ce qui perturbe sa déclaration.

Corriges pour mettre la fin du commentaire sur la ligne du commentaire
Code: [Select]
void Display(unsigned char x, unsigned char Number)//Show that x is the coordinate, Number is the number

Tu devrais formater correctement ton code avec CTRL T ou CMD T car tel quel c'est illisible.

speed4501

merci de ta reponse.

J'ai modifier la ligne et l'afficheur fonctionne mais n'affichait pas du tout 1234 comme prévu.

J'ai trouvé un code tout fait pour afficher la température sur un 4x7 segment. je l'ai adapter à mon cablage et sa fonctionne:

 
Code: [Select]

//reading temperature and outputting to display
int sensorPin = 0;

//display pins
int segA = 1;
int segB = 2;
int segC = 3;

int segD = 4;
int segE = 5;
int segF = 6;
int segG = 7;
int segPt = 8;

int d1 = 12;

int d2 = 11;
int d3 = 10;
int d4 = 9;

int delayTime = 900;

int counter = 0;

float temperature = 77.7;

void setup() {
  // put your setup code here, to run once:
  //start serial communications
  Serial.begin(9600);

  //set up outputs
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(0, INPUT);
  delay(1000);
}

void loop() {

  // put your main code here, to run repeatedly:

  //only read temp every 100 cycles
  if (counter % 500 == 0)
  {
    // read the pin
    int reading = analogRead(sensorPin);
    //convert reading to volts
    float volts = (reading * 5.0);
    volts = volts / 1024.0;
    // Serial.print(volts);
    // Serial.println(" v");
    temperature = (volts - 0.5) * 100.0;
    Serial.print(temperature);
    Serial.println(" degrees Celsius");

    //test output to display
    // allHigh();
    //reset our counter
    counter = 0;
  }

  counter ++;

  selectDigit(1);
  sendDigit(tens(temperature));
  delayMicroseconds(delayTime);

  digitalWrite(d1, HIGH);
  selectDigit(2);
  sendDigit(ones(temperature));
  point();
  delayMicroseconds(delayTime);

  digitalWrite(d2, HIGH);
  selectDigit(3);
  sendDigit(points(temperature));
  delayMicroseconds(delayTime);
  //turn point off

  digitalWrite(d3, HIGH);
  digitalWrite(segPt, HIGH);
  selectDigit(4);
  cee();
  delayMicroseconds(delayTime);
  digitalWrite(d4, HIGH);



}

void allLow() {

  digitalWrite( 13, LOW); // A
  digitalWrite( 2, LOW); // B
  digitalWrite( 3, LOW); // C
  digitalWrite(4, LOW); // D
  digitalWrite(5, LOW); // E
  digitalWrite( 6, LOW); // F
  digitalWrite( 7, LOW); // G
  digitalWrite(8, LOW); //point
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);

}

void allHigh() {

  digitalWrite( 1, HIGH); // A
  digitalWrite( 2, HIGH); // B
  digitalWrite( 3, HIGH); // C
  digitalWrite(4, HIGH); // D
  digitalWrite(5, HIGH); // E
  digitalWrite( 6, HIGH); // F
  digitalWrite( 7, HIGH); // G
  digitalWrite(8, HIGH); //point
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);

}

void one()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segPt, LOW);

}
void two()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segPt, LOW);

}
void three()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segPt, LOW);

}
void four()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segPt, LOW);

}
void five()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segPt, LOW);

}
void six()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segPt, LOW);

}
void seven()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segPt, LOW);

}
void eight()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segPt, LOW);

}
void nine()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segPt, LOW);

}
void zero()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
  digitalWrite(segPt, LOW);

}

void cee()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
  digitalWrite(segPt, LOW);
}

void point()
{
  digitalWrite(segPt, HIGH);
}

void selectDigit(int d)
{
  /*
    digitalWrite(d1,HIGH);

    digitalWrite(d2,HIGH);
    digitalWrite(d3,HIGH);
    digitalWrite(d4,HIGH);
  */

  switch (d)
  {
    case 1:
      digitalWrite(d1, LOW);
      break;
    case 2:
      digitalWrite(d2, LOW);
      break;
    case 3:
      digitalWrite(d3, LOW);
      break;
    default:
      digitalWrite(d4, LOW);
      break;
  }
}

void sendDigit(int x)
{
  switch (x)
  {
    case 1:
      one();
      break;
    case 2:
      two();
      break;
    case 3:
      three();
      break;
    case 4:
      four();
      break;
    case 5:
      five();
      break;
    case 6:
      six();
      break;
    case 7:
      seven();
      break;
    case 8:
      eight();
      break;
    case 9:
      nine();
      break;
    case 10:
      cee();
      break;
    default:
      zero();
      break;
  }
}

int tens(float x)
{
  float divided = x / 10.0;
  return (int)divided;
}

int ones(float x)
{
  float divided = x - (10.0 * tens(x));
  // Serial.print(divided);
  // Serial.println(" ***ones***");
  return (int)divided;
}

int points(float x)
{
  float divided = x - (10.0 * tens(x)) - ones(x);
  divided *= 10;
  return (int)divided;
}


par moment sa fonctionne bien et à certain moment sa affiche 78°C alors que dans l'afficheur série j'ai bien des valeurs d'environ 20°C lu par le capteur

lesept

Je ne sais pas quel Arduino tu utilises, mais en général les pins 0 et 1 sont utilisées pour le liaison série avec l'ordinateur (pour afficher sur la console par exemple), or ton code les utilises aussi :
Code: [Select]
  pinMode(1, OUTPUT);
  pinMode(0, INPUT);
...
//reading temperature and outputting to display
int sensorPin = 0;

//display pins
int segA = 1;
...
  digitalWrite( 1, HIGH); // A
... etc ...


Peux-tu décrire comment tout ça est connecté (capteur, afficheur) ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

speed4501

#4
Apr 20, 2019, 01:47 pm Last Edit: Apr 20, 2019, 01:57 pm by speed4501
bonjour,

j'utilise un arduino uno

je suis branché comme sa:

capteur:

+ capteur sur "power 5V"
- capteur sur "power GND"
sortie capteur sur "analog in A0"

afficheur 3461AS :

borne 1 afficheur sur "digital pwm 12"
borne 2 afficheur sur "digital pwm 11"
borne 3 afficheur sur "digital pwm 10"
borne 4 afficheur sur "digital pwm 9"
borne a afficheur sur "digital pwm 1"
borne b afficheur sur "digital pwm 2"
borne c afficheur sur "digital pwm 3"
borne d afficheur sur "digital pwm 4"
borne e afficheur sur "digital pwm 5"
borne f afficheur sur "digital pwm 6"
borne g afficheur sur "digital pwm 7"
borne dp afficheur sur "digital pwm 8"

lesept

C'est un uno ? Je ne comprends pas tes "digital PWM n", la pin 4 par exemple n'est pas PWM sur un uno.
Essaye de ne pas utiliser la pin 1, change la pour une autre non utilisée.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

speed4501

merci, je viens de passer le pin 1 sur le 13 et de modifier le programme en conséquence et sa fonctionne bien.


Go Up