Sprintf() code probleem
7 berichten
• Pagina 1 van 1
Sprintf() code probleem
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?
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
Re: Sprintf() code probleem
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
shooter@home.nl
Re: Sprintf() code probleem
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
daarnaast is, zoals shooter ook al aangeeft, een int wel erg klein. Een unsigned long kan veel meer bevatten
Re: Sprintf() code probleem
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?
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?
Re: Sprintf() code probleem
ik heb dus probleem met een int die je deelt door 60 dat hoort met een float.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Sprintf() code probleem
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.
Re: Sprintf() code probleem
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
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
7 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten