VIDEO
Objectifs du projet
Introduction à la commande d’une porte blindée
Savoir commander un actionneur linéaire
Savoir lire un clavier 4×4
Savoir mesurer le courant d’une charge avec Arduino
Savoir programmer la commande d’une porte blindée
Etc.
L’objectif du tuto est de tester le clavier 4×4 avec Arduino. Voir le tuto pour les détails techniques.
Architecture matérielle
Programme Arduino
#include <Keypad.h> #define MaxChar 4 #define TimeOut 4000 //4000mS int code[MaxChar]; const int CodeSecret[MaxChar]={1,2,3,4}; void setup() { // Affichage Serial.begin(115200); } void loop() { // Lecture & Affichage du code int a=getCode(code,MaxChar, TimeOut,0, 0); Serial.print(a); Serial.print(", "); for(int i=0;i<MaxChar; i++)Serial.print(code[i]); // Vérification int v=verifCode(code, CodeSecret,MaxChar); Serial.print(" ,CodeIsValid=");Serial.println(v); } int getCode(int *codeout,int num_c, unsigned long timeOut_ms,int init_val, int valid_val) { for(int i=0;i<num_c;i++)codeout[i]=0; // Init saisie long Tstart=(long)millis(); int id_code=0; while(1) { // Code validé int c=lireClavier(); if(c!=-1) { codeout[id_code]=c; id_code++; id_code=id_code%num_c; if (id_code==0) return 1; } if(valid_val!=0)return 1; // Init saisié if(init_val!=0) { for(int i=0;i<num_c;i++)codeout[i]=0; return -1; } // TimeOut long Tstop=(long)millis(); Tstop=Tstop-Tstart; if(Tstop>=timeOut_ms){return -1;} } } int lireClavier() { // Num lignes/colonnes const byte numL= 4; const byte numC= 4; // Map du clavier char keymap[numL][numC]={{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}}; // MSB-PORTA: lignes 0 à 3 byte rowPins[numL] = {29,28,27,26}; // LSB-PORTA: colonnes 0 à 3 byte colPins[numC] = {25,24,23,22}; //Init Clavier static Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numL, numC); // Lecture du clavier char code = myKeypad.getKey(); if (code == NO_KEY){return -1;} else{ switch(code){ case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; default: return -10; } } } int verifCode(int *code_in, int *code_secret, int nchar) { int j=0; for (int i=0;i<nchar; i++) { if(code_in[i]==code_secret[i])j++; } if(j==nchar)return 1; else return 0; }
Obtenir le livre « Codage en C du GRAFCET avec ARDUINO «