Calculateur arduino ALTAIR 8800 like

Bonjour a tous :slight_smile:

Aujourd’hui j’ai décidé de faire un petit calculateur avec les moyens du bord inspiré de l’ALTAIR 8800 aka le premier vrai ordinateur équipé d’un microprocesseur,qui a parlé du Micral N? 8)

J’ai fait le montage sur ma breadboard puis je l’ais pris en photo et je l’ais ensuite reproduit sur frietzing ,ils sont tous deux attaché au topic :wink:

J’ai quelques questions:

1: Je n’ais qu’un seul bouton,je voudrais que le nombre d’appuis sur celui ci sois mis en mémoire dans l’Arduino(max de 9 appuis) après que j’ai cessé d’appuyer sur le bouton pendant 3 secondes et que je puisse entrer le nombre suivant si il y en a un par l’intermédiaire de ce même bouton.

2:Je voudrais qu’un appui long(5sec ou plus) sur le bouton “dise” a l’Arduino d’additionner le nombre que je vient d’entrer avec celui que je vais taper et que le petit speaker 8 Ohm que je possède produise un petit bip.

3:Enfin je voudrais que deux appuis longs(5sec ou plus) “disent” a L’arduino de soustraine le nombre que je vient d’entrer a celui que je vais taper et que mon petit speaker fasse aussi un bip.

Voila voila,c’est possible ou il me faut obligatoirement plus de boutons? Si oui un peut d’aide ne serrais pas de refus pour m’aider a réaliser ce projet sachant que je ne sais pas utiliser le bouton ou le speaker :frowning:

PS:Mes résistances sont des 110Ohm

Ton projet est tout a fait réalisable.

Le bouton s’utilise en pull up : une patte a la masse l’autre dans une broche digital de l’arduino. Il faudra donc mettre la broche en sortie et activer la fonction pull up dans le programme.

Concernant le speaker , une patte a l’arduino sur une sortie PWM et l’autre a la masse. Ensuite tu peux utiliser dans ton programme un analogWrite pour générer un son dessus mais je te conseil d’utiliser la librairie tone qui génère de très jolie “bip”.

Côté programmation, rien de bien compliqué non plus, la plus grande difficulté sera de gérer correctement millis pour compter le temps et bien organiser ton programme pour les différentes partie de ton programme .

Bonjour :slight_smile:

Bon j’ai avancé,il ne me manque plus que quelques résistances pour finaliser mon montage (Je n’y arrive toujours pas pour le haut parleur! :frowning: ) . Je suis en train d’écrire le programe et ca avance plutot bien :wink:

PS:J’avais mis la mauvaise photo d’un autre montage dans mon précédent post,la vrai est ataché a ce message :wink:

http://arduino.cc/en/Tutorial/tone :slight_smile:

Merci pour ton lien,il vas beaucoup m'aider! :wink:

Je gellére juste a trouver un moyen de compter le nombre d'appui sur un bouton et si il ne se passe rien pendant sec,passer au suivant... :frowning:

EDIT: Voici mon début de code mais il est faux d’après le logiciel Arduino :frowning:

const int led = 2;
const int led = 3;
const int led = 4;
const int led = 5;
const int led = 6;
const int led = 10;
const int led = 13;
const int buttonPin 2;
int chiffre1 = 0;

void setup() {
pinMode(led, OUTPUT);
pinMode(buttonPin, INPUT);
ButtonState(LOW , OUTPUT);
}

void loop() {
if ButtonState = HIGH; {
int chiffre1 =0
chiffre1 = 0 + 1
}

}

Oui, la syntaxe de ton "if" est incorrecte.

Bonjour,

Jetez un oeil à la référence Arduino pour

  • la syntaxe de l'instruction if()
  • un exemple de comptage d'appuis sur un bouton

D'accord donc j'ai décidé de supprimer le if quie me posait probleme pour m'inspiré du compteur d'appui sur un bouton,j'ai un autre probleme:

Apparament ce sont mes déclaration devariables qui ne changent pas qui posent probleme maintenant :confused:
Des trucs du genre const int ledPin = 10;

ProgramecalculatriceArduinoALTAIR:2: error: redefinition of 'int ledPin'
ProgramecalculatriceArduinoALTAIR:1: error: 'int ledPin' previously defined here
ProgramecalculatriceArduinoALTAIR:3: error: redefinition of 'int ledPin'
ProgramecalculatriceArduinoALTAIR:1: error: 'int ledPin' previously defined here
ProgramecalculatriceArduinoALTAIR:4: error: redefinition of 'int ledPin'
ProgramecalculatriceArduinoALTAIR:1: error: 'int ledPin' previously defined here
ProgramecalculatriceArduinoALTAIR:5: error: redefinition of 'int ledPin'
ProgramecalculatriceArduinoALTAIR:1: error: 'int ledPin' previously defined here
ProgramecalculatriceArduinoALTAIR:6: error: redefinition of 'int ledPin'
ProgramecalculatriceArduinoALTAIR:1: error: 'int ledPin' previously defined here
ProgramecalculatriceArduinoALTAIR:7: error: redefinition of 'int ledPin'
ProgramecalculatriceArduinoALTAIR:1: error: 'int ledPin' previously defined here
ProgramecalculatriceArduinoALTAIR.ino: In function 'void setup()':
ProgramecalculatriceArduinoALTAIR:12: error: 'led' was not declared in this scope
ProgramecalculatriceArduinoALTAIR:14: error: 'ButtonState' was not declared in this scope

quel est le code en question ?

const int ledPin = 2;
const int ledPin = 3;
const int ledPin = 4;
const int ledPin = 5;
const int ledPin = 6;
const int ledPin = 10;
const int ledPin = 13;
const int buttonPin = 2;
const int chiffre1 = 0;

int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600)
}

void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState !=lastButtonState) {
if (buttonState ==HIGH) {
buttonPushCounter++;
Serial.

}

Le voici :wink:

Ah mais bien sûr !!!! Regarde tes premières lignes : ledPin est redéfini plusieurs fois. Tu ne peux définir une constante qu'une fois, et ici elle est répliquée un grand nombre de fois...

Ahhh mais oui je suis bete les variables ont toutes le meme nom :stuck_out_tongue_closed_eyes:
Je corrige merci :wink:

Bon ca avance doucement mais ca avance! :slight_smile:

const int ledPin1 = 2;
const int ledPin2 = 3;
const int ledPin3 = 4;
const int ledPin4 = 5;
const int ledPin5 = 6;
const int ledPin6 = 10;
const int ledPin7 = 13;
const int ledPin8 = 11;
const int ledPin9 = 12;
const int ledPin0 = 1;
const int button = 8;
//--------------------------------------------------------------------------
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
//--------------------------------------------------------------------------
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin0, OUTPUT);
//--------------------------------------------------------------------------
pinMode(button, INPUT);
}
//--------------------------------------------------------------------------
void loop() {
if (buttonState==1) {
buttonPushCounter = 0 + 1;
}

}

Avez vous des suggestions ou des idées d’amélioration?
Bonne soirée :wink:

buttonPushCounter = 0 + 1;

0 + 1 ça fera toujours 1 ...
Si ton souhait est d'incrémenter une variable il faut faire : Nom_de_ma_variable ++ ; ou Nom_de_ma_variable =+ 1 :

Fais toi un pseudo code papier pour bien cerner ce qu'il y a à faire dans ton programme.
Et je ne vois pas la fonction pull up d'activer dans ton code ... c'est normal ?

Salut! :slight_smile:

J’ai corrigé buttonPush counter,merci :wink:
J’ai activé la fonction pull up dans ma correction,je l’ais mis entre "const int button =8; et “int buttonPushCounter = 0;” C’est bon?

J’ai fait ce que tu m’as conseillé sous paint,c’est attach a ce post :wink:

J’ai activé la fonction pull up dans ma correction,je l’ais mis entre "const int button =8; et “int buttonPushCounter = 0;” C’est bon?

Non :stuck_out_tongue: , l’activation de la fonction pullup d’une broche se fait dans la fonction Setup, qui ne se lance qu’une seule fois au démarrage de l’arduino.
Il faut distinguer les déclarations de variables qui se font hors fonction setup et loop et le paramétrage des entrées/sorties qui peuvent être dans le setup/loop.

J’ai fait ce que tu m’as conseillé sous paint,c’est attach a ce post smiley-wink

Ce sera une bonne base pour architecturer ton programme. Il ne reste pu qu’a traduire ce pseudo code en langage.

Second conseil, l’arduino intègre une librairie qui permet de communiquer via un port série. Notamment avec l’USB d’un PC. Utilise le pour vérifier pas à pas ton code.
Voici comment l’utiliser :

**Serial.print(“Message_à_afficher”); ** Le texte à afficher est toujours entre guillemet : " "
Si c’est une valeur alors : Serial.print(Valeur);
Si tu veux un retour à la ligne automatique, tu remplaces .print par .printf.

void loop() {
  if (buttonState==1) {
    buttonPushCounter = 0 + 1;
  }
  
}

Si j’ai bien compris tu en es à la phase ou tu souhaites compter le nombre d’appui.

Chaque bouton a une fonction déterminé ? ou tu fais tout avec un seul ?

Tu devras donc (au vu de ton pseudo code) maîtriser le temps. La fonctions millis() permet de connaitre le temps qui s’est écoulé depuis le démarrage de l’arduino. C’est une fonction qui renvoie un unsigned long et qui correspond à des millisecondes.