fx-9860GII - Arduino - Communication
17 posts
• Page 1 of 2 • 1, 2
- Pedantis
- Junior Member
- Posts: 14
- Joined: Fri Apr 26, 2013 5:57 pm
- Location: BW, Germany
- Calculators: Casio fx-9860GII
fx-9860GII - Arduino - Communication
Some time ago, I spoke with Simon Lothar about the use of the serial port integrated in the fx-9860GII for communication purposes. As some of you might know, there is an Add-In available, called Terminal and developed by Kucalc, which provides a possibility for calc-calc-communication via the serial port.
But for some more sophisticated project I need a way to be able to transmit strings from the calculator to an Arduino (a simple microcontroller board) in a different way.
My question is: Is there a way to make an Add-In where you can input some text and transfer it by hitting something like a "OK"-Button via the serial port?
I am familiar with C/C++, but I never developed Add-Ins for the fx-9860GII.
Any kind of help would be greatly appreciated.
But for some more sophisticated project I need a way to be able to transmit strings from the calculator to an Arduino (a simple microcontroller board) in a different way.
My question is: Is there a way to make an Add-In where you can input some text and transfer it by hitting something like a "OK"-Button via the serial port?
I am familiar with C/C++, but I never developed Add-Ins for the fx-9860GII.
Any kind of help would be greatly appreciated.
- nsg
- Senior Member
- Posts: 69
- Joined: Sat Feb 02, 2013 4:29 am
- Calculators: Casio Cfx Series, Casio fx-CG10
Re: fx-9860GII - Arduino - Communication
I would like to refer you to this thread about casio com communication.
Nominally it is about Prizm, but I ended up using CFX for actual project.
viewtopic.php?f=22&t=1490
Also, I would like to encourage you to explore all possible ways to stay with Basic until you can.
You need calculator for the user interface (to display numbers received from arduino and send input numbers back to arduino with possibly some text prompts and number scaling/conversion) and in projects like this you will want to tweak it a lot. It is way easier to do in basic even with all its drawbacks. Implement casio alpha send/receive protocol, it is described in detail and just use Basic Send/Receive to exchange numbers.
Here is another video where my buddy uses TI as a display device for arduino-based sensor pack.
http://www.youtube.com/watch?v=IN0oifPyCwA
Nominally it is about Prizm, but I ended up using CFX for actual project.
viewtopic.php?f=22&t=1490
Also, I would like to encourage you to explore all possible ways to stay with Basic until you can.
You need calculator for the user interface (to display numbers received from arduino and send input numbers back to arduino with possibly some text prompts and number scaling/conversion) and in projects like this you will want to tweak it a lot. It is way easier to do in basic even with all its drawbacks. Implement casio alpha send/receive protocol, it is described in detail and just use Basic Send/Receive to exchange numbers.
Here is another video where my buddy uses TI as a display device for arduino-based sensor pack.
http://www.youtube.com/watch?v=IN0oifPyCwA
- helder7
- Senior Member
- Posts: 369
- Joined: Tue Jan 03, 2012 11:24 pm
- Calculators: Casio Afx 1.0, Casio fx-9860GII SD, Casio Classpad 330, Casio fx-CG20, Casio Classpad fx-CP400
Re: fx-9860GII - Arduino - Communication
I'll leave here a small example for serial (for you start)...
You should create a new sdk project. And after you should add the file "Syscalls.src" to the sdk source files.
Sample "Syscalls.src" for serial communication:
back to .c, you should put the functions declaration after the #include:
to open the port, you can use something like:
Then you can send byte's with Serial_BufferedTransmitOneByte
like:
you should read the Simon Lothar doc fx_calculators_SuperH_based.chm (17) that exlains the serial syscalls in detail. This is just a quick start exemple based on his document.
You should create a new sdk project. And after you should add the file "Syscalls.src" to the sdk source files.
Sample "Syscalls.src" for serial communication:
- Code: Select all
.SECTION P,CODE,ALIGN=4
.MACRO SYSCALL FUNO, SYSCALLNAME, TAIL=nop
.export \SYSCALLNAME'
\SYSCALLNAME'
mov.l #h'\FUNO, r0
mov.l #H'80010070, r2
jmp @r2
\TAIL'
.ENDM
SYSCALL 040C, _Serial_ReadOneByte
SYSCALL 040E, _Serial_BufferedTransmitOneByte
SYSCALL 0418, _Serial_Open
SYSCALL 0419, _Serial_Close
.end
back to .c, you should put the functions declaration after the #include:
- Code: Select all
int Serial_BufferedTransmitOneByte( unsigned char );
int Serial_Open( void*sm );
int Serial_Close( int mode );
int Serial_ReadOneByte( unsigned char* );
to open the port, you can use something like:
- Code: Select all
char mode[6];
mode[ 0 ] = 0;
mode[ 1 ] = 9;//0=300, 1=600, 2=1200, 3=2400, 4=4800, 5=9600, 6=19200, 7=38400, 8=57600, 9=115200 baud
mode[ 2 ] = 2;//parity: 0=no; 1=odd; 2=even
mode[ 3 ] = 0;//datalength: 0=8 bit; 1=7 bit
mode[ 4 ] = 0;//stop bits: 0=one; 1=two
mode[ 5 ] = 0;
Serial_Open(&mode);
Then you can send byte's with Serial_BufferedTransmitOneByte
like:
- Code: Select all
unsigned char demo;
demo='F';
Serial_BufferedTransmitOneByte(demo);
you should read the Simon Lothar doc fx_calculators_SuperH_based.chm (17) that exlains the serial syscalls in detail. This is just a quick start exemple based on his document.
SiO2 + CaCO3 ----------> CaSiO3 + CO2
- Pedantis
- Junior Member
- Posts: 14
- Joined: Fri Apr 26, 2013 5:57 pm
- Location: BW, Germany
- Calculators: Casio fx-9860GII
Re: fx-9860GII - Arduino - Communication
Thanks for the nice example, helder7!
It works like a charm.
This is the code I am using:
The only thing I changed is the initialization of the demo-char (it failed during building the file when I tried to initialize it directly before demo='F', I don't know why).
I programmed the Arduino as a simple serial repeater in order to be able to see transmitted text on my computer.

This is the construction I use.
The next step would be to send a string - how can I do that?
Futhermore, I would like to be able to enter a string on the calculator. How can I do that?
It works like a charm.
This is the code I am using:
- Code: Select all
#include "fxlib.h"
int Serial_BufferedTransmitOneByte(unsigned char);
int Serial_Open(void*sm);
int Serial_Close(int mode);
int Serial_ReadOneByte(unsigned char*);
unsigned int key;
unsigned char demo;
int AddIn_main(int isAppli, unsigned short OptionNum)
{
char mode[6];
mode[0] = 0;
mode[1] = 5;
mode[2] = 2;
mode[3] = 0;
mode[4] = 0;
mode[5] = 0;
Serial_Open(&mode);
demo='F';
Serial_BufferedTransmitOneByte(demo);
Bdisp_AllClr_DDVRAM();
locate(1,4);
Print((unsigned char*)"Some");
locate(1,5);
Print((unsigned char*)"text");
while(1){
GetKey(&key);
}
return 1;
}
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section
The only thing I changed is the initialization of the demo-char (it failed during building the file when I tried to initialize it directly before demo='F', I don't know why).
I programmed the Arduino as a simple serial repeater in order to be able to see transmitted text on my computer.

This is the construction I use.
The next step would be to send a string - how can I do that?
Futhermore, I would like to be able to enter a string on the calculator. How can I do that?
- Pedantis
- Junior Member
- Posts: 14
- Joined: Fri Apr 26, 2013 5:57 pm
- Location: BW, Germany
- Calculators: Casio fx-9860GII
Re: fx-9860GII - Arduino - Communication
UPDATE:
I implemented a new procedure to send a string:
For this purpose I added a new syscall in syscalls.src:
The sleeps in the .c are for debugging purposes.
Strangely, the resulted output on my computer looks always like this:
"Loÿrÿeÿm iÿpsum doÿlÿoÿrÿ siÿtÿ ameÿtÿ"
Does somebody know why?
I implemented a new procedure to send a string:
- Code: Select all
#include "fxlib.h"
#include "string.h"
int Serial_BufferedTransmitOneByte(unsigned char);
int Serial_Open(void*sm);
int Serial_Close(int mode);
int Serial_ReadOneByte(unsigned char*);
int i;
int j;
unsigned int key;
unsigned char demo;
char test[] = "Lorem ipsum dolor sit amet";
int AddIn_main(int isAppli, unsigned short OptionNum)
{
char mode[6];
mode[0] = 0;
mode[1] = 5;
mode[2] = 2;
mode[3] = 0;
mode[4] = 0;
mode[5] = 0;
Serial_Open(&mode);
for(i=0; i<strlen(test); i++)
{
Serial_ClearTransmitBuffer();
demo=test[i];
Serial_BufferedTransmitOneByte(demo);
Sleep(100);
Serial_ClearTransmitBuffer();
Sleep(100);
}
Bdisp_AllClr_DDVRAM();
locate(1,4);
Print((unsigned char*)"Some");
locate(1,5);
Print((unsigned char*)"text");
while(1){
GetKey(&key);
}
return 1;
}
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section
For this purpose I added a new syscall in syscalls.src:
- Code: Select all
.SECTION P,CODE,ALIGN=4
.MACRO SYSCALL FUNO, SYSCALLNAME, TAIL=nop
.export \SYSCALLNAME'
\SYSCALLNAME'
mov.l #h'\FUNO, r0
mov.l #H'80010070, r2
jmp @r2
\TAIL'
.ENDM
SYSCALL 040C, _Serial_ReadOneByte
SYSCALL 040E, _Serial_BufferedTransmitOneByte
SYSCALL 0418, _Serial_Open
SYSCALL 0419, _Serial_Close
SYSCALL 0414, _Serial_ClearTransmitBuffer
.end
The sleeps in the .c are for debugging purposes.
Strangely, the resulted output on my computer looks always like this:
"Loÿrÿeÿm iÿpsum doÿlÿoÿrÿ siÿtÿ ameÿtÿ"
Does somebody know why?
- helder7
- Senior Member
- Posts: 369
- Joined: Tue Jan 03, 2012 11:24 pm
- Calculators: Casio Afx 1.0, Casio fx-9860GII SD, Casio Classpad 330, Casio fx-CG20, Casio Classpad fx-CP400
Re: fx-9860GII - Arduino - Communication
I tested here your code with a homemade cable and with the software Eltima RS232 Data Logger and it sends the string correctly (without ÿ).
Possibly you have to adjust port settings in arduino software. I had a similar problem with my cable and I only solved it by adjusting the port settings in pc.
Possibly you have to adjust port settings in arduino software. I had a similar problem with my cable and I only solved it by adjusting the port settings in pc.
SiO2 + CaCO3 ----------> CaSiO3 + CO2
- Pedantis
- Junior Member
- Posts: 14
- Joined: Fri Apr 26, 2013 5:57 pm
- Location: BW, Germany
- Calculators: Casio fx-9860GII
Re: fx-9860GII - Arduino - Communication
Ok, looks like the strange symbols are caused by the serial monitor I used before.
Now, my next question is: how can I insert a string by typing it on the calculator?
Now, my next question is: how can I insert a string by typing it on the calculator?
- helder7
- Senior Member
- Posts: 369
- Joined: Tue Jan 03, 2012 11:24 pm
- Calculators: Casio Afx 1.0, Casio fx-9860GII SD, Casio Classpad 330, Casio fx-CG20, Casio Classpad fx-CP400
Re: fx-9860GII - Arduino - Communication
SiO2 + CaCO3 ----------> CaSiO3 + CO2
- Pedantis
- Junior Member
- Posts: 14
- Joined: Fri Apr 26, 2013 5:57 pm
- Location: BW, Germany
- Calculators: Casio fx-9860GII
Re: fx-9860GII - Arduino - Communication
Thanks a lot, helder7!
Is it also possible to send small chars or even things like ä, ö, ü?
EDIT: Right now the space char doen't work...
Is it also possible to send small chars or even things like ä, ö, ü?
EDIT: Right now the space char doen't work...
- helder7
- Senior Member
- Posts: 369
- Joined: Tue Jan 03, 2012 11:24 pm
- Calculators: Casio Afx 1.0, Casio fx-9860GII SD, Casio Classpad 330, Casio fx-CG20, Casio Classpad fx-CP400
Re: fx-9860GII - Arduino - Communication
Try to use the syscall EditExpression instead of InputString (viewtopic.php?f=20&t=1377). I think this supports spaces. I'm not sure about special multibyte characters like ä, ö, ü.
SiO2 + CaCO3 ----------> CaSiO3 + CO2
17 posts
• Page 1 of 2 • 1, 2
Who is online
Users browsing this forum: No registered users and 39 guests