Klein vraagje

algemene C code
Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Klein vraagje

Berichtdoor christiaan » 20 Jul 2016, 14:32

Hallo,

Ik kom er even niet meer uit.

Ik wil een integer weergeven op mijn display. Echter krijg ik dan de volgende foutmelding:
cpp code
invalid conversion from 'int' to 'const char*' [-fpermissive]


ik gebruik onderstaande code om de timer te laten lopen.
cpp code
Serial.print(T.ShowHours());
Serial.print(":");
Serial.print(T.ShowMinutes());
Serial.print(":");
Serial.println(T.ShowSeconds());


en ik convert ze naar een int
hoursT
minutesT
secondsT

Echter krijg ik ze dus niet op mijn scherm zichtbaar met:

cpp code
TFTscreen.text(hoursT, 0, 90);


Hoe moet ik ze converteren dat het wel zichtbaar wordt?

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Klein vraagje

Berichtdoor nicoverduin » 20 Jul 2016, 21:30

Zet ff je hele sketch hier neer. Dit is te vaag om het geheel te overzien.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: Klein vraagje

Berichtdoor christiaan » 21 Jul 2016, 12:53

cpp code
/* Dit is de complete code voor het houten kistje project.
* Deze projectdoos heeft meerdere onderdelen in en op zich
* gemonteerd. En alles is aangesloten, in eerste instantie,
* op een breadboard.
*
* We zullen per onderdeel de includes neerzetten en daarboven
* een korte uitleg neerzetten voor de pin aansluitingen
* op de ARDUINO UNO
*/

/* RGB led 1 (status led) */
#define COMMON_ANODE
int redPin1 = A10;
int greenPin1 = A9;
int bluePin1 = A8;

/* RGB led 2 (ontvanger led) */
#define COMMON_ANODE2
int redPin2 = A11;
int greenPin2 = A12;
int bluePin2 = A13;

/* LCD Screen */
#include <TFT.h> // Arduino LCD library
#include <SPI.h>

// pin definition for the Uno
#define cs 47 // 10
#define dc 48 // 9
#define rst 49 // 8
TFT TFTscreen = TFT(cs, dc, rst);

/* Keypad */
#include <Keypad.h>
byte maxPasswordLength = 10;
byte currentPasswordLength = 0;
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns

//Define the keymap
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

//// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = {14,15,16,17}; //connect to row pinouts (2,3,4,5)

// Connect keypad COL0, COL1, COL2 and COL3 to these Arduino pins.
byte colPins[COLS] = {18,19,20,21}; //connect to column pinouts (6,7,8,9)

// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

/* Timer */
#include<CountUpDownTimer.h>
CountUpDownTimer T(DOWN);
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 41
#define DIO 40
TM1637Display display(CLK, DIO);


/* Algemene strings en integers */
String passwordLvl1 = "873940";
String passwordLvl2 = "156243";
String passwordLvl3 = "019827";
String passwordLvl4 = "829015";
String passwordLvl5 = "572901";
String passwordAdmin = "7926";
String userinput;
String HNT;
String MNT;
String SNT;
int hNTS;
int mNTS;
int sNTS;
int hoursDisp;
int minutesDisp;
int secondsDisp;
String level = "1";
boolean loopEnd = false;
enum state {WAITING, LOOPING, WINNER, LOSER, VERLIEZERS, KAMPIOENEN} current_state = WAITING;
uint8_t winner[] = { 0b01011011,0b01111111,0b01001111,0b00111111 };
uint8_t winnaar2[] = { 0b00000111,0b00000110,0b01100110,0b01101101 };
uint8_t fail[] = { 0b01110001,0b01110111,0b00000110,0b00111000 };
uint8_t fout1[] = { 0b01101111,0b00000110,0b01111101,0b01001111 };
uint8_t fout2[] = { 0b01111101,0b01100110,0b00111111,0b00000111 };
int piezoPin = 46;
int hoursT;
int minutesT;
int secondsT;
int counterTotal = 5400; // 1,5 uur = 5400


void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
setColor1(0, 255, 0); // blue
setColor2(0, 255, 0); // red


// Put this line at the beginning of every sketch that uses the GLCD:
TFTscreen.begin();

display.setBrightness(0x0f);
T.SetTimer(1,30,1); // Timer voor de Escape room
//T.SetTimer(0,5,01);

// clear the screen with a black background
TFTscreen.background(0, 0, 0);

// write the static text to the screen
// set the font color to white
TFTscreen.stroke(255, 255, 255);
// set the font size
TFTscreen.setTextSize(4);
// write the text to the top left corner of the screen
TFTscreen.text("Bomb", 0, 0);
TFTscreen.text("armed!", 0, 50);
delay(2000);
printDisplay();
T.StartTimer();
setColor1(255, 0, 0); //Red for indicate bomb armed
setColor2(0, 0, 0); // Off so indicate when push button!
} // End for setup();

void loop() {
// put your main code here, to run repeatedly:
/* Timer script met matrix gedeelte */
T.Timer(); // run the timer

if (T.TimeHasChanged() ) // this prevents the time from being constantly shown.
{

tone(piezoPin, 5000, 50);

//HIER DE COLON ON!!!!!
uint8_t test[] = { 0b10000000 };
display.setSegments(test,2,1);

display.showNumberDec(T.ShowMinutes(), true, 2, 0);
display.showNumberDec(T.ShowSeconds(), true, 2, 2);
Serial.print(T.ShowHours());
Serial.print(":");
Serial.print(T.ShowMinutes());
Serial.print(":");
Serial.println(T.ShowSeconds());

hoursT = T.ShowHours();
minutesT = T.ShowMinutes();
secondsT = T.ShowSeconds();
if (hoursT == 0 && minutesT == 0 && secondsT == 0) {
T.StopTimer();
delay(500);
current_state = LOSER;
//display.showNumberDec(1234, true, 4, 0);
}

} // End of T.TimeHasChanged
//showWaiting();
/* Werkend script voor keypad + display */
// put your main code here, to run repeatedly:
char key = keypad.getKey();
if (key != NO_KEY){
setColor2(0, 0, 255); //Blue
delay(60);
switch (key){
case 'A': resetGame(); break;
case 'B': break;
case 'C': changePlayTime();
case 'D': changePassword(); break;
case '#': checkPassword(); break;
case '*': resetPassword(); break;
default: processNumberKey(key);
}
setColor2(0, 0, 0); //Lamp off
}

// Looping check code
switch(current_state) {
case WAITING:
// outside of loop, do nothing

break;
case WINNER:
// set some parameters. this set of code will be processed until no longer
// LOOPING, as set by the keyPadEvent.
/* Display adjustment */
setColor1(0, 255, 0);
setColor2(0, 255, 0);
display.setSegments(winner);
//TFTscreen.background(0, 255, 0);
TFTscreen.background(0, 0, 0);
//TFTscreen.stroke(0, 0, 0); //Black font
TFTscreen.stroke(255, 255, 255);
TFTscreen.setTextSize(3);
//TFTscreen.text("Winaars!", 0, 0);
TFTscreen.text("Meld de", 0, 30);
TFTscreen.text("code aan", 0, 60);
TFTscreen.text("de ", 0, 90);
TFTscreen.setTextSize(2);
TFTscreen.text("leiding!", 40, 95);

/* Alternative led loop */
digitalWrite(A0, HIGH);
delay(5000);
digitalWrite(A0, LOW);
delay(1000);
break;
case KAMPIOENEN:
// set some parameters. this set of code will be processed until no longer
// LOOPING, as set by the keyPadEvent.
/* Display adjustment */
setColor1(0, 255, 0);
setColor2(0, 255, 0);
display.setSegments(winnaar2);
//TFTscreen.background(0, 255, 0);
TFTscreen.background(0, 0, 0);
//TFTscreen.stroke(0, 0, 0); //Black font
TFTscreen.stroke(255, 255, 255);
TFTscreen.setTextSize(3);
//TFTscreen.text("Winaars!", 0, 0);
TFTscreen.text("Meld de", 0, 30);
TFTscreen.text("code aan", 0, 60);
TFTscreen.text("de ", 0, 90);
TFTscreen.setTextSize(2);
TFTscreen.text("leiding!", 40, 95);

/* Alternative led loop */
digitalWrite(A0, HIGH);
delay(5000);
digitalWrite(A0, LOW);
delay(1000);
break;
case LOSER:
Serial.println("BOOM");
display.setSegments(fout1);
//TFTscreen.background(255, 0, 0);
TFTscreen.background(0, 0, 0);
TFTscreen.stroke(255, 255, 255);
TFTscreen.setTextSize(3);
//TFTscreen.text("Winaars!", 0, 0);
TFTscreen.text("Meld de", 0, 30);
TFTscreen.text("code aan", 0, 60);
TFTscreen.text("de ", 0, 90);
TFTscreen.setTextSize(2);
TFTscreen.text("leiding!", 40, 95);
//TFTscreen.text("BOMB", 40, 30);
//TFTscreen.text("Exploded", 10, 70);
setColor1(0, 255, 0);
setColor2(0, 255, 0);
//display.setSegments(fail);
//melodyFailPlay();
delay(2000);
}


} // End for loop();

/* Eigen functie's */

void changePlayTime() {
T.StopTimer();
delay(500);
HNT = userinput.substring(0,2);
MNT = userinput.substring(2,4);
SNT = userinput.substring(4,6);
hNTS = HNT.toInt();
mNTS = MNT.toInt();
sNTS = SNT.toInt();
T.SetTimer(hNTS,mNTS,sNTS);
delay(50);
T.StartTimer();
}

void processNumberKey(char key) {
Serial.print(key);
currentPasswordLength++;
userinput += key;
printDisplay();
if (currentPasswordLength == maxPasswordLength) {
checkPassword();
}
}

void checkPassword() {
switch (userinput.toInt()) {
case 749301:
T.StopTimer();
delay(1000);
T.SetTimer(0,00,11); // 10 seconds end!!
delay(1000);
T.StartTimer();
break;
case 749310:
T.StopTimer();
delay(1000);
T.SetTimer(0,10,1); // 10 minutes end!!
delay(1000);
T.StartTimer();
break;
case 749315:
T.StopTimer();
delay(1000);
T.SetTimer(0,15,1); // 15 minutes end!!
delay(1000);
T.StartTimer();
break;
case 749330:
T.StopTimer();
delay(1000);
T.SetTimer(0,30,1); // 30 minutes end!!
delay(1000);
T.StartTimer();
break;
case 749360:
T.StopTimer();
delay(1000);
T.SetTimer(0,60,1); // 60 minutes end!!
delay(1000);
T.StartTimer();
break;
case 749390:
T.StopTimer();
delay(1000);
T.SetTimer(1,30,1); // 90 minutes end!!
delay(1000);
T.StartTimer();
break;
case 749300:
T.StopTimer();
delay(1000);
T.SetTimer(2,0,1); // 120 minutes end!!
delay(1000);
T.StartTimer();
break;
case 1736:
T.StopTimer();
break;
case 1735:
T.StartTimer();
break;
case 8392:
digitalWrite(2, HIGH);
break;
case 8393:
digitalWrite(3, HIGH);
break;
case 8390:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
break;
case 501964: // Scouts code 1
Serial.println(" Ok.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
T.PauseTimer();
level = "END!";
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW);
//loopEnd = false;
current_state = WINNER;
break;
case 834719: // Scouts code 2
Serial.println(" Ok.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
T.PauseTimer();
level = "END!";
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW);
//loopEnd = false;
current_state = KAMPIOENEN;
break;
case 572901: // Level 5
Serial.println(" OK.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
T.PauseTimer();
level = "END!";
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW);
//loopEnd = false;
current_state = WINNER;
break;
default:
Serial.println(" Wrong passwowrd!");
digitalWrite(22, HIGH);
digitalWrite(25, HIGH);
delay(250);
digitalWrite(22, LOW);
digitalWrite(25, LOW);
delay(1000);
current_state = LOSER;
}

resetPassword();
}

void resetPassword() {
setColor2(178, 178, 178);
userinput = "";
currentPasswordLength = 0;
printDisplay();
setColor2(0, 0, 0);
}

void changePassword() {
digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
//password = "123";
resetPassword();
Serial.print("Time changed to ");
//Serial.println(password);
delay(100);
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
digitalWrite(26, LOW);
digitalWrite(27, LOW);
resetPassword();
}

void resetGame() {
current_state = WAITING;
T.SetTimer(1,30,01);
level = "1";
digitalWrite(11, LOW);
loopEnd = false;
resetPassword();
T.StartTimer();
}

// LEDLOOP CODE DELETED!!!

void gameEnd() {
current_state = WINNER;
//uint8_t winner[] = { 0b01000000,0b01000000,0b00000110,0b01001111 };
display.setSegments(winner);
TFTscreen.background(0, 0, 0);
TFTscreen.setTextSize(1);
TFTscreen.text("Je hebt het spel voltooid", 0, 0);
TFTscreen.text("Kijk op het display voor", 0, 20);
TFTscreen.text("je code! Je moet er nog", 0, 40);
TFTscreen.text("nog 2 x een - voorzetten!", 0, 60);

//ledLoop();
}

void printDisplay() {
char charBuf[50];
char levelBuf[50];
userinput.toCharArray(charBuf, 50);
level.toCharArray(levelBuf, 50);
TFTscreen.background(0, 0, 0);
TFTscreen.setTextSize(2);
TFTscreen.text("Voer code in:", 0, 0);
TFTscreen.setTextSize(3);
TFTscreen.text(charBuf, 0, 30);
//TFTscreen.text("Level:", 0, 90);
//TFTscreen.text(levelBuf, 110,90);
TFTscreen.text("Time left:", 0, 65);
//TFTscreen.setTextSize(2);
TFTscreen.text("18", 0, 100);
TFTscreen.text(":", 40, 100);
TFTscreen.text("59", 60, 100);
TFTscreen.text(":", 100, 100);
TFTscreen.text("30", 120, 100);
}

void melodyFailPlay() {
tone(piezoPin, 262);
delay(250);
tone(piezoPin, 196);
delay(500);
noTone(piezoPin);
}

void setColor1(int red1, int green1, int blue1)
{
#ifdef COMMON_ANODE
red1 = 255 - red1;
green1 = 255 - green1;
blue1 = 255 - blue1;
#endif
analogWrite(redPin1, red1);
analogWrite(greenPin1, green1);
analogWrite(bluePin1, blue1);
}

void setColor2(int red2, int green2, int blue2)
{
#ifdef COMMON_ANODE2
red2 = 255 - red2;
green2 = 255 - green2;
blue2 = 255 - blue2;
#endif
analogWrite(redPin2, red2);
analogWrite(greenPin2, green2);
analogWrite(bluePin2, blue2);
}


Veel dingen zullen omslachtig zijn of misschien wel verkeerd, maar momenteel werkt de code op deze manier met hoe ik het wil. Verbeteringen hoor ik graag, immers ben ik stukje bij beetje het aan het leren / bijspijkeren.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Klein vraagje

Berichtdoor nicoverduin » 21 Jul 2016, 19:56

Het is op zich wel vreemd. Hooguit dat de return variabelen in die library wat krom zijn. Die functies geven een unsigned long terug. Ik zou die return waarden casten als volgt:
cpp code
Serial.print((unsigned long)T.ShowHours());
Serial.print(":");
Serial.print((unsigned long)T.ShowMinutes());
Serial.print(":");
Serial.println((unsigned long)T.ShowSeconds());
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: Klein vraagje

Berichtdoor christiaan » 21 Jul 2016, 20:43

Het gaat om regels: 477 t/m 481
cpp code
TFTscreen.text("18", 0, 100);
TFTscreen.text(":", 40, 100);
TFTscreen.text("59", 60, 100);
TFTscreen.text(":", 100, 100);
TFTscreen.text("30", 120, 100);


waar 18 staat moet T.ShowHours()
waar 59 staat moet T.ShowMinutes()
waar 30 staat moet T.ShowSeconds()

komen te staan. de serial output hoeft niet gewijzigd te worden.

Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: Klein vraagje

Berichtdoor christiaan » 21 Jul 2016, 21:02

eb het gedeeltelijk voor elkaar gekregen.
hoursT = T.ShowHours();
minutesT = T.ShowMinutes();
secondsT = T.ShowSeconds();
String hourDisp = String(T.ShowHours());
hourDisp.toCharArray(hourDispC, 100);

en vervolgens hourDispC op screen zichtbaar.
Echter nu een klein vraagje nog:

Is het mogelijk om alleen het onderste gedeelte te refreschen (dus vanaf time left:??

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Klein vraagje

Berichtdoor nicoverduin » 21 Jul 2016, 22:50

Dan moet je er 2 functies van maken.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Google [Bot] en 10 gasten