ENIB 2023 : Salade d'Enigmes : Différence entre versions
Ligne 14 : | Ligne 14 : | ||
==Code== | ==Code== | ||
<pre> | <pre> | ||
− | + | Code pour la partie Tableau périodique (Il y a une librairie à télécharger) : | |
+ | |||
+ | #include <SPI.h> | ||
+ | #include <Wire.h> | ||
+ | #include <Adafruit_GFX.h> | ||
+ | #include <Adafruit_SSD1306.h> | ||
+ | |||
+ | #define SCREEN_WIDTH 128 // OLED display width, in pixels | ||
+ | #define SCREEN_HEIGHT 64 // OLED display height, in pixels | ||
+ | #define valPotReader A0 | ||
+ | #define buttonPer D8 | ||
+ | #define Win D7 | ||
+ | |||
+ | #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) | ||
+ | #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 | ||
+ | Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); | ||
+ | |||
+ | int valPot; | ||
+ | int pos=0; | ||
+ | int resultPer[2]={0,0}; | ||
+ | int solPer[2] = {29,13}; | ||
+ | bool buttonPerState=0; | ||
+ | bool prevButtonPerState=0; | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | // put your setup code here, to run once: | ||
+ | Serial.begin(9600); | ||
+ | |||
+ | pinMode(valPotReader,INPUT); | ||
+ | pinMode(buttonPer,INPUT); | ||
+ | pinMode(Win,OUTPUT); | ||
+ | |||
+ | // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally | ||
+ | if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { | ||
+ | Serial.println(F("SSD1306 allocation failed")); | ||
+ | for(;;); // Don't proceed, loop forever | ||
+ | } | ||
+ | |||
+ | // Show initial display buffer contents on the screen -- | ||
+ | // the library initializes this with an Adafruit splash screen. | ||
+ | display.display(); | ||
+ | delay(2000); // Pause for 2 seconds | ||
+ | |||
+ | // Clear the buffer | ||
+ | display.clearDisplay(); | ||
+ | } | ||
+ | |||
+ | |||
+ | void loop() { | ||
+ | // put your main code here, to run repeatedly: | ||
+ | valPot=round((float(analogRead(valPotReader))/1024)*118); | ||
+ | show(); | ||
+ | if(isPressed()){ | ||
+ | Serial.println("oui"); | ||
+ | int i = pos%2; | ||
+ | pos=pos+1; | ||
+ | resultPer[i]=valPot; | ||
+ | show(); | ||
+ | }; | ||
+ | |||
+ | Serial.println((resultPer[0]==solPer[0] && resultPer[1]==solPer[1])); | ||
+ | |||
+ | if(resultPer[0]==solPer[0] && resultPer[1]==solPer[1]) | ||
+ | { | ||
+ | Serial.print("Win"); | ||
+ | digitalWrite(Win,HIGH); | ||
+ | }else{digitalWrite(Win,LOW);} | ||
+ | |||
+ | } | ||
+ | |||
+ | void show(){ | ||
+ | display.clearDisplay(); | ||
+ | display.setTextSize(4); | ||
+ | display.setTextColor(SSD1306_WHITE); | ||
+ | display.setCursor(16,16); | ||
+ | display.print(valPot); | ||
+ | |||
+ | display.setTextSize(1); | ||
+ | display.setCursor(80,53); | ||
+ | display.print(resultPer[0]); | ||
+ | display.print('|'); | ||
+ | display.print(resultPer[1]); | ||
+ | |||
+ | |||
+ | display.display(); | ||
+ | } | ||
+ | |||
+ | bool isPressed(){ | ||
+ | buttonPerState=digitalRead(buttonPer); | ||
+ | |||
+ | if(prevButtonPerState==0 && buttonPerState==1){ | ||
+ | prevButtonPerState=buttonPerState; | ||
+ | return 1; | ||
+ | } | ||
+ | else{ | ||
+ | prevButtonPerState=buttonPerState; | ||
+ | return 0; | ||
+ | } | ||
+ | } | ||
+ | |||
</pre> | </pre> | ||
Version du 26 janvier 2023 à 15:16
photo de l'équipe
Que fait ce projet ?
Ce projet est une combinaison de 4 énigmes.
Liste des composants
- composant 1
- composant 2
- ...
Code
Code pour la partie Tableau périodique (Il y a une librairie à télécharger) : #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define valPotReader A0 #define buttonPer D8 #define Win D7 #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); int valPot; int pos=0; int resultPer[2]={0,0}; int solPer[2] = {29,13}; bool buttonPerState=0; bool prevButtonPerState=0; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(valPotReader,INPUT); pinMode(buttonPer,INPUT); pinMode(Win,OUTPUT); // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } // Show initial display buffer contents on the screen -- // the library initializes this with an Adafruit splash screen. display.display(); delay(2000); // Pause for 2 seconds // Clear the buffer display.clearDisplay(); } void loop() { // put your main code here, to run repeatedly: valPot=round((float(analogRead(valPotReader))/1024)*118); show(); if(isPressed()){ Serial.println("oui"); int i = pos%2; pos=pos+1; resultPer[i]=valPot; show(); }; Serial.println((resultPer[0]==solPer[0] && resultPer[1]==solPer[1])); if(resultPer[0]==solPer[0] && resultPer[1]==solPer[1]) { Serial.print("Win"); digitalWrite(Win,HIGH); }else{digitalWrite(Win,LOW);} } void show(){ display.clearDisplay(); display.setTextSize(4); display.setTextColor(SSD1306_WHITE); display.setCursor(16,16); display.print(valPot); display.setTextSize(1); display.setCursor(80,53); display.print(resultPer[0]); display.print('|'); display.print(resultPer[1]); display.display(); } bool isPressed(){ buttonPerState=digitalRead(buttonPer); if(prevButtonPerState==0 && buttonPerState==1){ prevButtonPerState=buttonPerState; return 1; } else{ prevButtonPerState=buttonPerState; return 0; } }