Acties:
  • 0 Henk 'm!

  • andydewit
  • Registratie: December 2013
  • Laatst online: 05-11-2024
Ik krijg met onderstaande code de volgende foutmelding:
invalid conversion from 'char*' to 'int' [-fpermissive]
Lijn: m = "0" + m;
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
char* timer_current() { // Returns the current time of the timer
  int h, m, s;
  s = (millis() - timer_started) / 1000; // Read seconds from timer started
  m = s / 60; // Calculate minutes
  s = s - m * 60; // Calculate total seconds, minus the minutes
  
  if (s < 10)
    s = "0" + s;
  if (m < 10)
    m = "0" + m;
  
  return m+":"+s; // Return current timer time
}


Op welke manier zou ik dit op kunnen lossen? Heb lang op internet gezocht maar geen antwoord kunnen vinden, hoop dat jullie er mee kunnen helpen.

Acties:
  • 0 Henk 'm!

  • Sepio
  • Registratie: Oktober 2007
  • Laatst online: 01-08 07:02
Je zegt bovenaan in je code dat m en s van het type int zijn. Dus dat ze numeriek zijn.
Alleen probeer je er later een voorloop 0 toe te voegen en dan veranderd het datatype in een string (tekst) in plaats van een nummer. Vervolgens wordt het restulaat weer in een numeriek veld gestopt en dat gaat niet.

Je zult daarvoor dus variabelen moet definiëren met string als datatype.
https://www.arduino.cc/en/Reference/StringConstructor

Zoek maar op internet naar "arduino leading zeros". Dan vind je genoeg voorbeelden.

[ Voor 19% gewijzigd door Sepio op 18-06-2016 09:33 ]


Acties:
  • 0 Henk 'm!

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 22:50

Super_ik

haklust!

Verander "0" eens naar '0' (enkele quotes)

Dit truukje werkt natuurlijk alleen voor minuut/seconde 0 t/m 9. Daarna krijg je rare waardes. Ook wat je bij de return doet, doet niet wat jij denkt dat 't doen. In c kan je niet zomaar strings maken door ze bij elkaar op te tellen.

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Acties:
  • 0 Henk 'm!

  • Accretion
  • Registratie: April 2014
  • Laatst online: 23:29

Accretion

⭐⭐⭐⭐⭐ (5/5)

Super_ik schreef op zaterdag 18 juni 2016 @ 09:35:
Verander "0" eens naar '0' (enkele quotes)
Dan telt hij opeens 48 op bij getallen onder de 10?

Wellicht kun je iets met sprintf() of gebruik Arduino strings i.p.v C-char-arrays (c-strings).
In Arduino kun je volgensmij wel string.concat("") gebruiken om iets aan het eind van je string toe te voegen.

Acties:
  • 0 Henk 'm!

  • Invisible_man
  • Registratie: Juni 2006
  • Laatst online: 19:34
Accretion schreef op woensdag 22 juni 2016 @ 16:36:
[...]


Dan telt hij opeens 48 op bij getallen onder de 10?
Want 48 is de asci-waarde voor het karakter '0' :)

Maar verdiep je inderdaad eens in het verschil tussen een INT en een STRING en verdiep je in de beschikbare stringfuncties zoals inderdaad concat.

[ Voor 22% gewijzigd door Invisible_man op 22-06-2016 16:47 ]


Acties:
  • 0 Henk 'm!

  • Accretion
  • Registratie: April 2014
  • Laatst online: 23:29

Accretion

⭐⭐⭐⭐⭐ (5/5)

Invisible_man schreef op woensdag 22 juni 2016 @ 16:45:
[...]

Want 48 is de asci-waarde voor het karakter '0' :)
Dat is inderdaad ook hoe ik op die 48 uit kom ;)
Het is niet zo dat ik die code geschreven/getest heb ;p
Natuurlijk had ik dat erbij moeten vermelden voor de duidelijkheid.

Wat hij wil is; een string (of char-array) met leading zero geven.
Je kan dit zelf "aanhacken" of sprintf gebruiken om een buffer te vullen met leading 0's, wat in C wellicht de mooiste oplossing is. (geen idee hoe de performance van sprintf is op een AVR)

Of bij Arduino gewoon checken wat de waarde is, naar string converteren en concat doen aan de vorige string.

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 00:06

SA007

Moderator Tweaking
Pagina: 1

Dit topic is gesloten.