v1

Dependencies:   PinDetect TextLCD mbed

Fork of SunflowerMach1 by Milan Draganic

Committer:
cvitas
Date:
Fri Jan 17 14:40:31 2014 +0000
Revision:
12:8cb20afa1694
Parent:
11:f243d8ed556d
danchi 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mdraganic 0:7447b8021b33 1 #include "mbed.h"
mdraganic 0:7447b8021b33 2 #include "Motor.h"
mdraganic 7:ac67f44120a5 3 #include "TextLCD.h"
cvitas 11:f243d8ed556d 4 #include "PinDetect.h"
mdraganic 3:bebfc64cefe4 5
mdraganic 10:0b8a98b1e6b1 6 #define sensorStartTreshold 0.08
mdraganic 10:0b8a98b1e6b1 7 #define sensorStopTreshold 0.02
mdraganic 3:bebfc64cefe4 8
mdraganic 5:7e28f4b64a55 9 #define calibrateFactorSenzA 1
mdraganic 5:7e28f4b64a55 10 #define calibrateFactorSenzB 0.97
mdraganic 5:7e28f4b64a55 11 #define calibrateFactorSenzC 1.06
mdraganic 5:7e28f4b64a55 12 #define calibrateFactorSenzD 0.9
mdraganic 3:bebfc64cefe4 13
mdraganic 7:ac67f44120a5 14 #define lcdOutputEnable true
cvitas 11:f243d8ed556d 15 #define serialOutputEnable true
cvitas 11:f243d8ed556d 16 #define serialOutputBaudrate 9600
mdraganic 4:03b68322905f 17
mdraganic 3:bebfc64cefe4 18 Serial pc(USBTX, USBRX);
cvitas 12:8cb20afa1694 19 TextLCD lcd(p5, p6, p7, p8, p9, p10); // rs, e, d4-d7
mdraganic 7:ac67f44120a5 20
cvitas 11:f243d8ed556d 21 Ticker Prikaz;
cvitas 11:f243d8ed556d 22
mdraganic 7:ac67f44120a5 23 DigitalOut ledBoot(LED1);
mdraganic 10:0b8a98b1e6b1 24 DigitalOut ledAz(LED3);
mdraganic 7:ac67f44120a5 25 DigitalOut ledEl(LED4);
mdraganic 0:7447b8021b33 26
cvitas 12:8cb20afa1694 27 DigitalOut R1(p26);
cvitas 12:8cb20afa1694 28 DigitalOut R2(p25);
cvitas 12:8cb20afa1694 29 DigitalOut R3(p24);
cvitas 12:8cb20afa1694 30 DigitalOut R4(p23);
cvitas 12:8cb20afa1694 31
cvitas 12:8cb20afa1694 32
mdraganic 10:0b8a98b1e6b1 33 AnalogIn ainSensA(p16);
mdraganic 10:0b8a98b1e6b1 34 AnalogIn ainSensB(p17);
mdraganic 10:0b8a98b1e6b1 35 AnalogIn ainSensC(p18);
mdraganic 10:0b8a98b1e6b1 36 AnalogIn ainSensD(p19);
mdraganic 0:7447b8021b33 37
cvitas 12:8cb20afa1694 38 PinDetect pb_azimut(p30);
cvitas 12:8cb20afa1694 39 PinDetect pb_elevacija(p29);
cvitas 11:f243d8ed556d 40
mdraganic 2:0bf41ad96558 41 float valAzimut = 0;
mdraganic 2:0bf41ad96558 42 float valElevacija = 0;
mdraganic 2:0bf41ad96558 43
cvitas 11:f243d8ed556d 44 int volatile count_azimut=0;
cvitas 11:f243d8ed556d 45 int volatile count_elevacija=0;
cvitas 11:f243d8ed556d 46
cvitas 11:f243d8ed556d 47
mdraganic 2:0bf41ad96558 48 float SensA, SensB, SensC, SensD;
cvitas 11:f243d8ed556d 49
cvitas 11:f243d8ed556d 50 // Callback routine is interrupt activated by a debounced pb hit
cvitas 11:f243d8ed556d 51 void pb_azimut_hit_callback (void) {
cvitas 11:f243d8ed556d 52 count_azimut++;
cvitas 11:f243d8ed556d 53 }
cvitas 11:f243d8ed556d 54
cvitas 11:f243d8ed556d 55 void pb_elevacija_hit_callback (void) {
cvitas 11:f243d8ed556d 56 count_elevacija++;
cvitas 11:f243d8ed556d 57 }
cvitas 11:f243d8ed556d 58
cvitas 11:f243d8ed556d 59 char GetKeyInput(void) {
cvitas 11:f243d8ed556d 60 char c = pc.getc(); // get keyboard data (note numerical ascii range)
cvitas 11:f243d8ed556d 61 pc.printf("%c",c); // print ascii value to host PC terminal
cvitas 11:f243d8ed556d 62 return (c&0x0F); // return value as non-ascii (bitmask c with value 0x0f
cvitas 11:f243d8ed556d 63 }
cvitas 11:f243d8ed556d 64
cvitas 11:f243d8ed556d 65 void od_prikaza(){
cvitas 11:f243d8ed556d 66 lcd.cls();
cvitas 11:f243d8ed556d 67 lcd.printf(" %d %d ", count_azimut , count_elevacija);
cvitas 11:f243d8ed556d 68 }
cvitas 11:f243d8ed556d 69
mdraganic 2:0bf41ad96558 70 void readValuesForAveraging() {
mdraganic 2:0bf41ad96558 71
mdraganic 2:0bf41ad96558 72 SensA = 0;
mdraganic 2:0bf41ad96558 73 SensB = 0;
mdraganic 2:0bf41ad96558 74 SensC = 0;
mdraganic 2:0bf41ad96558 75 SensD = 0;
mdraganic 2:0bf41ad96558 76
mdraganic 3:bebfc64cefe4 77 for (int i = 0; i < 20; i++) {
mdraganic 2:0bf41ad96558 78 SensA += ainSensA;
mdraganic 2:0bf41ad96558 79 SensB += ainSensB;
mdraganic 2:0bf41ad96558 80 SensC += ainSensC;
mdraganic 2:0bf41ad96558 81 SensD += ainSensD;
mdraganic 2:0bf41ad96558 82 }
mdraganic 3:bebfc64cefe4 83 SensA /= 20;
mdraganic 3:bebfc64cefe4 84 SensB /= 20;
mdraganic 3:bebfc64cefe4 85 SensC /= 20;
mdraganic 3:bebfc64cefe4 86 SensD /= 20;
mdraganic 3:bebfc64cefe4 87
mdraganic 3:bebfc64cefe4 88 SensA *= calibrateFactorSenzA;
mdraganic 3:bebfc64cefe4 89 SensB *= calibrateFactorSenzB;
mdraganic 3:bebfc64cefe4 90 SensC *= calibrateFactorSenzC;
mdraganic 3:bebfc64cefe4 91 SensD *= calibrateFactorSenzD;
mdraganic 2:0bf41ad96558 92
mdraganic 2:0bf41ad96558 93 valAzimut = (SensA + SensB) - (SensC + SensD);
mdraganic 2:0bf41ad96558 94 valElevacija = (SensB + SensC) - (SensA + SensD);
mdraganic 3:bebfc64cefe4 95
mdraganic 4:03b68322905f 96 if(serialOutputEnable) {
mdraganic 4:03b68322905f 97
cvitas 11:f243d8ed556d 98 pc.printf("az:%6.3f el:%6.3f :: A:%.3f B:%.3f C:%.3f D:%.3f \n\r",
cvitas 11:f243d8ed556d 99 valAzimut, valElevacija, SensA, SensB, SensC, SensD);
mdraganic 4:03b68322905f 100
cvitas 11:f243d8ed556d 101 // pc.printf("az:%6.3f el:%6.3f \n", valAzimut, valElevacija);
mdraganic 4:03b68322905f 102 }
mdraganic 7:ac67f44120a5 103
mdraganic 7:ac67f44120a5 104 if(lcdOutputEnable) {
mdraganic 7:ac67f44120a5 105 lcd.cls();
mdraganic 8:4044ae40bbc1 106 lcd.printf("a:%5.2f \n", valAzimut);
mdraganic 8:4044ae40bbc1 107 lcd.printf("e:%5.2f \n", valElevacija);
mdraganic 7:ac67f44120a5 108 }
mdraganic 7:ac67f44120a5 109
mdraganic 2:0bf41ad96558 110 }
mdraganic 0:7447b8021b33 111
cvitas 11:f243d8ed556d 112 char data1, data2; // variable declarations
mdraganic 10:0b8a98b1e6b1 113 int main() {
mdraganic 0:7447b8021b33 114
mdraganic 7:ac67f44120a5 115 ledBoot = 1;
cvitas 12:8cb20afa1694 116 Motor *motorEl = new Motor(p23, p24, p22);
cvitas 12:8cb20afa1694 117 /*
cvitas 11:f243d8ed556d 118 Prikaz.attach(&od_prikaza, 0.1);
cvitas 11:f243d8ed556d 119
cvitas 11:f243d8ed556d 120 // Setup Interrupt callback function for a pb hit
cvitas 11:f243d8ed556d 121 pb_elevacija.attach_deasserted(&pb_elevacija_hit_callback);
cvitas 11:f243d8ed556d 122 pb_azimut.attach_deasserted(&pb_azimut_hit_callback);
cvitas 11:f243d8ed556d 123 // Start sampling pb input using interrupts
cvitas 11:f243d8ed556d 124 pb_elevacija.setSampleFrequency();
cvitas 11:f243d8ed556d 125 pb_azimut.setSampleFrequency();
mdraganic 4:03b68322905f 126 pc.baud(serialOutputBaudrate);
cvitas 11:f243d8ed556d 127
cvitas 12:8cb20afa1694 128 Motor *motorAz = new Motor(p25, p26, p21); // relej, relej, pwm
cvitas 12:8cb20afa1694 129
cvitas 12:8cb20afa1694 130 if(lcdOutputEnable) {*/
cvitas 12:8cb20afa1694 131
cvitas 12:8cb20afa1694 132 while(1){
cvitas 12:8cb20afa1694 133 ledBoot = 1;
mdraganic 9:764eb7341754 134 lcd.cls();
mdraganic 9:764eb7341754 135 lcd.printf("Suncokre\n");
mdraganic 9:764eb7341754 136 lcd.printf("t TVZ \n");
mdraganic 10:0b8a98b1e6b1 137
cvitas 12:8cb20afa1694 138 wait_ms(200);
cvitas 12:8cb20afa1694 139 ledBoot = 0;
cvitas 12:8cb20afa1694 140 wait_ms(200);
cvitas 12:8cb20afa1694 141 (*motorEl).stop();
cvitas 12:8cb20afa1694 142 /*
cvitas 12:8cb20afa1694 143 R1 = 1;
cvitas 12:8cb20afa1694 144 R2 = 0;R3=0;R4=0;
cvitas 12:8cb20afa1694 145 wait_ms(1000);
cvitas 12:8cb20afa1694 146 R2 = 1;
cvitas 12:8cb20afa1694 147 R1 = 0;R3=0;R4=0;
cvitas 12:8cb20afa1694 148 wait_ms(1000);
cvitas 12:8cb20afa1694 149 R3 = 1;
cvitas 12:8cb20afa1694 150 R2 = 0;R1=0;R4=0;
cvitas 12:8cb20afa1694 151 wait_ms(1000);
cvitas 12:8cb20afa1694 152 R4 = 1;
cvitas 12:8cb20afa1694 153 R2 = 0;R3=0;R1=0;*/
cvitas 12:8cb20afa1694 154
cvitas 12:8cb20afa1694 155 wait_ms(600);
cvitas 12:8cb20afa1694 156 (*motorEl).movePositive();
cvitas 12:8cb20afa1694 157 wait_ms(1000);
cvitas 12:8cb20afa1694 158 (*motorEl).stop();
cvitas 12:8cb20afa1694 159 (*motorEl).moveNegative();
cvitas 12:8cb20afa1694 160 wait_ms(1000);
cvitas 12:8cb20afa1694 161
cvitas 12:8cb20afa1694 162
cvitas 12:8cb20afa1694 163 }
cvitas 12:8cb20afa1694 164
mdraganic 0:7447b8021b33 165 }
mdraganic 2:0bf41ad96558 166
mdraganic 2:0bf41ad96558 167