Results
Results:
Our graphing calculator can do add, subtract, multiply, exponents, e^(a), ln(a), log(a), sin(a), cos(a), tan(a). It can also graph all the functions we originally planned. The sine function crosses the origin and the cosine function crosses (0,l). The e^(x) function crosses (0,1) and so on. It is fairly accurate if the coefficient b is not too high. We started noticing some accuracy issues when we were graphing Y=sin(4x). The amplitude was slightly changing and the graph of Y=sin(16x) have really noticeable amplitude differences. Straight lines such as Y=x are not graphed straight if zoomed in to the Y={-2,2}, X = {-2,2} range. These errors are due to rounding errors that occurred during converting floats to integers to fit the screen coordinates. We feel that if the LCD is smaller such as the ones in real graphing calculators, the inaccuracy would be harder to notice. Drawing custom axis experienced the same problem. We had to round down our calculations in order to fit into pixels. Therefore the axis might sometimes be off by one pixel, which is acceptable. We also noticed a lot of flickering on the screen when the calculator is graphing. This is because every time we plot a point, we have to read in from the LCD memory and then rewrite to that same byte of memory. We can delay the time between plotting each points, but that will slow down the graphing process and would cause more annoyance than a flickering screen.
Things that would be implemented next time:
The first thing we would be better next time is to write a parser for our calculator interface to make it more user friendly. Currently we make the user enter functions in a specific way. It would be nice to give more freedom to the user when entering functions to the calculator. We were not able to have a parser for our calculator at this time because of our limited time, and our concern over the limited memory size of the micro-controller. The next thing we are considering implementing is to have more function levels. LL01 can only graph functions specified above and their linear combination, it is not able to graph functions like Y=sin(x^2) or Y=x^x. This idea would be easy to implement once we have the parser. The last thing that might improve our calculator is to add unit conversion ability. Unit conversions should be very easy to implement in software, however it will take some amount of time to develop the graphics interface for that ability since the display for conversion mode would be different from the two mode we have already. It would also be very nice to add additional capabilities like drawing, small games, and other functions currently standard on a commercial graphing calculator.