Unit írása

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
FBalazs
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2012. december 24. hétfő, 7:00

Unit írása

Hozzászólás Szerző: FBalazs »

Sziasztok!

Megépítettem már a robotom meghajtását, és azt szeretném, hogy minél átláthatóbb programot tudjak hozzá írni. Ehhez elkezdtem készíteni egy unitot, viszont van egy kis problémám: az egyik void nem akar meghívódni illetve nem tudom miért de nem történik semmi a következő program futtatásánál:

Kód: Egész kijelölése

#include <Robot.h>

Motor test;

void setup()
{
  test.init(12,13);
  test.forward(255);
}

void loop()
{
  
}
Robot.h

Kód: Egész kijelölése

#ifndef Robot_h
#define Robot_h

class Motor
{
	public:
		Motor();
		void init(int forwardpin, int backwardpin);
		void forward(int value);
		void backward(int value);
		void stop();
		int id;
};

#endif
Robot.cpp

Kód: Egész kijelölése

#include <Arduino.h>
#include <Robot.h>

int forwardpins[16];
int backwardpins[16];
int speeds[16];
int tick=0;
bool needinit=true;

Motor::Motor()
{
	this->id=0;
	while(forwardpins[this->id]!=backwardpins[this->id])
	{
		this->id++;
	}
}

void Motor::stop()
{
	speeds[this->id]=0;
}

void Motor::forward(int value)
{
	speeds[this->id]=value;
}

void Motor::backward(int value)
{
	speeds[this->id]=-value;
}

inline void update()
{
	int i=0;
	while(forwardpins[i]!=backwardpins[i])
	{
		if(speeds[i]>0 /*&& speeds[i]>tick*/)
		{
			digitalWrite(backwardpins[i], LOW);
			digitalWrite(forwardpins[i], HIGH);
		}
		else if(speeds[i]<0 /*&& speeds[i]<-tick*/)
		{
			digitalWrite(forwardpins[i], LOW);
			digitalWrite(backwardpins[i], HIGH);
		}
		else
		{
			digitalWrite(forwardpins[i], LOW);
			digitalWrite(backwardpins[i], LOW);
		}
	}
	
	tick++;
	if(tick==256)
	{
		tick=0;
	}
	update();
}

void Motor::init(int forwardpin, int backwardpin)
{
	forwardpins[this->id]=forwardpin;
	backwardpins[this->id]=backwardpin;
	if(needinit)
	{
		update();
		needinit=false;
	}
}
Az egyetlen hiba amit eltudok képzelni, hogy az update() nem hívódik meg, de miért?
Segítségeteket előre is köszönöm!
Avatar
FBalazs
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2012. december 24. hétfő, 7:00

Re: Unit írása

Hozzászólás Szerző: FBalazs »

Ha felcserélem a test.init(12,13)-at és a test.forward(255)-öt akkor a motor üzemel.
Csak tévedésből gondolom, hogy az inline modfier azt jelöli, hogy párhuzamosan futtat?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Unit írása

Hozzászólás Szerző: Robert »

Hülye tipp:
Puskázni meglevő függvénykönyvtárból?
Avatar
glezmen
Bitmanipulátor
Hozzászólások: 139
Csatlakozott: 2012. augusztus 9. csütörtök, 6:00

Re: Unit írása

Hozzászólás Szerző: glezmen »

huhh, ez a kod iszonyatosan katyvasz, el kene donteni hogy OOP vagy strukturalt modon programozol, ez az osszekevert megoldas garantaltan rengeteg rejtelyes hibat fog szulni meg a jovoben

az update inline-ositasa teljesen ertelmetlen, ekkora nagy fuggvenyt inline-ba teve valoszinuleg csak annyit ersz el hogy sokkal nagyobb es lassabb lesz a program
raadasul az update fuggveny sajat magat hivja, ami mar eleve vegtelen ciklus
Válasz küldése