créé (Keypad) et afficher (LCD) une liste chaînée avec ARDUINO

Je désir créé une liste de référence : la référence est déterminée par un nombre à 8 chiffres (exemple:28562547) donc la lcd va m’afficher comme suit:

25468758
95569545
46456599
etc…

je pourrais ajouter une nouvelle référence à l’aide de la keypad

Ma question est si cela est réalisable??? voici mon début de code :

#include "Reference.h"
#include <SPI.h>
#include <LiquidCrystal.h>
#include <Keypad.h>

LiquidCrystal lcd (9);

char clavier[9];
int counter =0;
int value;

const byte ROWS = 4;
const byte COLS = 3;

char keys[ROWS][COLS]={
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS]={8,7,6,5};
byte colPins[COLS]={4,3,2};

Keypad keypad = Keypad(makeKeymap(keys),rowPins,colPins,ROWS,COLS);

llist my_liste=NULL;

void setup() {
  // put your setup code here, to run once:
  
lcd.begin(16,2);

}

void loop() {
  // put your main code here, to run repeatedly:
  
displayListe(my_liste);
my_liste=addNewReference(my_liste,value);

}

llist addNewReference(llist liste, int value){
getValue();
reference* newReference = malloc(sizeof(reference));
newReference->referenceNumber = value;
newReference->next=NULL;

if (liste ==NULL){
  return newReference;
}else{
  reference* temp = liste;
  while (temp->next!=NULL){
    temp = temp->next;
  }
  temp->next=newReference;
    return liste;
  }
 }

void getValue(){
  char key = keypad.getKey();
  if (key!= NO_KEY){
    clavier[counter++]=key;
    clavier[counter]='\0';

    if (key== '*'){
      value = atoi(clavier);
      counter=0;
    }
  }
}

 void displayListe(llist liste){
  reference *tmp=liste;
  while (tmp!=NULL){
    lcd.print(tmp->referenceNumber);
    tmp=tmp-> next;
  }
 }

Voici la bibliotheque Reference.h

#ifndef _REFERENCE_H_
#define _REFERENCE_H_

typedef struct reference reference;

struct reference {
  int referenceNumber;
  struct reference *next;
};

typedef reference *llist;



#endif

Bonjour

Oui bien sûr, cela peut se faire de manière tout à fait standard en C ou C++, tu trouveras des tonnes d'exemples sur le net. Par exemple https://openclassrooms.com/courses/apprenez-a-programmer-en-c/les-piles-et-les-files

La seule contrainte apportée par Arduino est l'exiguïté de sa RAM. Il est très déconseillé de jouer massivement avec de l'allocation / libération dynamique de mémoire (malloc ou New, free). Cela va morceller la ram disponible et conduire à des plantages difficiles à diagnostiquer.

Maintenant si c'est juste pour charger une conf de taille variable, qui ne changera pas pendant toute l'éxécution du programme, mis à part quelques ajustements déclenchés manuellement via un keypad alors oui c'est faisable.

Merci pour votre réponse,

Je vais vous approfondir un peu le programme pour que vous m'expliquer comment gérer les mémoires

les références que j'ajoute contiennent 2 paramètres :

  1. vitesse
  2. pas

ces deux paramètres sont aussi configuré par l'utilisateur .

ça donne un exemple comme ceci:

28584566 ----->vitesse : 455 tour/min ----->pas : 500 mm

55643591 ------->vitesse : 100 tour/min ------>pas : 10000 mm

etc........