Go Down

Topic: MAX7219 con 4 display 7 segmenti (Read 809 times) previous topic - next topic

milefori

Bene ragazzi,
grazie al suggerimento di Maurotec, il punto decimale e ok,

lo schema che avevo postato era quello che avevo fatto le prove,
ora invece posto lo schema del MAX (se serve posto anche il resto) sul quale stampo la temperatura letta con il DS18B20,

il programma e questo
Code: [Select]
/************************************************************************
*leggo il sensore DS18B20
*visualizzo la temperatura su 3 display a 7 segmenti
*utilizzo il draiver MAX7219
*
***********************************************************************/
#include "LedControl.h"
#include <OneWire.h>
#include <DallasTemperature.h>

/*********parte per leggere il sensoreDS**/
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tmp_address;
float temp0 = 0;
float temp = 0;
int gradi = 0;
int numberOfDevices;
/****************************************/
/////////////////////////(pin su arduino)
LedControl lc = LedControl(12, 11, 10, 1);//Pin del MAX (DIN, CLK, LOAD(CS), 1)

/**variabili e define per il calcolo del numero**/
//unsigned long delaytime = 250;
//int cunter = 0;
int tmp = 0; //variabile per il calcolo unita, decine, centinaia, migliaia
#define unita cifre[0]
#define decine cifre[1]
#define centinaia cifre[2]
byte cifre[3];
/*************************************/
void setup() {
//  Serial.begin(9600);

/**per display*************/
  lc.shutdown(0, false);
  lc.setIntensity(0, 10);
  lc.clearDisplay(0);

/*******per sensore**************/
  numberOfDevices = 1;
  sensors.begin();
  delay(1000);
}

void loop() {
sensors.requestTemperatures(); // Comando per leggere la temp.
temp0 = sensors.getTempCByIndex(0);
temp = temp0 * 10;
gradi = (int)temp;

  tmp = gradi;
for(byte i = 0; i < 3; i++){
  cifre[i] = tmp % 10;
  tmp = tmp /10;
}

  lc.setDigit(0, 2, (byte) centinaia, false);
  lc.setDigit(0, 1, (byte) decine, true);
  lc.setDigit(0, 0, (byte) unita, false);

  delay(50);

}

ora tutto funziona,
spero di non aver commesso errori
mille grazie a tutti voi

Maurotec

Quote
ora tutto funziona,
spero di non aver commesso errori
mille grazie a tutti voi
Ottimo, quindi hai anche risolto il problema con DIG0?

Ciao.

milefori

Ciao Maurotec

Code: [Select]
Ottimo, quindi hai anche risolto il problema con DIG0?
ora sto provando con il sensore, e il DIG0 funziona,

pero prima che provavo con due pulsanti e facevo un contattore up, down, non andava,
appena ho un po di tempo riprovo poi ti so dire,

milefori

Come promesso ho rifatto la prova,
chissà quale put... avevo fatto,
ora con questo programma va tutto bene, DIG0 e ok
Code: [Select]

#include "LedControl.h"

#define buton1 2
#define buton2 3


/////////////////////////(pin su arduino)
LedControl lc = LedControl(12, 11, 10, 1);//Pin del MAX (DIN, CLK, LOAD(CS), 1)

/**variabili e define per il calcolo del numero**/

int cunter = 0;
int tmp = 0; //variabile per il calcolo unita, decine, centinaia, migliaia
#define unita cifre[0]
#define decine cifre[1]
#define centinaia cifre[2]
byte cifre[3];
/*************************************/
void setup() {
//  Serial.begin(9600);

pinMode(buton1, INPUT_PULLUP);
pinMode(buton2, INPUT_PULLUP);

/**per display*************/
  lc.shutdown(0, false);
  lc.setIntensity(0, 10);
  lc.clearDisplay(0);
}

void loop() {
  if(digitalRead(buton1) == 0){
    cunter++;
  }
  else if(digitalRead(buton2) == 0){
    cunter--;
  }
  if(cunter == 999){
    cunter = 000;
  }

  tmp = cunter;
for(byte i = 0; i < 3; i++){
  cifre[i] = tmp % 10;
  tmp = tmp /10;
}

  lc.setDigit(0, 2, (byte) centinaia, false);
  lc.setDigit(0, 1, (byte) decine, false);
  lc.setDigit(0, 0, (byte) unita, false);

  delay(50);

}

mille grazie per il tuo interessamento

Go Up