The (very good) LM358 Data sheet referred to by Kevin advises that the LM358 will give outputs to within 1.5V of the power rails. This type of Op-Amp usually has a 50 ohm output resistance, so at 20mA output you'd take another volt off that. That's got you down to +/- 9.5V output swing already. Take 35mA out of it and that'll go down some more. And this is under ideal conditions. Look at page 6 of the datasheet and it has some more figures. If you're only using a single 12V supply then you've lost minimum 4V output already, bad news for you.... The LM358 only accepts inputs to within 2V of the supply rails as well, which limits you further, especially if you're using a single power supply.
You could try using higher supply rail(s) (+/- 15V) but really I'd try another kind of OpAmp, one designed to give a bit more current out. Such things are made but I'd have to fossick around a bit to find one for you and I don't have time right now.
There is another trick you can use. If you put a resistor in each supply leg and use them to drive the bases of NPN (-leg) and PNP (+leg) transistors, the emitters to the supply rais and the collectors to the output, they will beef up your current driving capability considerably. I'll see if I can find a drawing of thsi and post a link.
If you're driving the amp from an arduino You'd need some gain - 2 or 3 times - to get an output swing of 10V. Overall, the LM358 is a poor choice of OpAmp for your application. You need something that has input common mode range to the power rails, certainly to the - rail if you're working single power supply, and a better output voltage range as well. If I can find any more information later I will post it. Good luck.