Alors voilà, je travaille avec PsOC5LP et programme avec PsOC Creator.
J'aimerais créer une fonction qui suis ce déroulé:
1- Appui sur Bouton_1
2- LED_1 s'allume
3- Écris "test effectué" sur carte SD
4- Appui sur Bouton_1
5- LED_1 s'éteint
Du coup j'ai écris quelques lignes pour réaliser cette fonction mais je me rends compte que lorsque mon bouton reste en position 0 (car relié à la masse) ma Led s'allume mais la ligne 3- n’arrête pas de s'effectuer. Autre problème, il faut que le programme soit dans une boucle car il faut qu'il soit utilisable a tous moment dès que j’alimente mon PsOC.
Voila du coup ma question : Comment faire en sorte que la ligne 3- s’exécute qu'1 seule fois ?
for(;;)
{
if (BP_1_Read()==0)//Si Bouton_1 en position
FS_Write(pFile, "Test Alarme 1\n",15u),//permet d’écrire sur le fichier texte sur la carte SD
LED_1_Write(1),//Allume la LED
else
LED_1_Write (0);//Éteint la LED
}
Pour éviter de boucler, il faut utiliser un front. Il s'agît d'enregistrer l'état d'une variable en la copiant afin de pouvoir faire une comparaison de son état entre cycle N et cycle N-1.
Plus simple, oui, robuste pas certain. Et si on reste le doigt sur le bouton, il se passe quoi à la fin de ton delay ?
Un front, n'est vrai que sur un cycle de lecture, donc on peut rester appuyé sur le bouton des siècles, ce ne sera que l'évennement "on a appuyé sur le bouton" qui sera pris en compte :
bool btMem = !BP_1_Read(),
btRe = false,
ledSts = false;
while(true)
{
btOn = !BP_1_Read();
btRe = btOn && !btMem;
if (btRe)//Si Bouton_1 change d'état de 0 à 1
{
if(!ledSts)
FS_Write(pFile, "Test Alarme 1\n",15u),//permet d’écrire sur le fichier texte sur la carte SD
ledSts ^= true;
}
LED_1_Write(ledSts);
btMem = btOn;
}
Tes erreurs de partout, on n'y peut rien surtout si on ne voit pas le code.
Pour le booléen : C'est un type de données qui a deux constantes true et false, dont je te laisse deviner la signification. Si tu ne fais pas l'effort de te renseigner de façon un peu active, c'est sûr que la programmation ça va bloquer.
Je n'ai jamais dis que je ne me renseignais pas de mon côté, mais j'image que le Booléen en s'apprends pas du jour au lendemain.
Bien sûr que je cherche des réponses à mes erreurs mais ce messages avait surtout pour but de répondre à drx pour lui dire que je l'avais bien pris en compte.
Je vous poste quand même mon code avec erreurs.
J'ai bien compris que les erreurs étaient des erreurs de variable non déclarée, mais je ne sais à qu'elle valeur les déclarer.
#include <device.h>
#include <FS.h>
#include <string.h>
#include <Global.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
char sdFile[9] = "C-R.txt";
char transmittBuffer[30];
char pDirName;
int(Alarme1) = 0;
int(Alarme2) = 0;
int(Alarme3) = 0;
int(PorteAvant) = 0;
int(PorteArriere) = 0;
int(HautParleurVoyageurs) = 0;
int(HautParleurPorteAvant) = 0;
int(CoupureRadio) = 0;
int(MuteRadio) = 0;
int(BlocageValideur) = 0;
void NextStep(U16 step, char * str)
{
/* Clear LCD after previously completed operation */
LCD_ClearDisplay();
/* This will display step number on the LCD prior
every operation on the SD card.*/
LCD_Position(0u, 0u);
sprintf(transmittBuffer, "step# %d %s \n\r", step, str);
LCD_PrintString("Etape#");
LCD_PrintDecUint16(step);
LCD_Position(1u, 0u);
LCD_PrintString(str);
CyDelay(500u);
LCD_ClearDisplay();
}
int main()
{
LED_Rouge_Write(1);
char sdVolName[11]; /* Buffer that will hold SD card Volume name */
U16 Etape = 1u;
FS_FILE * pFile;
/* Allumage LCD */
LCD_Start();
/* Initatialisation file system */
FS_Init();
/* Affichage de l'étape */
NextStep(Etape++, "Nom de la Carte SD");
LCD_Position(0u, 0u);
/* Obtention du nom de la carte SD */
if(0 != FS_GetVolumeName(0u, &sdVolName[0], 9u))
{
/* Impression nom carte SD sur l'ecran */
LCD_PrintString("Nom de la Carte SD:");
LCD_Position(1u, 0u);
LCD_PrintString(sdVolName);
}
else
{
/* Si erreur d'obtention - Ecrir ceci */
LCD_PrintString("Erreur d'obtention");
LCD_Position(1u, 0u);
LCD_PrintString("Nom de la Carte SD");
}
CyDelay(500u);
/* Affichage du nom de l'étape */
NextStep(Etape++, "Format Carte SD");
LCD_Position(0u, 0u);
LCD_PrintString("Format carte SD:");
/* Obtention du nom du Format de la carte SD */
if(0 == FS_FormatSD(sdVolName))
{
/* Impression de la conformité du forma de la carte SD */
LCD_Position(1u, 0u);
LCD_PrintString("Conforme");
}
else
{
/* Impression de la non conformité du forma de la carte SD */
LCD_Position(1u, 0u);
LCD_PrintString("Erreur");
}
CyDelay(500u);
/* Affichage du nom de l'étape */
NextStep(Etape++, "C-R");
/* Création du fichier .txt sur la carte SD */
pFile = FS_FOpen("C-R.txt", "w+");
LCD_Position(0u, 0u);
if(pFile)
{
/* Impression confirmation création du fichier .txt */
LCD_PrintString("Document ");
LCD_PrintString(sdFile);
LCD_Position(1u, 0u);
LCD_PrintString("Dossier Cree");
}
else
{
/* Impression erreur de création du fichier .txt */
LCD_PrintString("Erreur de Creation");
}
CyDelay(2000);
LCD_ClearDisplay();
LCD_Position(0u, 0u);
LCD_PrintString("ECRITURE");
/*for(;;)
{
{
if (BP_1_Read()==0)
FS_Write(pFile, "Test Alarme 1\r\n",15u),
LED_1_Write (1);
//CyDelay(500);
else
LED_1_Write (0);
}
{
if (BP_2_Read()==0)
FS_Write(pFile, "Test Alarme 2\r\n",15u),
LED_2_Write (1);
//CyDelay(500);
else
LED_2_Write (0);
}
{
if (BP_3_Read()==0)
FS_Write(pFile, "Test Alarme 3\r\n",15u),
LED_3_Write (1);
//CyDelay(500);
else
LED_3_Write (0);
}
{
if (BP_4_Read()==0)
FS_Write(pFile, "Test Porte Avant\r\n",18u),
LED_4_Write (1);
//CyDelay(500);
else
LED_4_Write (0);
}
{
if (BP_5_Read()==0)
FS_Write(pFile, "Test Porte Arriere\n",20u),
LED_1_Write (1),
CyDelay(500);
else
LED_1_Write (0);
}
{
if (BP_6_Read()==0)
FS_Write(pFile, "Test Haut-Parleur Voyageur\n",28u),
LED_1_Write (1),
CyDelay(500);
else
LED_1_Write (0);
}
{
if (BP_7_Read()==0)
FS_Write(pFile, "Test Haut-Parleur Porte Avant\n",31u),
LED_1_Write (1),
CyDelay(500);
else
LED_1_Write (0);
}
{
if (BP_8_Read()==0)
FS_Write(pFile, "Test Coupure Radio\n",20u),
LED_2_Write (1),
CyDelay(500);
else
LED_2_Write (0);
}
{
if (BP_9_Read()==0)
FS_Write(pFile, "Test Mute Radio\n",17u),
LED_3_Write (1),
CyDelay(500);
else
LED_3_Write (0);
}
{
if (BP_10_Read()==0)
FS_Write(pFile, "Test Blocage Valideur\n",23u),
LED_1_Write (1),
CyDelay(500);
else
LED_1_Write (0);
}
{
if (BP_Sortie_Read()==0)
break;
}
}*/
bool btMem = !BP_1_Read(),
btRe = false,
ledSts = false;
while(true)
{
btOn = !BP_1_Read();//Erreur variable btOn non déclaré
btRe = btOn && !btMem;//Erreur variable btOn non déclaré
if (btRe)
{
if(!ledSts)
FS_Write(pFile, "Test Alarme1\n",15u),//permet d'écrir sur le fichier txt
ledSts ^= true;
}
LED_1_Write(ledSts);
btMem = btOn//Erreur variable btOn non déclaré
CyDelay(800);
LCD_ClearDisplay();
LCD_Position(0u, 0u);
{
if(0 == FS_FClose(pFile))
{
LCD_PrintString("Dossier fermee");
LED_Vert_Write(1);
LED_Rouge_Write(0);
}
else
{
LCD_PrintString("Erreur fermeture");
LED_Vert_Write(0);
LED_Rouge_Write(1);
}
}
}
/* [] END OF FILE */
* tu as déjà une erreur ligne 12, qui montre que tu ne sais pas déclarer une variable. Il faudrait commencer par ça : les bases.
* Désolé mais le type booleen s'apprend en 5 minutes. Une fois qu'on a dit qu'il s'appelait bool, qu'il avait deux constantes true et false, et les opérations &&, || et !, on a tout dit.
Pour faire bon poids, on peut parler de ses usages, comme stocker le résultat d'une condition
bool trop_petit = x < minimum;
bool trop_grand = x > maximum;
et bien sur, c'est pour l'utiliser ensuite
if (trop_petit || trop grand) {
...
}
mais pour ça, il faut se donner la peine de lire un peu.
Je ne vois pas le problème avec ma ligne 12, j'utilise cette variable depuis 4 mois dans un autre programme, écris exactement pareil, et je n'ai jamais eu de problème.
Aussi je ne pense pas avoir a justifier le fait d'avoir lu des articles sur le bool.
Car au risque de t'étonner, je prends la peine de lire un peu
Les parenthèses sont là car sur PsOC Creator il est souvent demandé de mettre entre parenthèses tous et n'importe.
Enfin bref, je cloture le sujet et vous remercie de votre participation
Executer action 1 seul fois
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Bonhomme !! | Jeu de plateforme : Prototype.
Bonhomme !! | Jeu de plateforme : Prototype.
Bonhomme !! | Jeu de plateforme : Prototype.
Bonhomme !! | Jeu de plateforme : Prototype.