• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zmiana wyświetlacza
#1
Witam chciałbym zamienić 8 segmentowy wyświetlacz na wyświetlacz lcd 16x2. Poniżej znajduję się kod programu, a w linku oryginalna wersja projektu.
http://arduining.com/2012/10/13/arduino-...ot-filled/

Za każdą pomoc będę bardzo wdzięczny 
Kod:
#include <Servo.h>
Servo myservo;  // create servo object to control a servo

#define ServoM    12        //Connected to the servo motor.
#define Bright    11        //servo library disable PWM on pins 9 and 10.
#define Exit      9         //Pin connected to the EXIT button.
#define In        8         //Pin connected to the IN button.

#define BarLow    177       //Low position of the barrier.
#define BarUp     95        //Up position of the barrier.
#define CAPACITY  8         //Capacity of the parking lot.
#define INTEN     80        //Display intensity %

//Pins conections to segments (cathodes).
#define  segA  0
#define  segB  1
#define  segC  2
#define  segD  3
#define  segE  4
#define  segF  5
#define  segG  6

//Array with the segments to represent the decimal numbers (0-9).
byte segments[10] = {
// pgfedcba  <--- segments
B00111111, // number 0
 B00000110, // number 1
 B01011011, // number 2
 B01001111, // number 3
 B01100110, // number 4
 B01101101, // number 5
 B01111101, // number 6
 B00000111, // number 7
 B01111111, // number 8
 B01101111  // number 9
};

void setup(){
 myservo.attach(ServoM);          // attaches the servo.

 pinMode(Exit, INPUT);           // set "EXIT" button pin to input
 pinMode(In, INPUT);             // set "IN" button pin to input
 digitalWrite(Exit, HIGH);       // Connect Pull-Up resistor.
 digitalWrite(In, HIGH);         // Connect Pull-Up resistor.
 pinMode(segA,OUTPUT);
 pinMode(segB,OUTPUT);
 pinMode(segC,OUTPUT);
 pinMode(segD,OUTPUT);
 pinMode(segE,OUTPUT);
 pinMode(segF,OUTPUT);
 pinMode(segG,OUTPUT);
 pinMode(Bright,OUTPUT);
 analogWrite(Bright,255*INTEN/100);
 myservo.write(BarLow);          //Barrier in the low position
//  delay(1000);
}

int  Available= 9;                    // Number of places available.

//================================================================
void loop(){
Display(Available);
if(digitalRead(In)==0)
{
 if(Available != 0){
   Available--;
   myservo.write(BarUp);
   delay(3000);
   myservo.write(BarLow);
   }
 }
if(digitalRead(Exit)==0)
{
 if(Available != CAPACITY){
   Available++;
   myservo.write(BarUp);
   delay(3000);
   myservo.write(BarLow);
   }
 }
}

/*-------------------------------------------------------------------
Put the segments according to the number.
--------------------------------------------------------------------*/
void Display(int number){
byte segs =  ~segments[number];        //"~" is used for commom anode.

digitalWrite(segA, bitRead(segs, 0) );
digitalWrite(segB, bitRead(segs, 1) );
digitalWrite(segC, bitRead(segs, 2) );
digitalWrite(segD, bitRead(segs, 3) );
digitalWrite(segE, bitRead(segs, 4) );
digitalWrite(segF, bitRead(segs, 5) );
digitalWrite(segG, bitRead(segs, 6) );
}
 
Odpowiedź
#2
Zastanawiam się dlaczego, przecież 7segementowy jest o wiele mniejszy i ładniej wygląda.
LCD z przejściówką na I2C czy bez?

Po prostu usuwasz co nie potrzebne z tego wyświetlacza 7 segment, dodajesz biblioteki od LCD inicjujesz go w setupie, i wyświetlasz numer na wyświetlaczu.

Kod:
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo;  // create servo object to control a servo

#define ServoM    12        //Connected to the servo motor.
#define Bright    11        //servo library disable PWM on pins 9 and 10.
#define Exit      9         //Pin connected to the EXIT button.
#define In        8         //Pin connected to the IN button.

#define BarLow    177       //Low position of the barrier.
#define BarUp     95        //Up position of the barrier.
#define CAPACITY  8         //Capacity of the parking lot.
#define INTEN     80        //Display intensity %

int Available = 9;
void setup(){
 myservo.attach(ServoM);
 lcd.begin();
 lcd.backlight(); // attaches the servo.

 pinMode(Exit, INPUT);           // set "EXIT" button pin to input
 pinMode(In, INPUT);             // set "IN" button pin to input
 digitalWrite(Exit, HIGH);       // Connect Pull-Up resistor.
 digitalWrite(In, HIGH);         // Connect Pull-Up resistor.

 myservo.write(BarLow);          //Barrier in the low position
//  delay(1000);
}


//================================================================
void loop(){
Display;
if(digitalRead(In)==0)
{
 if(Available != 0){
   Available--;
   myservo.write(BarUp);
   delay(3000);
   myservo.write(BarLow);
   }
 }
if(digitalRead(Exit)==0)
{
 if(Available != CAPACITY){
   Available++;
   myservo.write(BarUp);
   delay(3000);
   myservo.write(BarLow);
   }
 }
}

/*-------------------------------------------------------------------
Put the segments according to the number.
--------------------------------------------------------------------*/
void Display(){
lcd.setCursor(0,0);
lcd.print(Available);
}
Pozdrawiam
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości