segítség!!

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Lezárt
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

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

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

if (Tavolsag <= 200 ) {
// Ezt a részt minek újra ismételgetni???
  analogWrite(5, 0);
  Serial.print("5.láb le");
  analogWrite(6, pwm);
  Serial.println("kifele");

 //  delay(100); ez felesleges
do{
// Itt várakozunk, közben frissítjük Tavolsag értékét
Tavolsag = 10*EchoTime/58; // a celtargy tavolsaganak kiszamitasa (mm-ben)

  }while(Tavolsag>=400);  
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

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

Ma voltam konzultáción. Kiderült, hogy a motor irányváltásos működése körülbelül 5 sorral leírható, csak én bonyolítottam túl :D Pontosítottunk a feladaton is. A tanár azt mondta, hogy a program elejére szúrjam be egy szinusz jel értékeit táblázatban (excelből pl), és ahogy különböző időközönként frissít, továbbhalad, és pwm értékét változtatja. Így értette azt, hogy rá lehessen kényszeríteni egy szinusz jelet. A másik amit kért, hogy a loop lefutásának idejét kellene fixálni, illetve megtudni mennyi idő alatt fut le. Ha bele írunk rengeteg Serial.print()-et akkor is annyi idő alatt fusson le, mintha egy sem lenne benne. Ahogy nyomkodjuk a billentyűt az ellenerőt vált ki ami kicsit lassítja a motort. Nekünk a cél az lenne, hogy a motor bármekkora ellenerő hatására is ugyanúgy tartsa a sebességet. Ahogy kivettem a szavaiból a szinusz bemeneti értékéből ki akarja vonni az adott pwm értékét, és a hibát (különbséget) felerősíti. A mozgató program egyébként ennyi:
feladat1.docx
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

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

Figyelj!
Hozzászólás írás közben van a felső sorban CODE gomb!
Ha oda beszúrnád az ilyen rövidke programodat, itt láthatnánk, nem kellene letöltögetnünk Wordbe!

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

#define EchoPin 2 // SRF04 Echo laba PIN2-re kotve
#define TriggerPin 3 // SRF04 Trigger laba PIN3-ra kotve
unsigned long EchoTime = 0; // az Echo labon megjeleno jel hosszat tartalmazo valtozo
unsigned long Tavolsag = 0; // a mert tavolsagot tartalmazo valtozo

  byte pwm=50;
void setup() {
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  analogWrite(5, pwm);
  analogWrite(6, pwm);
 pinMode(TriggerPin, OUTPUT); // Trigger lab kimenet
 pinMode(EchoPin, INPUT); // Echo lab bemenet
 Serial.begin(9600); // 9600 baud-sebessegu soros kommunikacios port beallitasa
}
void loop() {
  
 digitalWrite(TriggerPin, HIGH); // a szenzornak 10 mikroszekundumos jel kuldese a Trigger labra
 delayMicroseconds(10);
 digitalWrite(TriggerPin, LOW);
 EchoTime = pulseIn(EchoPin, HIGH); // az Echo labon a magas allapot idejenek merese
Tavolsag = 10*EchoTime/58; // a celtargy tavolsaganak kiszamitasa (mm-ben)
 Serial.print(Tavolsag, DEC); // az eredmeny elkuldese a soros porton keresztul a PC-re
 Serial.println(" mm"); // mm kiirasa az eredmeny utan




if (Tavolsag >= 70 ) {

    analogWrite(5, 0);
    analogWrite(6, pwm);
 }

  else if(Tavolsag <= 50){ 
  
    analogWrite(6, 0);  
    analogWrite(5, pwm);  
  }

}

Valahogy így!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

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

Ez érdekes lesz!
kb. 20 – 30 Microseconds-onként kiírja:

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

 Serial.print(Tavolsag, DEC); // az eredmeny elkuldese a soros porton keresztul a PC-re
 Serial.println(" mm"); // mm kiirasa az eredmeny utan
Ennek mi értelme?
El sem tudod olvasni olyan hirtelen!
Naszalyvadas
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2014. november 18. kedd, 22:05

Re: segítség!!

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

Igazad van :) ez a példaprogramban volt benn, amit egyelőre átmásoltam, de a kiírást ki fogom szedni belőle. A szinuszjel táblázatba rakásában és onnan kiolvasásában tudsz segíteni? :$
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: segítség!!

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

Táblázat: array. Adott elemre hivatkozás/létrehozás:

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

int myArray[10]={9,3,2,4,3,2,7,8,9,11};
     // myArray[9]    contains 11
     // myArray[10]   is invalid and contains random information (other memory address)  
Fontos! ha így hozod létre, zabálja a SRAM-ot!
Flashba rakás: PROGMEM

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

#include <avr/pgmspace.h>


// save some unsigned ints
PROGMEM  prog_uint16_t charSet[]  = { 65000, 32796, 16843, 10, 11234};

// save some chars
prog_uchar signMessage[] PROGMEM  = {"I AM PREDATOR,  UNSEEN COMBATANT. CREATED BY THE UNITED STATES DEPART"};

unsigned int displayInt;
int k;    // counter variable
char myChar;  

// read back a 2-byte int
 displayInt = pgm_read_word_near(charSet + k)

// read back a char 
myChar =  pgm_read_byte_near(signMessage + k); 

Bővebben:
http://arduino.cc/en/Reference/PROGMEM
http://arduino.cc/en/Reference/array
F4ther
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2015. május 7. csütörtök, 16:39

Re: segítség!!

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

Sziasztok!

Segítséget szeretnék kérni, TavIR-től vettem arduinot és hozzá logger shield-et (ma jött meg), amiben szerettem volna belőni az RTC-t, de sajnos nem járok sikerrel, amit kiír:

"2165/165/165 165:165:85
since midnight 1/1/1970 = 2090769489s = 24198d
now + 7d + 30s: 2036/4/9 17:18:39"

A ds1307-es mintaprogrammal próbáltam, ha manuálisan adom meg neki a dátumot (bármit) akkor is ugyan ezt adja be, kiveszem az elemet, vissza, szintén. Neten utána néztem, de nem sok megoldásra leltem (legtöbb helyen azt írták hogy valszeg hibás az RTC vagy a forrasztás)

A hibajavítás sürgős lenne, határidő miatt :x
F4ther
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2015. május 7. csütörtök, 16:39

Re: segítség!!

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

Nem tudok sajnos hozzászólást szerkeszteni, de azóta még próbálkoztam az RTC modullal.
Megnéztem a kontaktokat, próbáltam más rtc könyvtárral is, más forráskódokkal is. Semmi

2165/165/165 165:165:85
2165/165/165 165:165:85

Nagyon úgy néz ki hogy rossz az ic

TavIR-nál jár garancia? Sajnos telefonon nem tudtam őket elérni mikor próbáltam (ki volt kapcsolva, mind a 3 alkalomkor, munkaidőben)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: segítség!!

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

Garancia egyebek ügyintézése - emailban (a szó elszáll..).

A panelen az átkötés alul megvan a A4/A5 vonalakra?
A I2C detect mit mond?
Gombelem berakva? Feszültsége megvan?

U.i.: Munkaidőben szinte nincs kikapcsolva a telefon. Max. kicsöng (kivéve, ha tárgyalás van, akkor ki lehet lőve, vagy ha előadáson vagyok). Ekkor küld sms-t de jobb ha emailt írsz.
F4ther
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2015. május 7. csütörtök, 16:39

Re: segítség!!

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

Robert írta:Garancia egyebek ügyintézése - emailban (a szó elszáll..).

A panelen az átkötés alul megvan a A4/A5 vonalakra?
A I2C detect mit mond?
Gombelem berakva? Feszültsége megvan?

U.i.: Munkaidőben szinte nincs kikapcsolva a telefon. Max. kicsöng (kivéve, ha tárgyalás van, akkor ki lehet lőve, vagy ha előadáson vagyok). Ekkor küld sms-t de jobb ha emailt írsz.
Elnézést kérek, én voltam a buta :oops:

Sikerült megoldani, az SDA és SCL kimeneteket kellett átkötni a Data logging shield-en, most már minden jó!
F4ther
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2015. május 7. csütörtök, 16:39

Re: segítség!!

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

Sziasztok

Egy kis segítséget szeretnék kérni, a programozáshoz.
Ez egy nagyobb program egy része, és ennek a lényege az lenne hogy meghatározott (állítható) ideig digitális 1, majd a másik meghatározott ideig digitális 0 az adott kimeneten, for ciklus használata nélkül, mert közbe mást is szeretnék hogy fusson

Jelenlegi állapotában folyamatosan be van kapcsolva, pedig serial monitor szerint a 2. if feltételbe belemegy, mert kiírja, hogy "Most kikapcsolt" de a digitalWrite nem írja át 0-ra (végig marad 1)

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

#define Ledbe 2
#define Ledki 5

#include <Wire.h>
#include "RTClib.h"
#include <SPI.h>

int ledPin = 2;
short x;

RTC_DS1307 RTC;

void setup() {
  Wire.begin();
  RTC.begin();
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  DateTime now = RTC.now();
  x=now.unixtime()%(Ledbe+Ledki);
  if ((x<=Ledbe)&&(!digitalRead(ledPin)))
    {
      digitalWrite(ledPin, HIGH);
      Serial.print('\n');
      Serial.print("Most bekapcsolt");
    }
  if ((x>Ledbe)&&(digitalRead(ledPin)))
    {
      digitalWrite(ledPin, LOW);
      Serial.print('\n');
      Serial.print("Most kikapcsolt");
    } 
  delay(200);
  Serial.print(", ");
  Serial.println(x);
}
Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Re: segítség!!

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

Szia!
A Serial.println(x); sorban az x változása az amit vársz?
Írj ide pár sort abból amit közben kiír! A serial monitorból.
F4ther
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2015. május 7. csütörtök, 16:39

Re: segítség!!

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

rostasc3 írta:Szia!
A Serial.println(x); sorban az x változása az amit vársz?
Írj ide pár sort abból amit közben kiír! A serial monitorból.
Igen, csak figyeltem hogy megfelelően számol e az x, de további kutakodással kezdem kaparni hogy merre lehet a probléma gyökere, és valahogy a könyvtárak felé kell keresgélni:

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

#define Ledbe 2
#define Ledki 5

#include <Wire.h>
#include "RTClib.h"
#include <SPI.h>

int ledPin = 2;
// short x;

RTC_DS1307 RTC;

void setup() {
//  Wire.begin();
  RTC.begin();
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
//  DateTime now = RTC.now();
   RTC.now();
//  x=now.unixtime()%(Ledbe+Ledki);
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(1000);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(1000);        
}
Itt annyit figyeltem meg, ha a Wire.begin() függvényt meghívom (tehát kiveszem a //-eket) akkor már nem fog villogni a led, ami a 2-es pin-en van, ugyan ez az RTC.now() függvénnyel is (jelen állapotban nem villog a kód, kikell hozzá kommentelni az RTC.now()-t) (Arduino Leonardo-t használok, és rajta egy Data logger shield)
F4ther
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2015. május 7. csütörtök, 16:39

Re: segítség!!

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

Elnézést a sok hsz-ért, már nem tudom szerkeszteni a korábbit, úgy néz ki hogy a Wire könyvtár meghívás után, valamiért a 2-es-t HIGH-ra állítja, és nem lehet módosítani indítás után, másik lábon (pl 1-es) azon jó (Valszeg ugyan ez a helyzet az RTC könyvtárral is)

Ilyen esetben mit lehet tenni? Szükségem lenne a kimenetre (más kérdés hogy akad e még hasonló gond, minden I/O port-ra szükségem lenne amúgy)

EDIT: a 2-es és 3-as digitális pin folyamatosan HIGH-on van Wire könyvtárral, és valószínűleg az RTC.now könyvtárral is
Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Re: segítség!!

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

Lehet, hogy bele kellene nézni a wire könyvtárba, hol foghatja ezeket a lábakat. Én is használok wire könyvtárat és 1307-et is, de nálam nem volt ilyen gond. Talán más wire könyvtár segít.
Lezárt