console aussi muette que Bernardo.

Bonjour.
Je débute en Arduino, mais ai des notions de bases en C et en élec.
C'est donc un terrain de jeu amusant et facile.

Je bute énormément sur les affichages serial Monitor et serial Plotter.
J'ai bien sur pensé à un manque de compréhension de ma part, mais quand dans une loop le seul Serial.print c'est :
Serial.print("RPM : ");
Serial.print(RPM);
Et que rien n'affiche dans le Monitor ni le Plotter, c'est zarb.
Bien sur les bauds sont corrects.

Surtout que hier avec le même code, ca fonctionnait.
Je doute introduire une quelconque ambiguïté.

Ma config est un truc sans originalité, Debian stable, user dans le groupe dialout qui peut écrire dans le Nano donc c'est open bar 666, petit CPU 7750BE, IDE Arduino 1.8.8, trucs de bases.

Je file le code au complet, c'est rien de compliqué.
Je détecte une entrée via un sensor à effet Hall, puis la suivante, et mesure le temps entre les 2 pour en déduire les tours/minute.
Pas directement du capteur en fait, j'ai un sensible à la polarité alors j'ai un double AOP pour m'affranchir du sens de l'aimant.
J'aurai pu gérer ca en software, mais hardware c'est plus simple.
Sur un écran Oled i2c, ca fonctionne, bien sur ...

// code pourri de Nali sans license 

  unsigned long previousMillis;
  unsigned long currentMillis;
  unsigned long interval;
  float DigitalValue ;
  float LastDigitalValue ;
  float RPM;
  
void setup() {
  Serial.begin(115200);
 }

void loop() {
DigitalValue = digitalRead(2);  //depuis le LM358 et ces 2 seuils.
  if (DigitalValue != LastDigitalValue) {
    if (DigitalValue == 1) {
	currentMillis = millis();
	
	interval = currentMillis - previousMillis;
	previousMillis = currentMillis ;
    } 
    // machine à état de base, le nouveau devient l'ancien, etc. 

	RPM = (60000 / interval); // millis en millisecondes, donc 60000 pour faire 1 minute

	Serial.print("RPM : "); //
	Serial.print(RPM); //
	Serial.print("\n\r"); //putain de truc de base qui imprime pas :P
	delay(50);
  }
LastDigitalValue = DigitalValue; // truc de la machine à état 
}

Bonjour

c'est peut être le LM358 qui joue les Bernardo...
Dans le code donné çi-dessus si DigitalValue ne change pas, les conditions ne sont pas remplies pour exécuter les SerialPrint()
Que donne un Serial.Print() de lever de doute placé en dehors des if() ?

Appelle Zorro ! ;D

Normalement un digitalRead se loge dans un int, un byte voire un bool, pas dans un float.
Et change 6000 en 6000.0 pour assurer la division float aussi.

Bonjour,

Comme le dit al1fch, il y a peut être un problème avec ton circuit.
Affiche la valeur lue

  DigitalValue = digitalRead(2);  //depuis le LM358 et ces 2 seuils.
  Serial.println(DigitalValue);