Arduino 1k automatisch naar 1000.

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Demotje
  • Registratie: November 2015
  • Laatst online: 11-05-2021
Hallo Iedereen!

Ben bezig om een tool om mijn 7 segmenten display aan te sturen en heb nu een probleem als ik via de seriele monitor 1k stuur dat er ook 1k op het display komt te staan. Graag zou ik willen als ik 1k verstuur via de seriele monitor als er op de display 1000 komt te staan. Heb alleen geen idee hoe ik dit zou kunnen oplossen en kan op internet niet vinden hoe ik dit zou kunnen oplossen.




#include <TM1638.h>
TM1638 module(8, 9, 7);
float K = 000 ;
unsigned long a=1;
String Counter = "0";
void setup() {
Serial.begin(9600);
}
void loop(){
module.setDisplayToString(Counter);
}

void serialEvent() {
while (Serial.available())
Counter = Serial.readString();
module.clearDisplay();
}




Alvast bedankt voor de reacties!

Alle reacties


Acties:
  • +1 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 29-09 11:59

SA007

Moderator Tweaking
Het is mij in ieder geval onduidelijk wat je probeert te bereiken..

Een 7-segment kan geen (fatsoenlijke) k weergeven, mocht je '1k' als tekst over de serieel willen doen vraag ik me af waarom.
Het is meestal stukken makkelijker om in de code die de data naar de arduino stuurt die vertaling te doen.

Dat gezegd, je kan prima
if (Counter == "1k") Counter = 1000;
Zetten na de readString() regel, maar vraag me dan af waar die seriele data vandaan komt of het niet makkelijk is om gewoon 1000 te sturen.

Acties:
  • 0 Henk 'm!

  • itcouldbeanyone
  • Registratie: Augustus 2014
  • Laatst online: 12-09 21:49



#include <TM1638.h>
TM1638 module(8, 9, 7);
float K = 000 ;
unsigned long a=1;
String Counter = "0";
void setup() {
Serial.begin(9600);
}
void loop(){
module.setDisplayToString(Counter);
}

void serialEvent() {
while (Serial.available())
Counter = Serial.readString();
if(Counter.endsWith(“k”)){
String x= “”+(((Counter.substring(0,Counter.length()-1).toInt())*1000));
Counter=x;
}
module.clearDisplay();
}





Geen compiler bij de hand, dus kan een typo inzitten,
Maar dit principe zal moeten werken.
Detecteer eerst de “k” in je string,
Verwijder het charracter,
Converteer naar integer en vermengvuldig dat, daarna terug naar string

Ben niet slim, maar wel dom


Acties:
  • 0 Henk 'm!

  • Demotje
  • Registratie: November 2015
  • Laatst online: 11-05-2021
itcouldbeanyone schreef op vrijdag 4 oktober 2019 @ 00:46:



#include <TM1638.h>
TM1638 module(8, 9, 7);
float K = 000 ;
unsigned long a=1;
String Counter = "0";
void setup() {
Serial.begin(9600);
}
void loop(){
module.setDisplayToString(Counter);
}

void serialEvent() {
while (Serial.available())
Counter = Serial.readString();
if(Counter.endsWith(“k”)){
String x= “”+(((Counter.substring(0,Counter.length()-1).toInt())*1000));
Counter=x;
}
module.clearDisplay();
}





Geen compiler bij de hand, dus kan een typo inzitten,
Maar dit principe zal moeten werken.
Detecteer eerst de “k” in je string,
Verwijder het charracter,
Converteer naar integer en vermengvuldig dat, daarna terug naar string
Bedankt voor de reactie! Dit is wel wat ik bedoel maar helaas werkt de code niet.
Krijg de foutmelding: stray '\223' in program.

Mvg

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 15:26

DataGhost

iPL dev

Het lijkt me beter als je probeert te begrijpen wat er gedaan wordt, in plaats van iets copy/pasten en vastlopen als het niet direct doet wat je verwacht. Ook is het een beetje onzin-manier om eerst de string naar een int (ipv float/double) om te zetten, te vermenigvuldigen en weer terug naar een string. Afhankelijk van de eisen aan je input (die heb je eigenlijk helemaal niet vermeld) kan je namelijk gewoon de "k" vervangen door "000". Probeer zelf eens te bedenken hoe je dat aan zou pakken en probeer dat te coden (of te verwoorden).

Als je daar geen zin in hebt is het een goede oefening om op zoek te gaan naar de fout in de code die je voorgekauwd hebt gekregen. De foutmelding zegt precies wat er aan de hand is, en je krijgt als het goed is ook precies het regelnummer erbij. Als je niet kan bedenken wat de foutmelding betekent kan je 'm supermakkelijk googlen.

Acties:
  • 0 Henk 'm!

  • itcouldbeanyone
  • Registratie: Augustus 2014
  • Laatst online: 12-09 21:49
zo zou die moeten werken




#include <TM1638.h>
TM1638 module(8, 9, 7);
float K = 000 ;
unsigned long a=1;
String Counter = "0";
void setup() {
Serial.begin(9600);
}
void loop(){
module.setDisplayToString(Counter);
}

void serialEvent() {
while (Serial.available())
Counter = Serial.readString();
Counter.trim();
if (Counter.endsWith("k")) {
Counter = String(((Counter.substring(0, (Counter.length()) - 1)).toInt() * 1000));
}
module.clearDisplay();
}

Ben niet slim, maar wel dom

Pagina: 1