Elektronische Sleutel IB tag

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 11
Geregistreerd: 22 Jun 2019, 22:16

Elektronische Sleutel IB tag

Berichtdoor Danny b » 22 Jun 2019, 22:42

Hoi,
ben nieuw in het Arduino wereld.

Wil graag een ibutton garage poort opener maken heb al iets in elkaar gezet en deze werkt, misschien kan er iets verbeterd worden.
Suggesties mag.

Maar ben vooral op zoek hoe ik bv key1 een naam kan geven op het seriële monitor van plaats een nummer. Zodat ik kan zien wie zijn sleutel is gebruikt.

Wie kan me helpen.
Code: Alles selecteren
#include <OneWire.h>

// ID's van twee iButton-sleutels
byte key1[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC}; // 00 00 00 00 01 00 00 DC
byte key2[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54}; // 00 00 00 00 01 00 00 54



int pinNumber = 2;     
OneWire ds(pinNumber);
 
void setup() {
 pinMode(3, OUTPUT);   


 Serial.begin(9600);
}
 
void loop() {
  byte addr[8];
  byte val1 = 0;
  byte val2 = 0;
 
  delay(1000);
  if (ds.search(addr)) {
   Serial.print("#");
   for (int i=0; i<8; i++) {
       Serial.print(" ");
       Serial.print(addr[i], HEX);
       
       // 1key
       if (addr[i] == key1[i]) val1++;
       // 2 key
       if (addr[i] == key2[i]) val2++;
   }
   Serial.print("@");
   Serial.println("");   
   ds.reset_search();
  }
 
 
  if (val1 == 8) {
     digitalWrite(3, HIGH);
     delay(1000);
     digitalWrite(3, LOW);   
  }

  if (val2 == 8) {
     digitalWrite(3, HIGH);
     delay(500);
     digitalWrite(3, LOW);   
  }   
}



Mvg Danny B

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Elektronische Sleutel IB tag

Berichtdoor Koepel » 23 Jun 2019, 00:36

Wanneer je overstapt op een twee-dimensionaal array, dan kun je de naam eenvoudig toevoegen.

Code: Alles selecteren
// ID's van twee iButton-sleutels
const byte keys[2][8] =
{
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC},    // 00 00 00 00 01 00 00 DC
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54},    // 00 00 00 00 01 00 00 54
};

const char * namen[2] = { "Tjeerd", "Wietske" };


Om een paar byte te vergelijken is er de functie memcmp() : http://www.cplusplus.com/reference/cstring/memcmp/.
Die hoef je niet te gebruiken, je kunt ook de 8 byte aflopen zoals je nu hebt.

Berichten: 11
Geregistreerd: 22 Jun 2019, 22:16

Re: Elektronische Sleutel IB tag

Berichtdoor Danny b » 23 Jun 2019, 09:50

Thx gaan straks eens uitproberen.

Berichten: 11
Geregistreerd: 22 Jun 2019, 22:16

Re: Elektronische Sleutel IB tag

Berichtdoor Danny b » 24 Jun 2019, 17:34

Moet ik nog dingen veranderen want krijg het niet in orde?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Elektronische Sleutel IB tag

Berichtdoor Koepel » 24 Jun 2019, 21:28

Als je een twee-dimensioneel array gebruikt, dan krijg je vaak twee for-statements in elkaar en keys[i][j].
Kun je laten zien wat je hebt ?

Berichten: 11
Geregistreerd: 22 Jun 2019, 22:16

Re: Elektronische Sleutel IB tag

Berichtdoor Danny b » 24 Jun 2019, 21:43

Ken er niet veel van he dus ben even niet mee.

heb niet veel veranderd.

Code: Alles selecteren
#include <OneWire.h>

// ID's van twee iButton-sleutels           // en dit gedeelte geplaatst van jou
const byte keys[2][8] =
{
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC},    // 00 00 00 00 01 00 00 DC
  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54},    // 00 00 00 00 01 00 00 54
};

const char * namen[2] = { "Tjeerd", "Wietske" };

int pinNumber = 2;     
OneWire ds(pinNumber);
 
void setup() {
 pinMode(3, OUTPUT);   


 Serial.begin(9600);
}
 
void loop() {
  byte addr[8];
  byte val1 = 0;
  byte val2 = 0;
 
  delay(1000);
  if (ds.search(addr)) {
   Serial.print("#");
   for (int i=0; i<8; i++) {
       Serial.print(" ");
       Serial.print(addr[i], HEX);
       
       // 1key
       if (addr[i] == keys[i]) val1++;        //  deze veranderd van key1 naar keys
       // 2 key
       if (addr[i] == keys[i]) val2++;      //   deze veranderd van key2 naar keys
   }
   Serial.print("@");
   Serial.println("");   
   ds.reset_search();
  }
 
 
  if (val1 == 8) {
     digitalWrite(3, HIGH);
     delay(1000);
     digitalWrite(3, LOW);   
  }

  if (val2 == 8) {
     digitalWrite(3, HIGH);
     delay(500);
     digitalWrite(3, LOW);   
  }   
}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Elektronische Sleutel IB tag

Berichtdoor shooter » 24 Jun 2019, 21:56

als je de mogelijke keys in een array hebt gezet.
dan kun je met een for loop vragen welke gelijk is aan de invoer.
as gelijk dan kun je in de tweede array opvragen welke naam erbij hoort.
paul deelen
shooter@home.nl

Berichten: 11
Geregistreerd: 22 Jun 2019, 22:16

Re: Elektronische Sleutel IB tag

Berichtdoor Danny b » 29 Jun 2019, 23:20

Even terug tijd gehad om te bekijken maar heb nog een duwtje nodig.
Geraak er niet aan uit.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Elektronische Sleutel IB tag

Berichtdoor Koepel » 30 Jun 2019, 00:01

Voordat je onderstaande sketch probeert, zoek dan eerst zelf eens uit waar myData[1][0][0][4] en myData[0][1][3][2] zitten.

De fijnste onderderverdeling staat achteraan.
Ik koos myData[3][2][4][5].
Dat zou dit kunnen zijn: drie gebouwen, met in elk gebouw twee kasten, in elke kast vier laden, en in elke lade vijf stropdassen.
Dat is bij elkaar 3 * 2 * 4 * 5 = 120 stropdassen. En op elke stropdas staat een integer getal geschreven.
Of dit: drie landen, met in elk land twee provincies, in elke provincie vier dorpen, en elk dorp vijf inwoners, en het array geeft het aantal euros dat iedere inwoner heeft.

De index begint bij 0.
Het is dus myData[0...2][0...1][0...3][0...4].

Het belangrijkste deel zijn de vier for-loops in elkaar, met daar binnenin: myData[i][j][k][l]. Dat is hoe je een array afloopt.

cpp code
const int myData[3][2][4][5] =
{
{
{
{ 21, 22, 23, 24, 25 },
{ 121, 122, 123, 124, 125 },
{ 221, 222, 223, 224, 225 },
{ 321, 322, 323, 324, 325 },
},
{
{ 219, 228, 237, 246, 255 },
{ 1219, 1228, 1237, 1246, 1255 },
{ 2219, 2228, 2237, 2246, 2255 },
{ 3219, 3228, 3237, 3246, 3255 },
},
},
{
{
{ -21, -22, -23, -24, -25 },
{ -121, -122, -123, -124, -125 },
{ -221, -222, -223, -224, -225 },
{ -321, -322, -323, -324, -325 },
},
{
{ -219, -228, -237, -246, -255 },
{ -1219, -1228, -1237, -1246, -1255 },
{ -2219, -2228, -2237, -2246, -2255 },
{ -3219, -3228, -3237, -3246, -3255 },
},
},
{
{
{ 1021, 1022, 1023, 1024, 1025 },
{ 10121, 10122, 10123, 10124, 10125 },
{ 10221, 10222, 10223, 10224, 10225 },
{ 10321, 10322, 10323, 10324, 10325 },
},
{
{ 1129, 1128, 1127, 1126, 1125 },
{ 11129, 11128, 11127, 11126, 11125 },
{ 11229, 11228, 11227, 11226, 11225 },
{ 11329, 11328, 11327, 11326, 11325 },
},
},
};


void setup()
{
Serial.begin( 9600);
Serial.println( "Multi-dimensionale arrays");

Serial.print( "myData[1][0][0][4] = ");
Serial.println( myData[1][0][0][4]);

Serial.print( "myData[0][1][3][2] = ");
Serial.println( myData[0][1][3][2]);

Serial.println( "myData:");
for( int i=0; i<3; i++)
{
for( int j=0; j<2; j++)
{
for( int k=0; k<4; k++)
{
for( int l=0; l<5; l++)
{
Serial.print( myData[i][j][k][l]);
Serial.print( ", ");
}
Serial.println();
}
Serial.println( "---");
}
}
}

void loop()
{
}

Berichten: 11
Geregistreerd: 22 Jun 2019, 22:16

Re: Elektronische Sleutel IB tag

Berichtdoor Danny b » 30 Jun 2019, 00:58

Ben even info aan het zoeken geweest hoe dimensionale arrays werken.
Denk dat ik nu ongeveer weet hoe ze werken.

ik ga proberen uit te leggen hoe ik er aan kom.
myData[1][0][0][4]

moest ik in gebouw 1 gaan zoeken ( 2 de blok met de - getallen) moest dan in de eerste kast gaan kijken ( getallen -21 tot - 325 ) dan naar lade 0 ( getallen -21 tot -25) dan moest ik de 4de stropdas hebben ( dus denk -25 )
voor het 2de
myData[0][1][3][2]

zou het 3237 moeten zijn

want mijn engels is niet heel goed dus paar keer naar de uitleg gaan kijken .

Als ik juist ben heb je een goed voorbeeld gegeven.

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten