Sprintf() code probleem

Arduino specifieke Software
Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Sprintf() code probleem

Berichtdoor Creator » 26 Jan 2022, 20:18

Probleem met : sprintf(timeMinSec, "%0.2d:%0.2d", minutes, seconds);
Op een UNO , de code werkt wel op een Nano, Rarara……

Ik heb een scketch voor een UV ledstrip controller welke werkt op een Arduino Nano.
Het deel wat niet werkt op de Arduino Uno staat hieronder, de sketch springt op het moment dat het de regel sprintf bereikt direct naar het einde.
Deel sketch:
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

//Pin assignment
#define durationPot A0 // Duration potmeter

//Parameters veranderbaar in code
int
maxTime = 1200, //Maximum countdown timer time (in secs) max 20 min

//Systeem variabelen
float
timeLeftBarPercent = 0.00,
durationSecFloat = 0.00,
durationSecSelect = 0.00;
int
duration = 0,
durationSec = 0,
seconds = 0,
minutes = 0,
unsigned long previousMillis = 0;
const long interval = 1000;
char timeMinSec[16];

void setup() {
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0); lcd.print(" PCB UV ");
lcd.setCursor(0, 1); lcd.print(" Exposure Box "); delay (1500);
lcd.clear();

void loop() {
//--Gather Duration Knob Readings--
duration = analogRead(durationPot);
durationSec = map(duration, 0, 1023, 0, maxTime);

//-Define time format display
minutes = durationSec / 60;
seconds = durationSec % 60;

//-Display time set
lcd.setCursor(0, 0); lcd.print("Duration: ");
sprintf(timeMinSec, "%0.2d:%0.2d", minutes, seconds); // hier breekt de scketch af
lcd.setCursor(11, 0); lcd.print(timeMinSec);

Tevens wordt de waarde van de potmeter niet gelezen/weergegeven.

Waar gaat het fout bij me?

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Sprintf() code probleem

Berichtdoor shooter » 26 Jan 2022, 22:20

kijk eerst of je alle variabelen wel goed hebt staan er kan verschil zijn in een int, de ene is dan 8 bits en de andere 16 bits bijvoorbeeld.en je maakt er durationsec/60 dat wordt moeilijk bij een int.
paul deelen
shooter@home.nl

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Sprintf() code probleem

Berichtdoor Frits1956 » 27 Jan 2022, 19:29

mij lijkt dat minutes = durationSec / 60; niet juist is. moet dat niet zijn: minutes = durationSec * 60;

daarnaast is, zoals shooter ook al aangeeft, een int wel erg klein. Een unsigned long kan veel meer bevatten

Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Re: Sprintf() code probleem

Berichtdoor Creator » 27 Jan 2022, 19:48

bedankt voor de reacties.

ik ga hier zeker mee aan de gang, helaas vandaag geen tijd.
Maar wat mij verwonderd is dat deze regels wel werken als ik de sketch upload naar een Arduino Nano v3.
Wat voor verschil maakt dat uit?

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Sprintf() code probleem

Berichtdoor shooter » 27 Jan 2022, 21:12

ik heb dus probleem met een int die je deelt door 60 dat hoort met een float.
paul deelen
shooter@home.nl

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Sprintf() code probleem

Berichtdoor Frits1956 » 28 Jan 2022, 10:46

shooter schreef:ik heb dus probleem met een int die je deelt door 60 dat hoort met een float.

Een zéér terechte opmerking. Een float is de enige die niet gehele getallen kan bevatten.

Mijn opmerking over een unsigned long is in navolging dat een minuut geen deling van een seconde is maar een vermenigvuldiging en dan krijg je automatisch alleen gehele getallen. daarnaast krijg je in mijn beleving bij het uitlezen van millis() geen negatieve getallen dus kan je in dat geval beter een unsigned gebruiken.

Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Re: Sprintf() code probleem

Berichtdoor Creator » 28 Jan 2022, 15:38

Heren allen bedankt voor het meedenken.

Ik heb de aansluitingen allemaal verwijderd en opnieuw aangebracht. En...... alsof Murphy langs is geweest de code doet weer wat die met doen.
Een float met een integer werkt dus. En de minutes = durationSec / 60 is ook geen probleem.
Hoe dit nu ineens kan???? Ik heb geen flauw idee.

Nogmaals bedankt

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: oahoerebegu en 24 gasten