Raspberry Pi is great tool for embedded engineers but it lacks ADC. One more draw back is all its IO’s are 3.3V level. On the other side Arduino is good at sensing the physical world using sensors. To get benefits of both the systems one may want to interface them.
We can divide this interfacing problem into two steps. There are many interface options available in both boards like UART, IIC and SPI. The choice of protocol depends on the requirement of the application and roles of the Arduino and Raspberry Pi. The main problem arises when we try to make physical connection between the two boards because they are working on different voltage levels. We need to use level shifters to avoid any damage to the Raspberry Pi and to get expected results. There is nice blog on arduino forms. If you are not aware the level shifters you can build one by looking at this blog. Once we have physical connection between the two, they can start talking with each other. On Pi side you can use any of your favorite programming language.