Bonjour, Voilà je suis guitariste et J'ai commencé à construire un pédale Switcher pour manipuler mes pédales d'effets, et j'ai trouvé sur le net un programme ARDUINO qui me plait bien, et je voudrais y rajouter un écran nexion de
2.8 " avec un ARDUINO Mega 2560, et j'ai aussi commencé à faire mes menus sur Nextion, je fais de l'électronique mais en programmation Arduino je ne connais pas grand-chose, je peux vous envoyer le programme arduino puis le programme Nextion il y a aussi une vidéo sur YouTube du concepteur de ce programme arduino 5 Presets pour que vous puissiez bien comprendre le fonctionnement, mais je vais vous expliquer le fonctionnement.
Le pédale Switcher est composé de (8 Switch) avec 1 commutateur de 3 Positions, le but c'est de programmer les pédales d'effet désiré (Preset) avec le commutateur 3 positions, puis quand c'est programmé on as plus qu'à appuyer sur l'un des 8 switches avec le pied pour sélectionner les pédales programmé sur OUT mais si on ajoute l'écran nextion (NX3224T028) on est obligé de supprimer le commutateur sur le Rack car on fera la présélection de (presets) directement à l'écran ce qui pose pas de problème. Mais on garde les switches mécanique sur le Rack pour la sélection au pied bien entendu. Alors j'ai fait un programme sur le logiciel Nextion avec 9 Pages la page principale est la page 1, les autres pages ça seras pour visualiser les pédales que j'ai sélectionné qui correspond au presets, sur la page 1, il y a les 8 Bouton b22 à b 29 représentent les 8 Switchs comme sur le rack de pédale et il y a les 3 Boutons bt 30 à 32 qui représentent le Commutateur 3 positions , c'est cette page qui faut relier au programme Arduino et non pas les autres pages. J'ai aussi mis un Time à la page 0 et de la page 2 à 9 puis elle revient à La page 0, ainsi de suite.
Il y a aussi sur les autres pages, je voudrais que les BT restent activés quand ont les actionnent même quand on change de page et qu'on revient sur les pages, car quand j'actionne les Bt et que je reviens sur la page ils sont désactivés, et aussi les 3 Bt sur la page 1. Voilà si vous avez une solution au problème de programmation sur ce projet je vous serais bien reconnaissant car je galère vraiment !
Voici un lien du concepteur programme pour comprendre la fonction :
https://www.youtube.com/watch?v=OHk9vA2-ZIg&t=52s
PS pour le Fichier HMI (Nextion) s'il n'est pas sur le site dite le moi pour l'envoyer.
#include <EEPROM.h>
#include <Keypad.h>
int numberOfPedal = 8; /*adapter ce nombre à vos besoins = nombre de pédales à boucle
*/
const byte rows = 8; /*number of switches variable */
const byte cols = 3; /*the three mode of selector*/
char keys[rows][cols] = {
{'a','i','q'},
{'b','j','r'},
{'c','k','s'},
{'d','l','t'},
{'e','m','u'},
{'f','n','v'},
{'g','o','w'},
{'h','p','x'} /* {'y','z','0'}, {'1','2','3'}, {'*','%','!'} add more characters if needed */
};
byte rowPins[rows] = {22, 23, 24,25, 26,27, 28, 29}; /*switch pins 1 to 8 */
byte colPins[cols] = {30, 31, 32}; /*selector pins a to h/ i to p/ q to x */
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
int relayPin[8] = {33,34,35,36,37,38,39,40};
int ledPin[8] = {41,42,43,44,45,46,47,48};
byte midiChannel = 0;
int i;
int readOut;
/******************************************************/
void setup()
{
for(i=0; i<numberOfPedal; i++)
{
pinMode(relayPin[i], OUTPUT);
pinMode(ledPin[i], OUTPUT);
digitalWrite(relayPin[i],HIGH); //pullup all relay outputs in case off low level relayboard
delay(300);
digitalWrite(relayPin[i], LOW);
digitalWrite(ledPin[i], HIGH);
delay(300);
digitalWrite(ledPin[i], LOW);
}
readPreset(11, 1, 0); /* initiate default mode */
Serial.begin(31250); /* for midi communication - pin 1 TX */
delay(200);
}
/*********************************************************/
void midiProg(byte status, int data)
{
Serial.write(status);
Serial.write(data);
}
/*********************************************************/
void memory(int addr, int led)
{
for(i=0; i<numberOfPedal; i++)
{
EEPROM.write((addr) + i, digitalRead(relayPin[i]));
digitalWrite(ledPin[i], LOW);
}
delay(500);
digitalWrite(ledPin[led], HIGH);
delay(1000);
digitalWrite(ledPin[led], LOW);
delay(500);
digitalWrite(ledPin[led], HIGH);
delay(1000);
digitalWrite(ledPin[led], LOW);
delay(500);
digitalWrite(ledPin[led], HIGH);
delay(1000);
digitalWrite(ledPin[led], LOW);
delay(500);
digitalWrite(ledPin[led], HIGH);
delay(1000);
digitalWrite(ledPin[led], LOW);
}
/*********************************************************/
void writeOut(int relay)
{
digitalWrite(relayPin[relay], !digitalRead(relayPin[relay]));
digitalWrite(ledPin[relay], !digitalRead(relayPin[relay]));
}
/*********************************************************/
void readPreset(int addr, int pcNum, int led)
{
for(i=0; i<numberOfPedal; i++)
{
digitalWrite(relayPin[i], EEPROM.read((addr)+i));
digitalWrite(ledPin[i], LOW);
digitalWrite(ledPin[led], HIGH);
}
midiProg(0xC0, pcNum +1); /* send midi change program 1 */
}
/******************************************************/
void loop()
{
char key = keypad.getKey();
if(key) // Check for a valid key.
{
switch (key)
{
case 'a': /* 'a' to 'h' for 8 pedals- adapt it to the number you needs */
writeOut(0);
break;
case 'b':
writeOut(1); /* (relay number,led number) */
break;
case 'c':
writeOut(2);
break;
case 'd':
writeOut(3);
break;
case 'e':
writeOut(4);
break;
case 'f':
writeOut(5);
break;
case 'g':
writeOut(6);
break;
case 'h':
writeOut(7);
break;
/****************************** STORE PRESET MODE */
case 'i': /* same remark as previous */
memory(11,0);
break;
case 'j':
memory(21,1); /* (EEPROM address, led) */
break;
case 'k':
memory(31,2);
break;
case 'l':
memory(41,3);
break;
case 'm':
memory(51,4);
break;
case 'n':
memory(61,5);
break;
case 'o':
memory(71,6);
break;
case 'p':
memory(81,7);
break;
/****************************** READ PRESET MODE (EEProm address,PcNum,led number)*/
case 'q':
readPreset(11, 1, 0);
break;
case 'r':
readPreset(21, 2, 1);
break;
case 's':
readPreset(31, 3, 2);
break;
case 't':
readPreset(41, 4, 3);
break;
case 'u':
readPreset(51, 5, 4);
break;
case 'v':
readPreset(61, 6, 5);
break;
case 'w':
readPreset(71, 7, 6);
break;
case 'x':
readPreset(81, 8, 7);
break;
}
}
}