• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
pixy cam arduino
#1
Witam !!!
Mam taki problem . Rozpoznaję obiekt i jak wykryje go kamera i to na chwilę włączy wyjście (mignie dioda)
Chciały żeby wyjście było włączone tak długo jak widzi obiekt kamera a nie chwilę.

signature = pixy.blocks[j].signature;

Poniżej program


Kod:
#include <SPI.h> 
#include <Pixy.h>
#include <Servo.h>
 
Pixy pixy;
Servo servo;


int poz = 0;
int signature = 0;
int signature2 = 0;

void setup()
{
  Serial.begin(9600);
  Serial.print("Starting...\n");

  pixy.init();
servo.attach (9);
       servo.write(poz);
delay(100);

pinMode(2, OUTPUT);
digitalWrite(2, LOW);

pinMode(4, OUTPUT);
digitalWrite(4, LOW);

  pinMode(8, OUTPUT);
digitalWrite(8, HIGH);

}

void loop()

{
  static int i = 0;
  int j;
  int k;
  uint16_t blocks;
  char buf[32];
  blocks = pixy.getBlocks();
 
  if (blocks)
  {
   
      sprintf(buf, "Detected %d:\n", blocks);
      Serial.print(buf);
      delay(100);
         sprintf(buf, "  block %d: ", j);
         Serial.print(buf);
          pixy.blocks[j].print();

        signature = pixy.blocks[j].signature;
       Serial.println(signature);
 
   //wykrycie pierwszego obiektu z wzorca       
          if (signature == 1)
           { //if signature 1
   
              digitalWrite(8, LOW);
              digitalWrite(4, HIGH);
             servo.write(180);
             delay(1000);
             
              digitalWrite(4, LOW);
              delay(100);
              digitalWrite(8, HIGH);
              servo.write(poz);
              delay(100);


           }//if signature 1
         
          //wykrycie drgiego obiektu z wzorca
           if (signature == 2)
           {
           
              digitalWrite(2, HIGH);
              delay(3000);
              digitalWrite(2, LOW);
              delay (100);
             
           }
                      
   }
   
}
 
#2
Pod który pin podłączona jest dioda?
Dla czego nie ma schematu?
Dla czego program nie ma komentarzy?

P.S.
Jak będziesz pisał komentarze, to zauważysz która linijka kodu odpowiada za zapalenie diody, a która za zgaszenie.
Wtedy wystarczy wyciąć tę odpowiedzialną za gaszenie i wkleić poza blokiem if, zaopatrując ją w instrukcję else.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
#3
Problem jest taki że kamera próbkuje Czyli analizuje obraz co 500 ms. W tym czasie jak jest obiekt to złączy przejdzie do nowego cyklu analizy wyłączy i znowu załączy diody po identyfikacji obiektu

Po co schemat Przecież masz w programie na którym porcie podpięte są diady

Cytat:
Kod:
#include <SPI.h> 
#include <Pixy.h>
#include <Servo.h>
 
Pixy pixy;
Servo servo;

//definicja zmiennych do kamery Pixy (analiza ramki z kamery)
int poz = 0;
int signature = 0;
int signature2 = 0;

//definicja zmiennych do zegara systemowego
unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzas = 0;
unsigned long roznicaCzasu = 0;

//definicja diod LED
#define dioda_LED2 2
#define dioda_LED3 3
#define dioda_LED4 4

#define serwo_pin 9

void setup()
{
    Serial.begin(9600);
    Serial.print("Startuje Pixy...\n");
 
//inicjacja kamery Pixy
pixy.init();

//definicja i i nicjacja serwo na porcie 9
servo.attach (serwo_pin);
servo.write(90);
delay(100);

//definicja portów i ustawienie ich stanu poczatkowego
pinMode(dioda_LED2, OUTPUT);
digitalWrite(dioda_LED2, LOW);

pinMode(dioda_LED3, OUTPUT);
digitalWrite(dioda_LED3, LOW);

pinMode(dioda_LED4, OUTPUT);
digitalWrite(dioda_LED4, LOW);

  pinMode(serwo_pin, OUTPUT);
digitalWrite(serwo_pin, HIGH);

}

void loop()
{
//Pobierz liczbe milisekund od startu
  aktualnyCzas = millis();
  roznicaCzasu = aktualnyCzas - zapamietanyCzas;
  static int i = 0;
  int j;
  int k;
  uint16_t blocks;
  char buf[32];
  blocks = pixy.getBlocks();

  if (blocks)
  {
   
      sprintf(buf, "Detected %d:\n", blocks);
      Serial.print(buf);
      delay(100);
         sprintf(buf, "  block %d: ", j);
         Serial.print(buf);
          pixy.blocks[j].print();

        signature = pixy.blocks[j].signature;
        Serial.println(signature);
       
     //wykrycie pierwszego obiektu z wzorca       
          if (signature == 1)
           {
            while(millis() < aktualnyCzas + 1000){
             digitalWrite(dioda_LED2, HIGH);
             servo.write(180);
            }
           }
         
          //wykrycie drgiego obiektu z wzorca
           if (signature == 2)
           {
            while(millis() < aktualnyCzas + 1000){
            digitalWrite(dioda_LED3, HIGH);
            alarm();
            }
           }     

              //wykrycie trzeciego obiektu z wzorca
           if (signature == 3)
           {
            while(millis() < aktualnyCzas + 1000){
            alarm();//właczenie alarmu
           } 
           }
   }

else {
  //jeżeli kamera nie wykryje obiektu to wyłączy diody
digitalWrite(dioda_LED2, LOW); //Wyłącz diodę
digitalWrite(dioda_LED3, LOW); //Wyłącz diodę
digitalWrite(dioda_LED4, LOW); //Wyłącz diodę
servo.write(0);
   }
}

void alarm() {
    digitalWrite(4, HIGH); //Stan ALARM - dioda czerwona
    digitalWrite(4, LOW);
}
 
#4
Po pierwsze to w pierwszym kodzie nie było #define dioda_LED2 2 itd, więc to nie było takie oczywiste jak podpięte są diody.
Po drugie ja wiem co to jest definicja i deklaracja, więc nie o takie komentarze mi chodziło.
Interesują mnie takie niuanse jak:
Kod:
          if (signature == 1)
           {
            while(millis() < aktualnyCzas + 1000){
             digitalWrite(dioda_LED2, HIGH);
             servo.write(180);
            }
           }

 Po co jest ten while()????
A nawet jak by czekać na następną analizę i godzinę, to przecież nie musisz resetować stanu diody.Jeśli po następnej analizie obrazu nie wykryjesz wzorca, to dopiero wtedy ją gaś.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
#5
jak masz tak pomagać to lepiej nie pomagaj. Temat rozwiązany Proszę o zamknięcie bo ręce opadają
 
#6
- Cześć mam problem, pomożesz?
- A na czym polega problem? Możesz wskazać konkrety? W którym miejscu kodu masz kłopot?
-Nie no, jak tak masz pomagać, to lepiej nie pomagaj.

Następnym razem, jak kod będzie bez komentarzy. Nie będzie schematu. Nie będziesz wiedział jak działa Twój własny kod. To będzie ostrzeżenie.
Miłego wieczoru.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
  


Skocz do:


Przeglądający: 1 gości