hulp gevraagd bij opbouwen randomplay string functie

Arduino specifieke Software
Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

hulp gevraagd bij opbouwen randomplay string functie

Berichtdoor dirk ambu » 07 Jan 2016, 23:09

beste

ik ben bezig met een code voor het random afspelen van een mp3 track.
hiervoor wil ik sendCommand(CMD_PLAY_W_VOL, 0X0A01); opbouwen vanuit een string.
hier loop ik echter op vast.
de manier die ik nu bedacht heb werkt niet en geeft de volgende fout melding


random_mp3.ino: In function 'void randomplay()':
random_mp3:110: error: cannot convert 'String' to 'int8_t {aka signed char}' for argument '1' to 'void sendCommand(int8_t, int16_t)'
cannot convert 'String' to 'int8_t {aka signed char}' for argument '1' to 'void sendCommand(int8_t, int16_t)'

ik kom er zelf niet uit wat er precies wordt bedoelt met deze melding.
kan iemand mij verder helpen?
hier onder de code.
ik maak gebruik van de catalex mp3 speler.
en een arduino uno clone.
catalex mp3 speler werkt zelf wel en die kan ik gewoon aansturen.

cpp code
/* random mp3 speler 
*
* wat info
* sendCommand(CMD_PLAY_W_VOL, 0X0A01); //play the first song with volume 10 class. volume A = 10 F = 15
* 0X0A01 is volume op 10 en track nummer 1
* 0X0F02 is volume op 15 en track nummer 2
* https://learn.sparkfun.com/tutorials/hexadecimal
*/


#include <Wire.h> //I2C Library


//mp3 speler data
#include <SoftwareSerial.h>

#define ARDUINO_RX 5//connect to TX of the Serial MP3 Player module
#define ARDUINO_TX 6//connect to RX of the Serial MP3 Player module
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);

static int8_t Send_buf[8] = {0} ;

#define CMD_PLAY_W_INDEX 0X03
#define CMD_SET_VOLUME 0X06
#define CMD_SEL_DEV 0X09
#define DEV_TF 0X02
#define CMD_PLAY 0X0D
#define CMD_PAUSE 0X0E
#define CMD_SINGLE_CYCLE 0X19
#define SINGLE_CYCLE_ON 0X00
#define SINGLE_CYCLE_OFF 0X01
#define CMD_PLAY_W_VOL 0X22
//
//------------------------------------------------------------------ declare strings---------------------------------------------------------------------------------
//
String stringOne, stringTwo, stringThree; // declare three strings
//
//
//
long randNumber; // voor gebruik van random nummers
//
//
void setup()
{
//
mySerial.begin(9600);
delay(500); //Wait chip initialization is complete
sendCommand(CMD_SEL_DEV, DEV_TF); //select the TF card
delay(200); //wait for 200ms
//
Serial.begin(9600); //start serial cominucatie
//
// if analog input pin 0 is unconnected, random analog
// noise will cause the call to randomSeed() to generate
// different seed numbers each time the sketch runs.
// randomSeed() will then shuffle the random function.
randomSeed(analogRead(0)); // voor gebruik van random play analoge pin 0
//
//-----------------------------------------------------------------setup strings-------------------------------------------------------------------------------------
//
stringOne = String("CMD_PLAY_W_VOL, ");
stringTwo = String("0X0F");
stringThree = String();
//
}
void loop() {
test1; //test eerste track nummer
delay(2000); //wacht tot de track is afgelopen
test2; //test tweede track
delay(2000); //wacht tot de track is afgelopen
randomplay; //test randomplay een track nummer
delay(2000); //wacht tot de track is afgelopen

}
void test1() {
Serial.println("test track 1");
sendCommand(CMD_PLAY_W_VOL, 0X0A01); //play track 5 with volume 10 class volume A = 10 F = 15
}

void test2() {
Serial.println("test track 2");
sendCommand(CMD_PLAY_W_VOL, 0X0A02); //play track 6 with volume 10 class volume A = 10 F = 15
}
//-----------------------------------------------------------------------mp3 data string-----------------------------------------------------------------------
void sendCommand(int8_t command, int16_t dat)
{
delay(20);
Send_buf[0] = 0x7e; //starting byte
Send_buf[1] = 0xff; //version
Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
Send_buf[3] = command; //
Send_buf[4] = 0x01;//0x00 = no feedback, 0x01 = feedback
Send_buf[5] = (int8_t)(dat >> 8);//datah
Send_buf[6] = (int8_t)(dat); //datal
Send_buf[7] = 0xef; //ending byte
for (uint8_t i = 0; i < 8; i++) //
{
mySerial.write(Send_buf[i]) ;
}
}
//---------------------------------------------------------------------commands---------------------------------------------------------------------------------

void randomplay()
{
randNumber = random(10, 18); // print a random number from 10 to 19
Serial.println(randNumber);
stringThree = stringOne + stringTwo + randNumber; //bouw de string op
Serial.println(stringThree); //print de opgebouwde string
Serial.println("CMD_PLAY_W_VOL, 0X0A06"); //tijdelijk om te zien of de string klopt
sendCommand(stringThree); //play track random
}

Advertisement

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

Re: hulp gevraagd bij opbouwen randomplay string functie

Berichtdoor nicoverduin » 08 Jan 2016, 00:24

Je weet toch wel wat het verschil is tussen een String en een int?
Hij vraagt om een int en jij komt met een String aandraven. Dat gaat niet werken. Je moet die lib aansturen met de juiste parameters. Ik had eigenlijk wel verwacht dat je dat nu wel wist na pak 'm beet 2-3 jaar werken met de Arduino
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: hulp gevraagd bij opbouwen randomplay string functie

Berichtdoor dirk ambu » 08 Jan 2016, 15:33

hoi nico
ik begreep de error niet helemaal
maar nu je het zo opschrijf zie ik het ook
al maakt dat voor mij de oplossing nog niet makkelijker
en ik moet je zeggen dat als je er een tijdje niets mee doet dan zakt het wel erg snel weer weg
ik had de string werkend zoals ik wilde
dus ik dacht dat plak ik gewoon in de sendcommand line maar dat gaat dus niet
ik ga even uitzoeken hoe ik het nu het beste kan doen
al is een voorbeeld natuurlijk welkom
want eigenlijk wil ik alleen de laatste 2 cijfers vervangen van sendCommand(CMD_PLAY_W_VOL, 0X0A02);
maar dan met een cijfer tussen een van te voeren bepaalde range

groet dirk ambu

Berichten: 4
Geregistreerd: 08 Jan 2016, 13:19

Re: hulp gevraagd bij opbouwen randomplay string functie

Berichtdoor zaphod » 08 Jan 2016, 17:09

Hoi,

Je roept het commando sendCommand(int8_t command, int16_t dat) aan met maar een input variabele, maar je moet er 2 meegeven.

En zoals nico al aangaf moet je het goede type kiezen. Beiden moeten integers zijn. Je haalt hier de stringrepresentatie en de daadwerkelijke implementatie van de parameters door elkaar.

Werkt het als je aanroep er zo uitziet?

sendCommand(CMD_PLAY_W_VOL, 0X0A06);

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: hulp gevraagd bij opbouwen randomplay string functie

Berichtdoor dirk ambu » 08 Jan 2016, 18:31

beste zaphod

sendCommand(CMD_PLAY_W_VOL, 0X0A06);dat werkt.
als ik naar de code kijk dan roep ik void sendCommand(int8_t command, int16_t dat)
de (int8_t command, int16_t dat) wordt opgebouwd vanuit Send_buf?
hierdoor kan ik er nooit een string in plakken toch?
moet ik dan een complete nieuwe functie maken?
groet dirk ambu

Berichten: 4
Geregistreerd: 08 Jan 2016, 13:19

Re: hulp gevraagd bij opbouwen randomplay string functie

Berichtdoor zaphod » 08 Jan 2016, 19:31

Ik zou zeggen, laat die string toestand vallen.

Probeer bij het getal 0X0A00 het random getal op te tellen en dat als 2e argument te gebruiken van de sendCommand functie.

sendCommand(CMD_PLAY_W_VOL, 0x0A00 + random(10, 18));

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: hulp gevraagd bij opbouwen randomplay string functie

Berichtdoor dirk ambu » 08 Jan 2016, 20:59

beste zaphod

dat het zo makkelijk zou zijn had ik niet verwacht.
ik had al van als geprobeerd alleen wilde ik steeds 0x0A00 aan passen door die opnieuw op te bouwen.
maar + kan dus ook :)

top bedankt

groetjes dirk ambu

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: otilifivubu, utaneluoso en 98 gasten