Matrix max7219 modules bouton

Bonsoir,

1 an plus tard je reviens sur ce forum pour demander votre aide.

Je possède 4 module matrix7219 de ce genre :
module max7219

Je les ai relié ensemble et j’ai utiliser les libraires de gammon :
Gammon

Cela marche bien.

Maintenant ce que j’aimerais faire c’est ajouter 5 boutons (cela : bouton)

Le 1er bouton : affichera le 1er texte
Le 2eme bouton : affichera le 2eme texte
Le 3eme bouton : affichera le 3eme texte
Le 4eme bouton : modifie la vitesse -
Le 5eme bouton : modifie la vitesse +

Au démarrage le 1er texte s’affichera

J’ai essayer mais quand j’appuie le texte ne reste pas après que je relâche le bouton

Code Original :

// Demo of MAX7219_Dot_Matrix library - sideways scrolling
// Author: Nick Gammon
// Date: 2 October 2015

// Scrolls a pixel at a time.

#include <SPI.h>
#include <bitBangedSPI.h>
#include <MAX7219_Dot_Matrix.h>
const byte chips = 4;

// 12 chips (display modules), hardware SPI with load on D10
MAX7219_Dot_Matrix display (chips, 10);  // Chips / LOAD 

const char message [] = "JORIS VIDEO ! jorisvideo.fr & v2.jorisvideo.fr Youtube.com/channel/UCA74g6_ra_TosdG33jVgHmA";
 
void setup ()
  {
  display.begin ();
  }  // end of setup

unsigned long lastMoved = 0;
unsigned long MOVE_INTERVAL = 20;  // mS
int  messageOffset;

void updateDisplay ()
  {
  display.sendSmooth (message, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay

void loop () 
  { 
    
  // update display if time is up
  if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }

  // do other stuff here    
     
  }  // end of loop

Code modifié pour bouton :

// Demo of MAX7219_Dot_Matrix library - sideways scrolling
// Author: Nick Gammon
// Date: 2 October 2015

// Scrolls a pixel at a time.

#include <SPI.h>
#include <bitBangedSPI.h>
#include <MAX7219_Dot_Matrix.h>
const byte chips = 4;
int d=2;

// 12 chips (display modules), hardware SPI with load on D10
MAX7219_Dot_Matrix display (chips, 10);  // Chips / LOAD 

const char message [] = "Test ! CA MARCHE !!!";
const char message2 [] = "test 2 !"; 
void setup ()
  {
    
pinMode(2,INPUT);
  display.begin ();
  }  // end of setup

unsigned long lastMoved = 0;
unsigned long MOVE_INTERVAL = 20;  // mS
int  messageOffset;

void updateDisplay ()
  {
  display.sendSmooth (message, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay


void updateDisplay2 ()
  {
  display.sendSmooth (message2, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message2) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay2


void loop () 
  { 
    
  // update display if time is up
  

  d=digitalRead(2);
  
if(d==0)
{
if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay2 ();
    lastMoved = millis ();
    }
    
}
    else
 {   
if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }
 }
  
  
  // do other stuff here    
     
  }  // end of loop

Voilà, si quelqu’un peut m’aider.

Merci d’avance

Cdt

bonjur, il faut créér une variable compteur par exemple. A chaque appuie sur le bouton incrémente le compteur. comme ça tu peux avoir plusieurs messages.

en suite: if compteur ==0 message if compteur ==1 message 2

etc.

A+ yan_duino

Merci pour ta réponse

Je vois pas.

Je suis pas fort en code.

Merci d'avance

Ici un test avec 2 bouton pour essayer.

J’ai fait ça mais cela ne marche pas, le premier et le deuxième texte s’affiche en même temps au démarrage par contre si j’appuie sur le bouton 1 le premier texte s’affiche et si j’appuie sur le bouton 2 cela fait pareil qu’au démarrage.

// Demo of MAX7219_Dot_Matrix library - sideways scrolling
// Author: Nick Gammon
// Date: 2 October 2015

// Scrolls a pixel at a time.

#include <SPI.h>
#include <bitBangedSPI.h>
#include <MAX7219_Dot_Matrix.h>
const byte chips = 4;
const int  buttonPin = 2;
const int  button2Pin = 3;
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;

// 12 chips (display modules), hardware SPI with load on D10
MAX7219_Dot_Matrix display (chips, 10);  // Chips / LOAD 

const char message [] = "Test ! CA MARCHE !!!";
 const char message2 [] = "test 2 !"; 
void setup ()
  {
    pinMode(buttonPin, INPUT);
    pinMode(button2Pin, INPUT);
  display.begin ();
  }  // end of setup

unsigned long lastMoved = 0;
unsigned long MOVE_INTERVAL = 20;  // mS
int  messageOffset;

void updateDisplay ()
  {
  display.sendSmooth (message, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay

void updateDisplay2 ()
  {
  display.sendSmooth (message2, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message2) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay2


void loop () 
  { 
    
    buttonState = digitalRead(buttonPin);
    
    // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    } else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off");
    }
    // Delay a little bit to avoid bouncing
    delay(50);
  }
  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;


  // turns on the LED every four button pushes by
  // checking the modulo of the button push counter.
  // the modulo function gives you the remainder of
  // the division of two numbers:
  
  
  if (buttonPushCounter % 4 == 0) 
  
  {
  if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }
    
  } 
  
  else 
  
  {
    if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }
    
  }


//bouton 2

    buttonState = digitalRead(button2Pin);
    
    // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    } else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off");
    }
    // Delay a little bit to avoid bouncing
    delay(50);
  }
  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;


  // turns on the LED every four button pushes by
  // checking the modulo of the button push counter.
  // the modulo function gives you the remainder of
  // the division of two numbers:
  
  
  if (buttonPushCounter % 4 == 0) 
  
  {
  if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay2 ();
    lastMoved = millis ();
    }
    
  } 
  
  else 
  
  {
    if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }
    
  }
  // update display if time is up
  

  // do other stuff here    
     
  }  // end of loop

J’ai trouver ça sur internet :

J’ai essayer et cela marche correctement. Aucun probème. Par contre je sais pas comment ajouter un 3ème bouton dans le code.

// Demo of MAX7219_Dot_Matrix library - sideways scrolling
// Author: Nick Gammon
// Date: 2 October 2015

// Scrolls a pixel at a time.

#include <SPI.h>
#include <bitBangedSPI.h>
#include <MAX7219_Dot_Matrix.h>
const byte chips = 4;




const int but1 = 2;
const int but2 = 3;

int but1State = 0;
int but2State = 0;
int but1Now;
int but2Now;

int value1;
int value2;

// 12 chips (display modules), hardware SPI with load on D10
MAX7219_Dot_Matrix display (chips, 10);  // Chips / LOAD 

const char message [] = "Test ! CA MARCHE !!!";
 const char message2 [] = "test 2 !"; 
void setup ()
  {


  display.begin ();
  }  // end of setup

unsigned long lastMoved = 0;
unsigned long MOVE_INTERVAL = 20;  // mS
int  messageOffset;

void updateDisplay ()
  {
  display.sendSmooth (message, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay

void updateDisplay2 ()
  {
  display.sendSmooth (message2, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message2) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay2


void loop () 
  { 
    
    //code pour texte au démarrage
      if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }  
    
    //code pour bouton
    but1Now = digitalRead(but1);
    delay(5);
    int but1Now1 = digitalRead(but1);

    if(but1Now == but1Now1) 
    {
        if(but1Now != but1State)
        {
            value1 = 1;
            value2 = 0;
            //show(img2);
        }

        but1State = but1Now;
    }

    but2Now = digitalRead(but2);
    delay(5);
    int but2Now1 = digitalRead(but2);

    if(but2Now == but2Now1) 
    {
        if(but2Now != but2State)
        {
            value1 = 0;
            value2 = 1;
            //show(img2);
        }

        but2State = but2Now;
    }

    if(value1 == 1)
    {
        
      //ici l'action a effectuer le bouton 1 est appuyer
      
        if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }
        
        
        
    }

    if(value2 == 1)
    {
      
      //ici l'action a effectuer le bouton 2 est appuyer
        
      if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay2 ();
    lastMoved = millis ();
    }  
       
    }

  }  // end of loop

J’ai réussi ! Avec 3 boutons.

// Demo of MAX7219_Dot_Matrix library - sideways scrolling
// Author: Nick Gammon
// Date: 2 October 2015

// Scrolls a pixel at a time.

#include <SPI.h>
#include <bitBangedSPI.h>
#include <MAX7219_Dot_Matrix.h>
const byte chips = 4;




const int but1 = 2;
const int but2 = 3;
const int but3 = 4;

int but1State = 0;
int but2State = 0;
int but3State = 0;
int but1Now;
int but2Now;
int but3Now;
int value1;
int value2;
int value3;
// 12 chips (display modules), hardware SPI with load on D10
MAX7219_Dot_Matrix display (chips, 10);  // Chips / LOAD 


const char message [] = "Test ! CA MARCHE !!!";
 const char message2 [] = "test 2 !"; 
 const char message3 [] = "IT WORKS !!"; 
void setup ()
  {


  display.begin ();
  }  // end of setup

unsigned long lastMoved = 0;
unsigned long MOVE_INTERVAL = 20;  // mS
int  messageOffset;

void updateDisplay ()
  {
    
  display.sendSmooth (message, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay

void updateDisplay2 ()
  {
    
  display.sendSmooth (message2, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message2) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay2


void updateDisplay3 ()
  {
    
  display.sendSmooth (message3, messageOffset);
  
  // next time show one pixel onwards
  if (messageOffset++ >= (int) (strlen (message3) * 8))
    messageOffset = - chips * 8;
  }  // end of updateDisplay2

void loop () 
  { 
    
    //code pour texte au démarrage
      if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }  
    
//---------------------------------------------------------------------------

    //code pour bouton 1
    but1Now = digitalRead(but1);
    delay(5);
    int but1Now1 = digitalRead(but1);

    if(but1Now == but1Now1) 
    {
        if(but1Now != but1State)
        {
            value1 = 1;
            value2 = 0;
            value3 = 0;
            //show(img2);
        }

        but1State = but1Now;
    }

//---------------------------------------------------------------------------
//code pour bouton 2
    but2Now = digitalRead(but2);
    delay(5);
    int but2Now1 = digitalRead(but2);

    if(but2Now == but2Now1) 
    {
        if(but2Now != but2State)
        {
            value1 = 0;
            value2 = 1;
            value3 = 0;
            //show(img2);
        }

        but2State = but2Now;
    }

//---------------------------------------------------------------------------
//code pour bouton 3
but3Now = digitalRead(but3);
    delay(5);
    int but3Now1 = digitalRead(but3);

    if(but3Now == but3Now1) 
    {
        if(but3Now != but3State)
        {
            value1 = 0;
            value2 = 0;
            value3 = 1;
            //show(img2);
        }

        but3State = but3Now;
    }




    if(value1 == 1)
    {
        
      //ici l'action a effectuer le bouton 1 est appuyer
      
        if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay ();
    lastMoved = millis ();
    }
        
        
        
    }

    if(value2 == 1)
    {
      
      //ici l'action a effectuer le bouton 2 est appuyer
        
      if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay2 ();
    lastMoved = millis ();
    }  
       
    }

if(value3 == 1)
    {
      
      //ici l'action a effectuer le bouton 2 est appuyer
        
      if (millis () - lastMoved >= MOVE_INTERVAL)
    {
    updateDisplay3 ();
    lastMoved = millis ();
    }  
       
    }




  }  // end of loop

Juste un truc qui ne me plait pas :

Quand j’appuie sur un bouton l’autre texte s’affiche mais forcement pas depuis le début.

Si quelqu’un sait comment régler ça.

Merci d’avance