Kamil Ondrousek
/
ChuaVGA
Chua oscillator - uVGAII(SGC) 4DGL color version 640x480 pin p9 - rx, pin p10 - tx, pin p11 - rst
main.cpp
- Committer:
- JLS
- Date:
- 2011-09-03
- Revision:
- 0:2e86b4b28ea1
File content as of revision 0:2e86b4b28ea1:
#include "mbed.h" Serial _cmd (p9, p10); DigitalOut _rst (p11); void startVGA(); void baudrate(); void cls(); void pixel(int, int, int); int writeCOM(char *, int); int main() { startVGA (); float x = 0.5; float y = 0.25; float z = 0.125; float oldx = 0; float oldy = 0; float oldz = 0; float dt = 0.02; float alpha = 15.6; float beta = 28.58; float a = -1.14286; float b = -0.714286; float h = 0; int xout = 0; int yout = 0; int col = 0; int cnt = 0; while (1) { oldx = x; oldy = y; oldz = z; h = (b * x) + (0.5 * (a - b) * (abs(x+1) - abs(x-1))); x = oldx + dt * (alpha * (oldy - oldx - h)); y = oldy + dt * (oldx - oldy + oldz); z = oldz + dt * (-beta * oldy); xout = 320+(130*x); yout = 240+(430*y); pixel(xout,yout,col); cnt ++; if (cnt == 100) { col = rand(); cnt = 0; } } } void startVGA () { _rst = 1; _rst = 0; wait_ms(1); _rst = 1; wait(3); while (_cmd.readable()) _cmd.getc(); char autobaud[1] = ""; autobaud[0] = '\x55'; writeCOM(autobaud, 1); baudrate(); cls(); char dispctr[3]= ""; dispctr[0] = '\x59'; dispctr[1] = 0x0c; dispctr[2] = 0x01; writeCOM(dispctr, 3); } void pixel(int x, int y, int color) { char pixel[7]= ""; pixel[0] = '\x50'; pixel[1] = (x >> 8) & 0xFF; pixel[2] = x & 0xFF; pixel[3] = (y >> 8) & 0xFF; pixel[4] = y & 0xFF; pixel[5] = (color >> 8) & 0xFF; pixel[6] = color & 0xFF; writeCOM(pixel, 7); } void baudrate() { char baudrate[2]= ""; baudrate[0] = '\x51'; baudrate[1] = '\x0F'; int i, resp = 0; while (_cmd.readable()) _cmd.getc(); long speed = speed = 281000; for (i = 0; i <2; i++) _cmd.putc(baudrate[i]); _cmd.baud(speed); while (!_cmd.readable()) wait_ms(1); if (_cmd.readable()) resp = _cmd.getc(); switch (resp) { case '\x06' : resp = 1; break; case '\x15' : resp = -1; break; default : resp = 0; break; } } int writeCOM(char *command, int number) { int i, resp = 0; while (_cmd.readable()) _cmd.getc(); for (i = 0; i < number; i++) _cmd.putc(command[i]); while (!_cmd.readable()) wait_ms(1); if (_cmd.readable()) resp = _cmd.getc(); switch (resp) { case '\x06' : resp = 1; break; case '\x15' : resp = -1; break; default : resp = 0; break; } return resp; } void cls() { char cls[1] = ""; cls[0] = '\x45'; writeCOM(cls, 1); }