/* This file is part of JOP, the Java Optimized Processor see <http://www.jopdesign.com/> Copyright (C) 2007, Peter Hilber and Alexander Dejaco This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package lego; import lego.lib.*; import java.io.*; import joprt.RtThread; public class BackEMFAvg { /** * @param args */ public static void main(String[] args) throws IOException { System.out.println("Starting..."); Motor m0 = new Motor(0); m0.setMotor(Motor.STATE_FORWARD, true, 0); int pwmValue = 0; final int VALUE_COUNT = 10; int[][] values = new int[VALUE_COUNT][2]; int index = 0; while (true) { if (Buttons.getButton(0)) pwmValue = Math.max(0, pwmValue-1); if (Buttons.getButton(1)) pwmValue = Math.min(0x3f, pwmValue+1); if (Buttons.getButton(3)) m0.setMeasure(true); if (Buttons.getButton(2)) m0.setMeasure(false); m0.setDutyCycle((pwmValue * Motor.MAX_DUTYCYCLE) / 0x3f); Leds.setLeds(pwmValue >> 2); RtThread.busyWait(25 * 1000); int backEMF[] = m0.readBackEMF(); values[index] = backEMF; int avg[] = new int[] {0,0}; for (int i = 0; i < VALUE_COUNT; i++) for (int j = 0; j < 2; j++) avg[j] += values[i][j]; if (index == VALUE_COUNT-1) { System.out.print("DC: "); System.out.print(pwmValue); System.out.print(" bEMF: "); } for (int j = 0; j < 2; j++) { avg[j] /= VALUE_COUNT; if (index == VALUE_COUNT-1) { System.out.print(avg[j] - 0x100); System.out.print(" "); } } if (index == VALUE_COUNT-1) { System.out.println(); } index = (index + 1) % VALUE_COUNT; } } }